diff --git a/index.html b/index.html index 43ab2de..c35cc43 100644 --- a/index.html +++ b/index.html @@ -193,7 +193,7 @@

Procedures

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/interface/gemm.html b/interface/gemm.html index d77db54..badb505 100644 --- a/interface/gemm.html +++ b/interface/gemm.html @@ -597,7 +597,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -627,7 +627,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -672,7 +672,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -816,7 +816,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -846,7 +846,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -891,7 +891,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -1035,7 +1035,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1065,7 +1065,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1110,7 +1110,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -1160,7 +1160,7 @@

Arguments

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/interface/gemv.html b/interface/gemv.html index c76b5c2..4775c97 100644 --- a/interface/gemv.html +++ b/interface/gemv.html @@ -465,7 +465,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -654,7 +654,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -843,7 +843,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -968,7 +968,7 @@

Arguments

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/interface/matmul.html b/interface/matmul.html index 62694aa..a0436a9 100644 --- a/interface/matmul.html +++ b/interface/matmul.html @@ -170,53 +170,53 @@

Calls

interface~matmul - -formatmul::matmul + +formatmul::matmul proc~mat_mat_block_rel - -formatmul::mat_mat_block_rel + +formatmul::mat_mat_block_rel interface~matmul->proc~mat_mat_block_rel - - + + proc~mat_mat_coarray_rel - -formatmul::mat_mat_coarray_rel + +formatmul::mat_mat_coarray_rel interface~matmul->proc~mat_mat_coarray_rel - - + + proc~mat_mat_rel - -formatmul::mat_mat_rel + +formatmul::mat_mat_rel interface~matmul->proc~mat_mat_rel - - + + @@ -230,23 +230,23 @@

Calls

interface~matmul->proc~mat_vec_block_rel - - + + proc~mat_vec_coarray_rel - -formatmul::mat_vec_coarray_rel + +formatmul::mat_vec_coarray_rel interface~matmul->proc~mat_vec_coarray_rel - - + + @@ -260,71 +260,59 @@

Calls

interface~matmul->proc~mat_vec_rel - - + + proc~compute_block_ranges - -formatmul::compute_block_ranges + +formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges - - - - - -reduce - -reduce - - - -proc~mat_mat_block_rel->reduce - - + + - + proc~mat_mat_coarray_rel->proc~compute_block_ranges - - + + proc~mat_mat_rel_ab - -formatmul::mat_mat_rel_AB + +formatmul::mat_mat_rel_AB - + proc~mat_mat_rel->proc~mat_mat_rel_ab - - + + proc~mat_mat_rel_abt - -formatmul::mat_mat_rel_ABT + +formatmul::mat_mat_rel_ABT - + proc~mat_mat_rel->proc~mat_mat_rel_abt - - + + @@ -336,10 +324,10 @@

Calls

- + proc~mat_mat_rel->proc~mat_mat_rel_atb - - + + @@ -351,1222 +339,1216 @@

Calls

- + proc~mat_mat_rel->proc~mat_mat_rel_atbt - - + + - + proc~mat_vec_block_rel->proc~compute_block_ranges - - - - - -proc~mat_vec_block_rel->reduce - - + + - + proc~mat_vec_coarray_rel->proc~compute_block_ranges - - + + proc~mat_vec_rel_atv - -formatmul::mat_vec_rel_ATv + +formatmul::mat_vec_rel_ATv - + proc~mat_vec_rel->proc~mat_vec_rel_atv - - + + proc~mat_vec_rel_av - -formatmul::mat_vec_rel_Av + +formatmul::mat_vec_rel_Av - + proc~mat_vec_rel->proc~mat_vec_rel_av - - + + - + proc~mat_mat_rel_ab_opt - - -formatmul_opts::mat_mat_rel_AB_opt + + +formatmul_opts::mat_mat_rel_AB_opt - + proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt - - + + - + proc~mat_mat_rel_abt_opt - - -formatmul_opts::mat_mat_rel_ABT_opt + + +formatmul_opts::mat_mat_rel_ABT_opt - + proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt - - + + - + proc~mat_mat_rel_atb_opt - + formatmul_opts::mat_mat_rel_ATB_opt - + proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt - - + + - + proc~mat_mat_rel_atbt_opt - + formatmul_opts::mat_mat_rel_ATBT_opt - + proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt - - + + - + proc~mat_vec_rel_atv_opt - - -formatmul_opts::mat_vec_rel_ATv_opt + + +formatmul_opts::mat_vec_rel_ATv_opt - + proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt - - + + - + proc~mat_vec_rel_av_opt - - -formatmul_opts::mat_vec_rel_Av_opt + + +formatmul_opts::mat_vec_rel_Av_opt - + proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt - - + + - + proc~mm_ab_1 - - -formatmul_opts::mm_AB_1 + + +formatmul_opts::mm_AB_1 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_1 - - + + - + proc~mm_ab_10 - - -formatmul_opts::mm_AB_10 + + +formatmul_opts::mm_AB_10 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_10 - - + + - + proc~mm_ab_11 - - -formatmul_opts::mm_AB_11 + + +formatmul_opts::mm_AB_11 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_11 - - + + - + proc~mm_ab_12 - - -formatmul_opts::mm_AB_12 + + +formatmul_opts::mm_AB_12 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_12 - - + + - + proc~mm_ab_13 - - -formatmul_opts::mm_AB_13 + + +formatmul_opts::mm_AB_13 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_13 - - + + - + proc~mm_ab_2 - - -formatmul_opts::mm_AB_2 + + +formatmul_opts::mm_AB_2 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_2 - - + + - + proc~mm_ab_3 - - -formatmul_opts::mm_AB_3 + + +formatmul_opts::mm_AB_3 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_3 - - + + - + proc~mm_ab_4 - - -formatmul_opts::mm_AB_4 + + +formatmul_opts::mm_AB_4 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_4 - - + + - + proc~mm_ab_5 - - -formatmul_opts::mm_AB_5 + + +formatmul_opts::mm_AB_5 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_5 - - + + - + proc~mm_ab_6 - - -formatmul_opts::mm_AB_6 + + +formatmul_opts::mm_AB_6 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_6 - - + + - + proc~mm_ab_7 - - -formatmul_opts::mm_AB_7 + + +formatmul_opts::mm_AB_7 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_7 - - + + - + proc~mm_ab_8 - - -formatmul_opts::mm_AB_8 + + +formatmul_opts::mm_AB_8 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_8 - - + + - + proc~mm_ab_9 - - -formatmul_opts::mm_AB_9 + + +formatmul_opts::mm_AB_9 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_9 - - + + - + proc~mm_abt_1 - - -formatmul_opts::mm_ABT_1 + + +formatmul_opts::mm_ABT_1 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_1 - - + + - + proc~mm_abt_10 - - -formatmul_opts::mm_ABT_10 + + +formatmul_opts::mm_ABT_10 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_10 - - + + - + proc~mm_abt_11 - - -formatmul_opts::mm_ABT_11 + + +formatmul_opts::mm_ABT_11 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_11 - - + + - + proc~mm_abt_12 - - -formatmul_opts::mm_ABT_12 + + +formatmul_opts::mm_ABT_12 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_12 - - + + - + proc~mm_abt_13 - - -formatmul_opts::mm_ABT_13 + + +formatmul_opts::mm_ABT_13 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_13 - - + + - + proc~mm_abt_2 - - -formatmul_opts::mm_ABT_2 + + +formatmul_opts::mm_ABT_2 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_2 - - + + - + proc~mm_abt_3 - - -formatmul_opts::mm_ABT_3 + + +formatmul_opts::mm_ABT_3 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_3 - - + + - + proc~mm_abt_4 - - -formatmul_opts::mm_ABT_4 + + +formatmul_opts::mm_ABT_4 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_4 - - + + - + proc~mm_abt_5 - - -formatmul_opts::mm_ABT_5 + + +formatmul_opts::mm_ABT_5 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_5 - - + + - + proc~mm_abt_6 - - -formatmul_opts::mm_ABT_6 + + +formatmul_opts::mm_ABT_6 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_6 - - + + - + proc~mm_abt_7 - - -formatmul_opts::mm_ABT_7 + + +formatmul_opts::mm_ABT_7 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_7 - - + + - + proc~mm_abt_8 - - -formatmul_opts::mm_ABT_8 + + +formatmul_opts::mm_ABT_8 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_8 - - + + - + proc~mm_abt_9 - - -formatmul_opts::mm_ABT_9 + + +formatmul_opts::mm_ABT_9 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_9 - - + + - + proc~mm_atb_1 - - -formatmul_opts::mm_ATB_1 + + +formatmul_opts::mm_ATB_1 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_1 - - + + - + proc~mm_atb_10 - - -formatmul_opts::mm_ATB_10 + + +formatmul_opts::mm_ATB_10 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_10 - - + + - + proc~mm_atb_11 - - -formatmul_opts::mm_ATB_11 + + +formatmul_opts::mm_ATB_11 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_11 - - + + - + proc~mm_atb_12 - - -formatmul_opts::mm_ATB_12 + + +formatmul_opts::mm_ATB_12 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_12 - - + + - + proc~mm_atb_13 - - -formatmul_opts::mm_ATB_13 + + +formatmul_opts::mm_ATB_13 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_13 - - + + - + proc~mm_atb_2 - - -formatmul_opts::mm_ATB_2 + + +formatmul_opts::mm_ATB_2 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_2 - - + + - + proc~mm_atb_3 - - -formatmul_opts::mm_ATB_3 + + +formatmul_opts::mm_ATB_3 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_3 - - + + - + proc~mm_atb_4 - - -formatmul_opts::mm_ATB_4 + + +formatmul_opts::mm_ATB_4 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_4 - - + + - + proc~mm_atb_5 - - -formatmul_opts::mm_ATB_5 + + +formatmul_opts::mm_ATB_5 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_5 - - + + - + proc~mm_atb_6 - - -formatmul_opts::mm_ATB_6 + + +formatmul_opts::mm_ATB_6 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_6 - - + + - + proc~mm_atb_7 - - -formatmul_opts::mm_ATB_7 + + +formatmul_opts::mm_ATB_7 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_7 - - + + - + proc~mm_atb_8 - - -formatmul_opts::mm_ATB_8 + + +formatmul_opts::mm_ATB_8 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_8 - - + + - + proc~mm_atb_9 - - -formatmul_opts::mm_ATB_9 + + +formatmul_opts::mm_ATB_9 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_9 - - + + - + proc~mm_atbt_1 - - -formatmul_opts::mm_ATBT_1 + + +formatmul_opts::mm_ATBT_1 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 - - + + - + proc~mm_atbt_10 - - -formatmul_opts::mm_ATBT_10 + + +formatmul_opts::mm_ATBT_10 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 - - + + - + proc~mm_atbt_11 - - -formatmul_opts::mm_ATBT_11 + + +formatmul_opts::mm_ATBT_11 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 - - + + - + proc~mm_atbt_12 - - -formatmul_opts::mm_ATBT_12 + + +formatmul_opts::mm_ATBT_12 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 - - + + - + proc~mm_atbt_13 - - -formatmul_opts::mm_ATBT_13 + + +formatmul_opts::mm_ATBT_13 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 - - + + - + proc~mm_atbt_2 - - -formatmul_opts::mm_ATBT_2 + + +formatmul_opts::mm_ATBT_2 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 - - + + - + proc~mm_atbt_3 - - -formatmul_opts::mm_ATBT_3 + + +formatmul_opts::mm_ATBT_3 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 - - + + - + proc~mm_atbt_4 - - -formatmul_opts::mm_ATBT_4 + + +formatmul_opts::mm_ATBT_4 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 - - + + - + proc~mm_atbt_5 - - -formatmul_opts::mm_ATBT_5 + + +formatmul_opts::mm_ATBT_5 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 - - + + - + proc~mm_atbt_6 - - -formatmul_opts::mm_ATBT_6 + + +formatmul_opts::mm_ATBT_6 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 - - + + - + proc~mm_atbt_7 - - -formatmul_opts::mm_ATBT_7 + + +formatmul_opts::mm_ATBT_7 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 - - + + - + proc~mm_atbt_8 - - -formatmul_opts::mm_ATBT_8 + + +formatmul_opts::mm_ATBT_8 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 - - + + - + proc~mm_atbt_9 - - -formatmul_opts::mm_ATBT_9 + + +formatmul_opts::mm_ATBT_9 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 - - + + - + proc~mv_atv_1 - - -formatmul_opts::mv_ATv_1 + + +formatmul_opts::mv_ATv_1 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_1 - - + + - + proc~mv_atv_2 - - -formatmul_opts::mv_ATv_2 + + +formatmul_opts::mv_ATv_2 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_2 - - + + - + proc~mv_atv_3 - - -formatmul_opts::mv_ATv_3 + + +formatmul_opts::mv_ATv_3 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_3 - - + + - + proc~mv_atv_4 - - -formatmul_opts::mv_ATv_4 + + +formatmul_opts::mv_ATv_4 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_4 - - + + - + proc~mv_atv_5 - - -formatmul_opts::mv_ATv_5 + + +formatmul_opts::mv_ATv_5 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_5 - - + + - + proc~mv_atv_6 - - -formatmul_opts::mv_ATv_6 + + +formatmul_opts::mv_ATv_6 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_6 - - + + - + proc~mv_atv_7 - - -formatmul_opts::mv_ATv_7 + + +formatmul_opts::mv_ATv_7 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_7 - - + + - + proc~mv_atv_8 - - -formatmul_opts::mv_ATv_8 + + +formatmul_opts::mv_ATv_8 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_8 - - + + - + proc~mv_av_1 - - -formatmul_opts::mv_Av_1 + + +formatmul_opts::mv_Av_1 - + proc~mat_vec_rel_av_opt->proc~mv_av_1 - - + + - + proc~mv_av_2 - - -formatmul_opts::mv_Av_2 + + +formatmul_opts::mv_Av_2 - + proc~mat_vec_rel_av_opt->proc~mv_av_2 - - + + - + proc~mv_av_3 - - -formatmul_opts::mv_Av_3 + + +formatmul_opts::mv_Av_3 - + proc~mat_vec_rel_av_opt->proc~mv_av_3 - - + + - + proc~mv_av_4 - - -formatmul_opts::mv_Av_4 + + +formatmul_opts::mv_Av_4 - + proc~mat_vec_rel_av_opt->proc~mv_av_4 - - + + - + proc~mv_av_5 - - -formatmul_opts::mv_Av_5 + + +formatmul_opts::mv_Av_5 - + proc~mat_vec_rel_av_opt->proc~mv_av_5 - - + + - + proc~mv_av_6 - - -formatmul_opts::mv_Av_6 + + +formatmul_opts::mv_Av_6 - + proc~mat_vec_rel_av_opt->proc~mv_av_6 - - + + - + proc~mv_av_7 - - -formatmul_opts::mv_Av_7 + + +formatmul_opts::mv_Av_7 - + proc~mat_vec_rel_av_opt->proc~mv_av_7 - - + + - + proc~mv_av_8 - - -formatmul_opts::mv_Av_8 + + +formatmul_opts::mv_Av_8 - + proc~mat_vec_rel_av_opt->proc~mv_av_8 - - + + - + interface~gemm - + external_interfaces_matmul::gemm - + proc~mm_ab_2->interface~gemm - - + + - + proc~mm_abt_2->interface~gemm - - + + - + proc~mm_atb_2->interface~gemm - - + + - + proc~mm_atbt_2->interface~gemm - - + + - + interface~gemv - - -external_interfaces_matmul::gemv + + +external_interfaces_matmul::gemv - + proc~mv_atv_2->interface~gemv - - + + - + proc~mv_av_2->interface~gemv - - + + @@ -1682,7 +1664,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -1697,7 +1679,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2036,7 +2018,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2051,7 +2033,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2129,7 +2111,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2144,7 +2126,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2237,7 +2219,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2252,7 +2234,7 @@

Arguments

- + real(kind=rk), intent(in), @@ -2336,7 +2318,7 @@

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/lists/files.html b/lists/files.html index c9f73ce..f9ff5b1 100644 --- a/lists/files.html +++ b/lists/files.html @@ -442,7 +442,7 @@

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/lists/modules.html b/lists/modules.html index d519054..f7168de 100644 --- a/lists/modules.html +++ b/lists/modules.html @@ -801,7 +801,7 @@

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/lists/procedures.html b/lists/procedures.html index e078a4b..bdbd3f5 100644 --- a/lists/procedures.html +++ b/lists/procedures.html @@ -673,8 +673,8 @@

Procedures

interface~gemm - -external_interfaces_matmul::gemm + +external_interfaces_matmul::gemm @@ -682,8 +682,8 @@

Procedures

interface~gemv - -external_interfaces_matmul::gemv + +external_interfaces_matmul::gemv @@ -691,8 +691,8 @@

Procedures

interface~matmul - -formatmul::matmul + +formatmul::matmul @@ -700,31 +700,31 @@

Procedures

proc~mat_mat_block_rel - -formatmul::mat_mat_block_rel + +formatmul::mat_mat_block_rel interface~matmul->proc~mat_mat_block_rel - - + + proc~mat_mat_coarray_rel - -formatmul::mat_mat_coarray_rel + +formatmul::mat_mat_coarray_rel interface~matmul->proc~mat_mat_coarray_rel - - + + @@ -738,60 +738,60 @@

Procedures

interface~matmul->proc~mat_mat_rel - - + + proc~mat_vec_block_rel - -formatmul::mat_vec_block_rel + +formatmul::mat_vec_block_rel interface~matmul->proc~mat_vec_block_rel - - + + proc~mat_vec_coarray_rel - -formatmul::mat_vec_coarray_rel + +formatmul::mat_vec_coarray_rel interface~matmul->proc~mat_vec_coarray_rel - - + + proc~mat_vec_rel - -formatmul::mat_vec_rel + +formatmul::mat_vec_rel interface~matmul->proc~mat_vec_rel - - + + proc~compute_block_ranges - -formatmul::compute_block_ranges + +formatmul::compute_block_ranges @@ -799,8 +799,8 @@

Procedures

proc~impure_mm_ab_12 - -formatmul_opts.f90::impure_mm_AB_12 + +formatmul_opts.f90::impure_mm_AB_12 @@ -808,8 +808,8 @@

Procedures

proc~impure_mm_ab_13 - -formatmul_opts.f90::impure_mm_AB_13 + +formatmul_opts.f90::impure_mm_AB_13 @@ -817,8 +817,8 @@

Procedures

proc~impure_mm_abt_12 - -formatmul_opts.f90::impure_mm_ABT_12 + +formatmul_opts.f90::impure_mm_ABT_12 @@ -826,8 +826,8 @@

Procedures

proc~impure_mm_abt_13 - -formatmul_opts.f90::impure_mm_ABT_13 + +formatmul_opts.f90::impure_mm_ABT_13 @@ -835,8 +835,8 @@

Procedures

proc~impure_mm_atb_12 - -formatmul_opts.f90::impure_mm_ATB_12 + +formatmul_opts.f90::impure_mm_ATB_12 @@ -844,8 +844,8 @@

Procedures

proc~impure_mm_atb_13 - -formatmul_opts.f90::impure_mm_ATB_13 + +formatmul_opts.f90::impure_mm_ATB_13 @@ -853,8 +853,8 @@

Procedures

proc~impure_mm_atbt_12 - -formatmul_opts.f90::impure_mm_ATBT_12 + +formatmul_opts.f90::impure_mm_ATBT_12 @@ -862,64 +862,52 @@

Procedures

proc~impure_mm_atbt_13 - -formatmul_opts.f90::impure_mm_ATBT_13 + +formatmul_opts.f90::impure_mm_ATBT_13 proc~mat_mat_block_rel->proc~compute_block_ranges - - - - - -reduce - -reduce - - - -proc~mat_mat_block_rel->reduce - - + + - + proc~mat_mat_coarray_rel->proc~compute_block_ranges - - + + proc~mat_mat_rel_ab - -formatmul::mat_mat_rel_AB + +formatmul::mat_mat_rel_AB - + proc~mat_mat_rel->proc~mat_mat_rel_ab - - + + proc~mat_mat_rel_abt - -formatmul::mat_mat_rel_ABT + +formatmul::mat_mat_rel_ABT - + proc~mat_mat_rel->proc~mat_mat_rel_abt - - + + @@ -931,7 +919,7 @@

Procedures

- + proc~mat_mat_rel->proc~mat_mat_rel_atb @@ -946,7 +934,7 @@

Procedures

- + proc~mat_mat_rel->proc~mat_mat_rel_atbt @@ -961,205 +949,205 @@

Procedures

- + proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt - - + + proc~mm_ab_1 - -formatmul_opts::mm_AB_1 + +formatmul_opts::mm_AB_1 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_1 - - + + proc~mm_ab_10 - -formatmul_opts::mm_AB_10 + +formatmul_opts::mm_AB_10 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_10 - - + + proc~mm_ab_11 - -formatmul_opts::mm_AB_11 + +formatmul_opts::mm_AB_11 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_11 - - + + proc~mm_ab_12 - -formatmul_opts::mm_AB_12 + +formatmul_opts::mm_AB_12 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_12 - - + + proc~mm_ab_13 - -formatmul_opts::mm_AB_13 + +formatmul_opts::mm_AB_13 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_13 - - + + proc~mm_ab_2 - -formatmul_opts::mm_AB_2 + +formatmul_opts::mm_AB_2 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_2 - - + + proc~mm_ab_3 - -formatmul_opts::mm_AB_3 + +formatmul_opts::mm_AB_3 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_3 - - + + proc~mm_ab_4 - -formatmul_opts::mm_AB_4 + +formatmul_opts::mm_AB_4 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_4 - - + + proc~mm_ab_5 - -formatmul_opts::mm_AB_5 + +formatmul_opts::mm_AB_5 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_5 - - + + proc~mm_ab_6 - -formatmul_opts::mm_AB_6 + +formatmul_opts::mm_AB_6 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_6 - - + + proc~mm_ab_7 - -formatmul_opts::mm_AB_7 + +formatmul_opts::mm_AB_7 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_7 - - + + proc~mm_ab_8 - -formatmul_opts::mm_AB_8 + +formatmul_opts::mm_AB_8 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_8 - - + + proc~mm_ab_9 - -formatmul_opts::mm_AB_9 + +formatmul_opts::mm_AB_9 - + proc~mat_mat_rel_ab_opt->proc~mm_ab_9 - - + + @@ -1171,205 +1159,205 @@

Procedures

- + proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt - - + + proc~mm_abt_1 - -formatmul_opts::mm_ABT_1 + +formatmul_opts::mm_ABT_1 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_1 - - + + proc~mm_abt_10 - -formatmul_opts::mm_ABT_10 + +formatmul_opts::mm_ABT_10 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_10 - - + + proc~mm_abt_11 - -formatmul_opts::mm_ABT_11 + +formatmul_opts::mm_ABT_11 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_11 - - + + proc~mm_abt_12 - -formatmul_opts::mm_ABT_12 + +formatmul_opts::mm_ABT_12 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_12 - - + + proc~mm_abt_13 - -formatmul_opts::mm_ABT_13 + +formatmul_opts::mm_ABT_13 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_13 - - + + proc~mm_abt_2 - -formatmul_opts::mm_ABT_2 + +formatmul_opts::mm_ABT_2 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_2 - - + + proc~mm_abt_3 - -formatmul_opts::mm_ABT_3 + +formatmul_opts::mm_ABT_3 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_3 - - + + proc~mm_abt_4 - -formatmul_opts::mm_ABT_4 + +formatmul_opts::mm_ABT_4 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_4 - - + + proc~mm_abt_5 - -formatmul_opts::mm_ABT_5 + +formatmul_opts::mm_ABT_5 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_5 - - + + proc~mm_abt_6 - -formatmul_opts::mm_ABT_6 + +formatmul_opts::mm_ABT_6 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_6 - - + + proc~mm_abt_7 - -formatmul_opts::mm_ABT_7 + +formatmul_opts::mm_ABT_7 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_7 - - + + proc~mm_abt_8 - -formatmul_opts::mm_ABT_8 + +formatmul_opts::mm_ABT_8 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_8 - - + + proc~mm_abt_9 - -formatmul_opts::mm_ABT_9 + +formatmul_opts::mm_ABT_9 - + proc~mat_mat_rel_abt_opt->proc~mm_abt_9 - - + + @@ -1381,7 +1369,7 @@

Procedures

- + proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt @@ -1390,196 +1378,196 @@

Procedures

proc~mm_atb_1 - -formatmul_opts::mm_ATB_1 + +formatmul_opts::mm_ATB_1 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_1 - - + + proc~mm_atb_10 - -formatmul_opts::mm_ATB_10 + +formatmul_opts::mm_ATB_10 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_10 - - + + proc~mm_atb_11 - -formatmul_opts::mm_ATB_11 + +formatmul_opts::mm_ATB_11 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_11 - - + + proc~mm_atb_12 - -formatmul_opts::mm_ATB_12 + +formatmul_opts::mm_ATB_12 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_12 - - + + proc~mm_atb_13 - -formatmul_opts::mm_ATB_13 + +formatmul_opts::mm_ATB_13 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_13 - - + + proc~mm_atb_2 - -formatmul_opts::mm_ATB_2 + +formatmul_opts::mm_ATB_2 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_2 - - + + proc~mm_atb_3 - -formatmul_opts::mm_ATB_3 + +formatmul_opts::mm_ATB_3 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_3 - - + + proc~mm_atb_4 - -formatmul_opts::mm_ATB_4 + +formatmul_opts::mm_ATB_4 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_4 - - + + proc~mm_atb_5 - -formatmul_opts::mm_ATB_5 + +formatmul_opts::mm_ATB_5 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_5 - - + + proc~mm_atb_6 - -formatmul_opts::mm_ATB_6 + +formatmul_opts::mm_ATB_6 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_6 - - + + proc~mm_atb_7 - -formatmul_opts::mm_ATB_7 + +formatmul_opts::mm_ATB_7 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_7 - - + + proc~mm_atb_8 - -formatmul_opts::mm_ATB_8 + +formatmul_opts::mm_ATB_8 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_8 - - + + proc~mm_atb_9 - -formatmul_opts::mm_ATB_9 + +formatmul_opts::mm_ATB_9 - + proc~mat_mat_rel_atb_opt->proc~mm_atb_9 - - + + @@ -1591,7 +1579,7 @@

Procedures

- + proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt @@ -1600,751 +1588,745 @@

Procedures

proc~mm_atbt_1 - -formatmul_opts::mm_ATBT_1 + +formatmul_opts::mm_ATBT_1 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 - - + + proc~mm_atbt_10 - -formatmul_opts::mm_ATBT_10 + +formatmul_opts::mm_ATBT_10 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 - - + + proc~mm_atbt_11 - -formatmul_opts::mm_ATBT_11 + +formatmul_opts::mm_ATBT_11 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 - - + + proc~mm_atbt_12 - -formatmul_opts::mm_ATBT_12 + +formatmul_opts::mm_ATBT_12 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 - - + + proc~mm_atbt_13 - -formatmul_opts::mm_ATBT_13 + +formatmul_opts::mm_ATBT_13 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 - - + + proc~mm_atbt_2 - -formatmul_opts::mm_ATBT_2 + +formatmul_opts::mm_ATBT_2 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 - - + + proc~mm_atbt_3 - -formatmul_opts::mm_ATBT_3 + +formatmul_opts::mm_ATBT_3 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 - - + + proc~mm_atbt_4 - -formatmul_opts::mm_ATBT_4 + +formatmul_opts::mm_ATBT_4 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 - - + + proc~mm_atbt_5 - -formatmul_opts::mm_ATBT_5 + +formatmul_opts::mm_ATBT_5 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 - - + + proc~mm_atbt_6 - -formatmul_opts::mm_ATBT_6 + +formatmul_opts::mm_ATBT_6 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 - - + + proc~mm_atbt_7 - -formatmul_opts::mm_ATBT_7 + +formatmul_opts::mm_ATBT_7 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 - - + + proc~mm_atbt_8 - -formatmul_opts::mm_ATBT_8 + +formatmul_opts::mm_ATBT_8 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 - - + + proc~mm_atbt_9 - -formatmul_opts::mm_ATBT_9 + +formatmul_opts::mm_ATBT_9 - + proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 - - + + - + proc~mat_vec_block_rel->proc~compute_block_ranges - - - - - -proc~mat_vec_block_rel->reduce - - + + - + proc~mat_vec_coarray_rel->proc~compute_block_ranges - - + + proc~mat_vec_rel_atv - -formatmul::mat_vec_rel_ATv + +formatmul::mat_vec_rel_ATv - + proc~mat_vec_rel->proc~mat_vec_rel_atv - - + + proc~mat_vec_rel_av - -formatmul::mat_vec_rel_Av + +formatmul::mat_vec_rel_Av - + proc~mat_vec_rel->proc~mat_vec_rel_av - - + + proc~mat_vec_rel_atv_opt - -formatmul_opts::mat_vec_rel_ATv_opt + +formatmul_opts::mat_vec_rel_ATv_opt - + proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt - - + + proc~mv_atv_1 - -formatmul_opts::mv_ATv_1 + +formatmul_opts::mv_ATv_1 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_1 - - + + proc~mv_atv_2 - -formatmul_opts::mv_ATv_2 + +formatmul_opts::mv_ATv_2 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_2 - - + + proc~mv_atv_3 - -formatmul_opts::mv_ATv_3 + +formatmul_opts::mv_ATv_3 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_3 - - + + proc~mv_atv_4 - -formatmul_opts::mv_ATv_4 + +formatmul_opts::mv_ATv_4 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_4 - - + + proc~mv_atv_5 - -formatmul_opts::mv_ATv_5 + +formatmul_opts::mv_ATv_5 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_5 - - + + proc~mv_atv_6 - -formatmul_opts::mv_ATv_6 + +formatmul_opts::mv_ATv_6 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_6 - - + + proc~mv_atv_7 - -formatmul_opts::mv_ATv_7 + +formatmul_opts::mv_ATv_7 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_7 - - + + proc~mv_atv_8 - -formatmul_opts::mv_ATv_8 + +formatmul_opts::mv_ATv_8 - + proc~mat_vec_rel_atv_opt->proc~mv_atv_8 - - + + proc~mat_vec_rel_av_opt - -formatmul_opts::mat_vec_rel_Av_opt + +formatmul_opts::mat_vec_rel_Av_opt - + proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt - - + + proc~mv_av_1 - -formatmul_opts::mv_Av_1 + +formatmul_opts::mv_Av_1 - + proc~mat_vec_rel_av_opt->proc~mv_av_1 - - + + proc~mv_av_2 - -formatmul_opts::mv_Av_2 + +formatmul_opts::mv_Av_2 - + proc~mat_vec_rel_av_opt->proc~mv_av_2 - - + + proc~mv_av_3 - -formatmul_opts::mv_Av_3 + +formatmul_opts::mv_Av_3 - + proc~mat_vec_rel_av_opt->proc~mv_av_3 - - + + proc~mv_av_4 - -formatmul_opts::mv_Av_4 + +formatmul_opts::mv_Av_4 - + proc~mat_vec_rel_av_opt->proc~mv_av_4 - - + + proc~mv_av_5 - -formatmul_opts::mv_Av_5 + +formatmul_opts::mv_Av_5 - + proc~mat_vec_rel_av_opt->proc~mv_av_5 - - + + proc~mv_av_6 - -formatmul_opts::mv_Av_6 + +formatmul_opts::mv_Av_6 - + proc~mat_vec_rel_av_opt->proc~mv_av_6 - - + + proc~mv_av_7 - -formatmul_opts::mv_Av_7 + +formatmul_opts::mv_Av_7 - + proc~mat_vec_rel_av_opt->proc~mv_av_7 - - + + proc~mv_av_8 - -formatmul_opts::mv_Av_8 + +formatmul_opts::mv_Av_8 - + proc~mat_vec_rel_av_opt->proc~mv_av_8 - - + + - + proc~mm_ab_2->interface~gemm - - + + - + proc~mm_abt_2->interface~gemm - - + + - + proc~mm_atb_2->interface~gemm - - + + - + proc~mm_atbt_2->interface~gemm - - + + - + proc~mv_atv_2->interface~gemv - - + + - + proc~mv_av_2->interface~gemv - - + + program~test_matmul10 - -test_matmul10 + +test_matmul10 check - -check + +check - + program~test_matmul10->check - - + + program~test_matmul11 - -test_matmul11 + +test_matmul11 - + program~test_matmul11->check - - + + program~test_matmul12 - -test_matmul12 + +test_matmul12 - + program~test_matmul12->check - - + + program~test_matmul13 - -test_matmul13 + +test_matmul13 - + program~test_matmul13->check - - + + program~test_matmul14 - -test_matmul14 + +test_matmul14 - + program~test_matmul14->check - - + + program~test_matmul15 - -test_matmul15 + +test_matmul15 - + program~test_matmul15->check - - + + program~test_matmul3 - -test_matmul3 + +test_matmul3 - + program~test_matmul3->check - - + + program~test_matmul4 - -test_matmul4 + +test_matmul4 - + program~test_matmul4->check - - + + program~test_matmul5 - -test_matmul5 + +test_matmul5 - + program~test_matmul5->check - - + + program~test_matmul6 - -test_matmul6 + +test_matmul6 - + program~test_matmul6->check - - + + program~test_matmul7 - -test_matmul7 + +test_matmul7 - + program~test_matmul7->check - - + + program~test_matmul8 - -test_matmul8 + +test_matmul8 - + program~test_matmul8->check - - + + program~test_matmul9 - -test_matmul9 + +test_matmul9 - + program~test_matmul9->check - - + + @@ -2445,7 +2427,7 @@

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/lists/programs.html b/lists/programs.html index ca77e04..8ffced5 100644 --- a/lists/programs.html +++ b/lists/programs.html @@ -148,7 +148,7 @@

Programs

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/module/external_interfaces_matmul.html b/module/external_interfaces_matmul.html index 622b705..651869a 100644 --- a/module/external_interfaces_matmul.html +++ b/module/external_interfaces_matmul.html @@ -578,7 +578,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -608,7 +608,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -653,7 +653,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -796,7 +796,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -826,7 +826,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -871,7 +871,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -1014,7 +1014,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1044,7 +1044,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1089,7 +1089,7 @@

Arguments

- + real(kind=rk), intent(inout) @@ -1212,7 +1212,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1400,7 +1400,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1588,7 +1588,7 @@

Arguments

- + real(kind=rk), intent(in) @@ -1723,7 +1723,7 @@

Arguments

Documentation generated by FORD - on 2024-01-30T21:59:26.012531

+ on 2024-01-31T09:42:40.327475


diff --git a/module/formatmul.html b/module/formatmul.html index 82e9e2b..5831c08 100644 --- a/module/formatmul.html +++ b/module/formatmul.html @@ -183,8 +183,8 @@

Uses

  • @@ -651,7 +651,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -666,7 +666,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1002,7 +1002,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1017,7 +1017,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1094,7 +1094,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1109,7 +1109,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1201,7 +1201,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1216,7 +1216,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1440,7 +1440,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1455,7 +1455,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1671,7 +1671,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1686,7 +1686,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1779,7 +1779,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1794,7 +1794,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1887,7 +1887,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1902,7 +1902,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2086,7 +2086,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2101,7 +2101,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2116,7 +2116,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2174,7 +2174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2189,7 +2189,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2204,7 +2204,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2262,7 +2262,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2277,7 +2277,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2292,7 +2292,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2350,7 +2350,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2365,7 +2365,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2380,7 +2380,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2438,7 +2438,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2453,7 +2453,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2468,7 +2468,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2526,7 +2526,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2541,7 +2541,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2556,7 +2556,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2611,7 +2611,7 @@

    Arguments

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/module/formatmul_opts.html b/module/formatmul_opts.html index 5565797..b2dd02e 100644 --- a/module/formatmul_opts.html +++ b/module/formatmul_opts.html @@ -703,7 +703,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -718,7 +718,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -733,7 +733,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -791,7 +791,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -806,7 +806,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -821,7 +821,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -879,7 +879,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -894,7 +894,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -909,7 +909,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -967,7 +967,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -982,7 +982,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -997,7 +997,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1055,7 +1055,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1070,7 +1070,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1085,7 +1085,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1143,7 +1143,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1158,7 +1158,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1173,7 +1173,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1231,7 +1231,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1246,7 +1246,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1261,7 +1261,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1304,7 +1304,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1319,7 +1319,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1334,7 +1334,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1377,7 +1377,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1392,7 +1392,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1407,7 +1407,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1450,7 +1450,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1465,7 +1465,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1480,7 +1480,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1523,7 +1523,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1538,7 +1538,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1553,7 +1553,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1596,7 +1596,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1611,7 +1611,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1626,7 +1626,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1669,7 +1669,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1684,7 +1684,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1699,7 +1699,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1742,7 +1742,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1757,7 +1757,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1772,7 +1772,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1815,7 +1815,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1830,7 +1830,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1845,7 +1845,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1888,7 +1888,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1903,7 +1903,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1918,7 +1918,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -1961,7 +1961,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1976,7 +1976,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -1991,7 +1991,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2034,7 +2034,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2049,7 +2049,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2064,7 +2064,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2107,7 +2107,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2122,7 +2122,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2137,7 +2137,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2180,7 +2180,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2195,7 +2195,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2210,7 +2210,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2253,7 +2253,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2268,7 +2268,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2283,7 +2283,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2326,7 +2326,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2341,7 +2341,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2356,7 +2356,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2399,7 +2399,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2414,7 +2414,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2429,7 +2429,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2472,7 +2472,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2487,7 +2487,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2502,7 +2502,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2545,7 +2545,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2560,7 +2560,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2575,7 +2575,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2618,7 +2618,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2633,7 +2633,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2648,7 +2648,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2691,7 +2691,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2706,7 +2706,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2721,7 +2721,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2764,7 +2764,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2779,7 +2779,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2794,7 +2794,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2837,7 +2837,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2852,7 +2852,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2867,7 +2867,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2910,7 +2910,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2925,7 +2925,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2940,7 +2940,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -2983,7 +2983,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -2998,7 +2998,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3013,7 +3013,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3056,7 +3056,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3071,7 +3071,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3086,7 +3086,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3129,7 +3129,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3144,7 +3144,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3159,7 +3159,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3202,7 +3202,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3217,7 +3217,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3232,7 +3232,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3275,7 +3275,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3290,7 +3290,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3305,7 +3305,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3348,7 +3348,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3363,7 +3363,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3378,7 +3378,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3421,7 +3421,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3436,7 +3436,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3451,7 +3451,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3494,7 +3494,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3509,7 +3509,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3524,7 +3524,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3567,7 +3567,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3582,7 +3582,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3597,7 +3597,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3640,7 +3640,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3655,7 +3655,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3670,7 +3670,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3713,7 +3713,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3728,7 +3728,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3743,7 +3743,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3786,7 +3786,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3801,7 +3801,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3816,7 +3816,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3859,7 +3859,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3874,7 +3874,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3889,7 +3889,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -3932,7 +3932,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3947,7 +3947,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -3962,7 +3962,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4005,7 +4005,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4020,7 +4020,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4035,7 +4035,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4078,7 +4078,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4093,7 +4093,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4108,7 +4108,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4151,7 +4151,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4166,7 +4166,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4181,7 +4181,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4224,7 +4224,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4239,7 +4239,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4254,7 +4254,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4297,7 +4297,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4312,7 +4312,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4327,7 +4327,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4370,7 +4370,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4385,7 +4385,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4400,7 +4400,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4443,7 +4443,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4458,7 +4458,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4473,7 +4473,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4516,7 +4516,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4531,7 +4531,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4546,7 +4546,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4589,7 +4589,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4604,7 +4604,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4619,7 +4619,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4662,7 +4662,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4677,7 +4677,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4692,7 +4692,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4735,7 +4735,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4750,7 +4750,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4765,7 +4765,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4808,7 +4808,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4823,7 +4823,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4838,7 +4838,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4881,7 +4881,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4896,7 +4896,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4911,7 +4911,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -4954,7 +4954,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4969,7 +4969,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -4984,7 +4984,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5027,7 +5027,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5042,7 +5042,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5057,7 +5057,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5100,7 +5100,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5115,7 +5115,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5130,7 +5130,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5173,7 +5173,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5188,7 +5188,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5203,7 +5203,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5246,7 +5246,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5261,7 +5261,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5276,7 +5276,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5319,7 +5319,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5334,7 +5334,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5349,7 +5349,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5392,7 +5392,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5407,7 +5407,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5422,7 +5422,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5465,7 +5465,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5480,7 +5480,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5495,7 +5495,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5538,7 +5538,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5553,7 +5553,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5568,7 +5568,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5611,7 +5611,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5626,7 +5626,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5641,7 +5641,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5684,7 +5684,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5699,7 +5699,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5714,7 +5714,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5757,7 +5757,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5772,7 +5772,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5787,7 +5787,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5830,7 +5830,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5845,7 +5845,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5860,7 +5860,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5903,7 +5903,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5918,7 +5918,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5933,7 +5933,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -5976,7 +5976,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -5991,7 +5991,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -6006,7 +6006,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -6049,7 +6049,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -6064,7 +6064,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -6079,7 +6079,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -6122,7 +6122,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -6137,7 +6137,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -6152,7 +6152,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -6192,7 +6192,7 @@

    Arguments

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/compute_block_ranges.html b/proc/compute_block_ranges.html index ca3971d..86a60ec 100644 --- a/proc/compute_block_ranges.html +++ b/proc/compute_block_ranges.html @@ -485,7 +485,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_ab_12.html b/proc/impure_mm_ab_12.html index 0d17e09..d02e15a 100644 --- a/proc/impure_mm_ab_12.html +++ b/proc/impure_mm_ab_12.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_ab_13.html b/proc/impure_mm_ab_13.html index bae20d0..2bc0d1f 100644 --- a/proc/impure_mm_ab_13.html +++ b/proc/impure_mm_ab_13.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_abt_12.html b/proc/impure_mm_abt_12.html index 70f6826..9a377d7 100644 --- a/proc/impure_mm_abt_12.html +++ b/proc/impure_mm_abt_12.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_abt_13.html b/proc/impure_mm_abt_13.html index 8798cc3..c234c5f 100644 --- a/proc/impure_mm_abt_13.html +++ b/proc/impure_mm_abt_13.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_atb_12.html b/proc/impure_mm_atb_12.html index 2f3509a..b4a5726 100644 --- a/proc/impure_mm_atb_12.html +++ b/proc/impure_mm_atb_12.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_atb_13.html b/proc/impure_mm_atb_13.html index 212d1d8..926e07f 100644 --- a/proc/impure_mm_atb_13.html +++ b/proc/impure_mm_atb_13.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_atbt_12.html b/proc/impure_mm_atbt_12.html index 4815754..4d56b90 100644 --- a/proc/impure_mm_atbt_12.html +++ b/proc/impure_mm_atbt_12.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/impure_mm_atbt_13.html b/proc/impure_mm_atbt_13.html index 426827e..ea9d2ca 100644 --- a/proc/impure_mm_atbt_13.html +++ b/proc/impure_mm_atbt_13.html @@ -360,7 +360,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_block_rel.html b/proc/mat_mat_block_rel.html index bfdf409..88177fe 100644 --- a/proc/mat_mat_block_rel.html +++ b/proc/mat_mat_block_rel.html @@ -269,43 +269,31 @@

    Calls

    - - + + proc~~mat_mat_block_rel~~CallsGraph - + proc~mat_mat_block_rel - -formatmul::mat_mat_block_rel + +formatmul::mat_mat_block_rel proc~compute_block_ranges - -formatmul::compute_block_ranges + +formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges - - - - - -reduce - -reduce - - - -proc~mat_mat_block_rel->reduce - - + + @@ -539,7 +527,7 @@

    Source Code

    allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -558,7 +546,7 @@

    Source Code

    allocate(C(size(A,2), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -577,7 +565,7 @@

    Source Code

    allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -596,7 +584,7 @@

    Source Code

    allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -618,7 +606,7 @@

    Source Code

    allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -637,7 +625,7 @@

    Source Code

    allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -658,7 +646,7 @@

    Source Code

    allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -677,7 +665,7 @@

    Source Code

    allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -698,7 +686,7 @@

    Source Code

    allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -735,7 +723,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_coarray_rel.html b/proc/mat_mat_coarray_rel.html index 0d06dee..0f570c1 100644 --- a/proc/mat_mat_coarray_rel.html +++ b/proc/mat_mat_coarray_rel.html @@ -717,7 +717,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel.html b/proc/mat_mat_rel.html index 7ce0e68..adaec3b 100644 --- a/proc/mat_mat_rel.html +++ b/proc/mat_mat_rel.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -237,7 +237,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:,:)

    @@ -1491,7 +1491,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_ab.html b/proc/mat_mat_rel_ab.html index 6952d80..b485e77 100644 --- a/proc/mat_mat_rel_ab.html +++ b/proc/mat_mat_rel_ab.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -735,7 +735,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_ab_opt.html b/proc/mat_mat_rel_ab_opt.html index 6d00f28..8d2e1f2 100644 --- a/proc/mat_mat_rel_ab_opt.html +++ b/proc/mat_mat_rel_ab_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -763,7 +763,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_abt.html b/proc/mat_mat_rel_abt.html index 426e282..3b4e196 100644 --- a/proc/mat_mat_rel_abt.html +++ b/proc/mat_mat_rel_abt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -735,7 +735,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_abt_opt.html b/proc/mat_mat_rel_abt_opt.html index 8876924..71db1a5 100644 --- a/proc/mat_mat_rel_abt_opt.html +++ b/proc/mat_mat_rel_abt_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -763,7 +763,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_atb.html b/proc/mat_mat_rel_atb.html index 6a8c536..e32d3bc 100644 --- a/proc/mat_mat_rel_atb.html +++ b/proc/mat_mat_rel_atb.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -735,7 +735,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_atb_opt.html b/proc/mat_mat_rel_atb_opt.html index e3ef9a7..b900783 100644 --- a/proc/mat_mat_rel_atb_opt.html +++ b/proc/mat_mat_rel_atb_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -763,7 +763,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_atbt.html b/proc/mat_mat_rel_atbt.html index 535d3bd..193133d 100644 --- a/proc/mat_mat_rel_atbt.html +++ b/proc/mat_mat_rel_atbt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -735,7 +735,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_mat_rel_atbt_opt.html b/proc/mat_mat_rel_atbt_opt.html index f6422ad..437e134 100644 --- a/proc/mat_mat_rel_atbt_opt.html +++ b/proc/mat_mat_rel_atbt_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -763,7 +763,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_block_rel.html b/proc/mat_vec_block_rel.html index d5d605d..5296e6c 100644 --- a/proc/mat_vec_block_rel.html +++ b/proc/mat_vec_block_rel.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -237,7 +237,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -254,43 +254,31 @@

    Calls

    - - + + proc~~mat_vec_block_rel~~CallsGraph - + proc~mat_vec_block_rel - -formatmul::mat_vec_block_rel + +formatmul::mat_vec_block_rel proc~compute_block_ranges - -formatmul::compute_block_ranges + +formatmul::compute_block_ranges proc~mat_vec_block_rel->proc~compute_block_ranges - - - - - -reduce - -reduce - - - -proc~mat_vec_block_rel->reduce - - + + @@ -525,7 +513,7 @@

    Source Code

    allocate(w(size(A,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(se:ee) = & @@ -544,7 +532,7 @@

    Source Code

    allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & @@ -564,7 +552,7 @@

    Source Code

    allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & @@ -601,7 +589,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_coarray_rel.html b/proc/mat_vec_coarray_rel.html index b72f4ec..0292a05 100644 --- a/proc/mat_vec_coarray_rel.html +++ b/proc/mat_vec_coarray_rel.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -237,7 +237,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -584,7 +584,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_rel.html b/proc/mat_vec_rel.html index d575b87..92f0344 100644 --- a/proc/mat_vec_rel.html +++ b/proc/mat_vec_rel.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -222,7 +222,7 @@

    Arguments

    Return Value - + real(kind=rk), allocatable, (:)

    @@ -835,7 +835,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_rel_atv.html b/proc/mat_vec_rel_atv.html index 0090b12..4b5256e 100644 --- a/proc/mat_vec_rel_atv.html +++ b/proc/mat_vec_rel_atv.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -660,7 +660,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_rel_atv_opt.html b/proc/mat_vec_rel_atv_opt.html index 04075b2..872cb2c 100644 --- a/proc/mat_vec_rel_atv_opt.html +++ b/proc/mat_vec_rel_atv_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -678,7 +678,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_rel_av.html b/proc/mat_vec_rel_av.html index a6df880..a400fdd 100644 --- a/proc/mat_vec_rel_av.html +++ b/proc/mat_vec_rel_av.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -660,7 +660,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mat_vec_rel_av_opt.html b/proc/mat_vec_rel_av_opt.html index 82486a1..e690836 100644 --- a/proc/mat_vec_rel_av_opt.html +++ b/proc/mat_vec_rel_av_opt.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -674,7 +674,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_1.html b/proc/mm_ab_1.html index 3f9c604..fe5fbca 100644 --- a/proc/mm_ab_1.html +++ b/proc/mm_ab_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_10.html b/proc/mm_ab_10.html index 7376319..2002b9a 100644 --- a/proc/mm_ab_10.html +++ b/proc/mm_ab_10.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_11.html b/proc/mm_ab_11.html index 4561799..825bfdc 100644 --- a/proc/mm_ab_11.html +++ b/proc/mm_ab_11.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -430,7 +430,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_12.html b/proc/mm_ab_12.html index 9817b1d..d8bebdc 100644 --- a/proc/mm_ab_12.html +++ b/proc/mm_ab_12.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_13.html b/proc/mm_ab_13.html index 1df52e2..9a2a7b0 100644 --- a/proc/mm_ab_13.html +++ b/proc/mm_ab_13.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_2.html b/proc/mm_ab_2.html index 9acdf39..040e030 100644 --- a/proc/mm_ab_2.html +++ b/proc/mm_ab_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -674,7 +674,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_3.html b/proc/mm_ab_3.html index 9f7e724..df6834e 100644 --- a/proc/mm_ab_3.html +++ b/proc/mm_ab_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_4.html b/proc/mm_ab_4.html index 1ba3de6..eec6da7 100644 --- a/proc/mm_ab_4.html +++ b/proc/mm_ab_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_5.html b/proc/mm_ab_5.html index ce607b1..0d0c78f 100644 --- a/proc/mm_ab_5.html +++ b/proc/mm_ab_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_6.html b/proc/mm_ab_6.html index 2e38dbf..ec965dd 100644 --- a/proc/mm_ab_6.html +++ b/proc/mm_ab_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_7.html b/proc/mm_ab_7.html index 187a2ca..286b22e 100644 --- a/proc/mm_ab_7.html +++ b/proc/mm_ab_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_8.html b/proc/mm_ab_8.html index f0c8d8e..c34c158 100644 --- a/proc/mm_ab_8.html +++ b/proc/mm_ab_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_ab_9.html b/proc/mm_ab_9.html index a4a26dc..abebc96 100644 --- a/proc/mm_ab_9.html +++ b/proc/mm_ab_9.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_1.html b/proc/mm_abt_1.html index d31c43d..83ed77a 100644 --- a/proc/mm_abt_1.html +++ b/proc/mm_abt_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_10.html b/proc/mm_abt_10.html index 0083fef..b984e87 100644 --- a/proc/mm_abt_10.html +++ b/proc/mm_abt_10.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_11.html b/proc/mm_abt_11.html index fae5377..245fa28 100644 --- a/proc/mm_abt_11.html +++ b/proc/mm_abt_11.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -430,7 +430,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_12.html b/proc/mm_abt_12.html index 1298a5a..6413f63 100644 --- a/proc/mm_abt_12.html +++ b/proc/mm_abt_12.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_13.html b/proc/mm_abt_13.html index 8f7e8fb..1671396 100644 --- a/proc/mm_abt_13.html +++ b/proc/mm_abt_13.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_2.html b/proc/mm_abt_2.html index b240cf6..73bd4f7 100644 --- a/proc/mm_abt_2.html +++ b/proc/mm_abt_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -674,7 +674,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_3.html b/proc/mm_abt_3.html index 7a30d24..829ad6c 100644 --- a/proc/mm_abt_3.html +++ b/proc/mm_abt_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_4.html b/proc/mm_abt_4.html index a395b28..c9b0f12 100644 --- a/proc/mm_abt_4.html +++ b/proc/mm_abt_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_5.html b/proc/mm_abt_5.html index c2549b8..fcbac5c 100644 --- a/proc/mm_abt_5.html +++ b/proc/mm_abt_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_6.html b/proc/mm_abt_6.html index 9189c48..e45746a 100644 --- a/proc/mm_abt_6.html +++ b/proc/mm_abt_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_7.html b/proc/mm_abt_7.html index 8da4d19..02e4315 100644 --- a/proc/mm_abt_7.html +++ b/proc/mm_abt_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_8.html b/proc/mm_abt_8.html index 2b7d5f0..35b1698 100644 --- a/proc/mm_abt_8.html +++ b/proc/mm_abt_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_abt_9.html b/proc/mm_abt_9.html index 0083c5c..65e965b 100644 --- a/proc/mm_abt_9.html +++ b/proc/mm_abt_9.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_1.html b/proc/mm_atb_1.html index ea787da..9c3b55c 100644 --- a/proc/mm_atb_1.html +++ b/proc/mm_atb_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_10.html b/proc/mm_atb_10.html index dcb0bdd..29f0fc2 100644 --- a/proc/mm_atb_10.html +++ b/proc/mm_atb_10.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_11.html b/proc/mm_atb_11.html index 60797a5..0e94ded 100644 --- a/proc/mm_atb_11.html +++ b/proc/mm_atb_11.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -430,7 +430,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_12.html b/proc/mm_atb_12.html index ed3632c..ada7f73 100644 --- a/proc/mm_atb_12.html +++ b/proc/mm_atb_12.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_13.html b/proc/mm_atb_13.html index 1337d98..caa10bd 100644 --- a/proc/mm_atb_13.html +++ b/proc/mm_atb_13.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_2.html b/proc/mm_atb_2.html index 4041d83..573456c 100644 --- a/proc/mm_atb_2.html +++ b/proc/mm_atb_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -674,7 +674,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_3.html b/proc/mm_atb_3.html index d545d3e..0bb3b4d 100644 --- a/proc/mm_atb_3.html +++ b/proc/mm_atb_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_4.html b/proc/mm_atb_4.html index c9f3c74..35bf0ba 100644 --- a/proc/mm_atb_4.html +++ b/proc/mm_atb_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_5.html b/proc/mm_atb_5.html index 89fd76d..b415601 100644 --- a/proc/mm_atb_5.html +++ b/proc/mm_atb_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_6.html b/proc/mm_atb_6.html index cbc6d6b..a69cc26 100644 --- a/proc/mm_atb_6.html +++ b/proc/mm_atb_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_7.html b/proc/mm_atb_7.html index 1881823..be8863c 100644 --- a/proc/mm_atb_7.html +++ b/proc/mm_atb_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_8.html b/proc/mm_atb_8.html index fb2ae42..8278c7f 100644 --- a/proc/mm_atb_8.html +++ b/proc/mm_atb_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atb_9.html b/proc/mm_atb_9.html index 657ff86..4b369f3 100644 --- a/proc/mm_atb_9.html +++ b/proc/mm_atb_9.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_1.html b/proc/mm_atbt_1.html index 1a0e5c6..1d9f963 100644 --- a/proc/mm_atbt_1.html +++ b/proc/mm_atbt_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_10.html b/proc/mm_atbt_10.html index bfa0cf6..f0968ad 100644 --- a/proc/mm_atbt_10.html +++ b/proc/mm_atbt_10.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_11.html b/proc/mm_atbt_11.html index 5f0a480..fbe4e77 100644 --- a/proc/mm_atbt_11.html +++ b/proc/mm_atbt_11.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -431,7 +431,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_12.html b/proc/mm_atbt_12.html index 3717867..c71e6d0 100644 --- a/proc/mm_atbt_12.html +++ b/proc/mm_atbt_12.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_13.html b/proc/mm_atbt_13.html index c681f76..cec73c1 100644 --- a/proc/mm_atbt_13.html +++ b/proc/mm_atbt_13.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_2.html b/proc/mm_atbt_2.html index 3776550..63cc1fe 100644 --- a/proc/mm_atbt_2.html +++ b/proc/mm_atbt_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -675,7 +675,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_3.html b/proc/mm_atbt_3.html index 2b4cc0a..51c079b 100644 --- a/proc/mm_atbt_3.html +++ b/proc/mm_atbt_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_4.html b/proc/mm_atbt_4.html index de6148d..efe1818 100644 --- a/proc/mm_atbt_4.html +++ b/proc/mm_atbt_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_5.html b/proc/mm_atbt_5.html index 28b6508..cf4c6fe 100644 --- a/proc/mm_atbt_5.html +++ b/proc/mm_atbt_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_6.html b/proc/mm_atbt_6.html index d74f637..fb1be6a 100644 --- a/proc/mm_atbt_6.html +++ b/proc/mm_atbt_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_7.html b/proc/mm_atbt_7.html index 9f36c7e..87c3b27 100644 --- a/proc/mm_atbt_7.html +++ b/proc/mm_atbt_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_8.html b/proc/mm_atbt_8.html index 30d18ea..c53e5da 100644 --- a/proc/mm_atbt_8.html +++ b/proc/mm_atbt_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -428,7 +428,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mm_atbt_9.html b/proc/mm_atbt_9.html index 4f0e5bc..620565a 100644 --- a/proc/mm_atbt_9.html +++ b/proc/mm_atbt_9.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_1.html b/proc/mv_atv_1.html index 403e5c0..e925e4a 100644 --- a/proc/mv_atv_1.html +++ b/proc/mv_atv_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_2.html b/proc/mv_atv_2.html index 47cd1bc..3318e68 100644 --- a/proc/mv_atv_2.html +++ b/proc/mv_atv_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -674,7 +674,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_3.html b/proc/mv_atv_3.html index ec6e78d..003cdd1 100644 --- a/proc/mv_atv_3.html +++ b/proc/mv_atv_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_4.html b/proc/mv_atv_4.html index 8137877..40f7cb4 100644 --- a/proc/mv_atv_4.html +++ b/proc/mv_atv_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_5.html b/proc/mv_atv_5.html index 37e230e..bc0761b 100644 --- a/proc/mv_atv_5.html +++ b/proc/mv_atv_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -422,7 +422,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_6.html b/proc/mv_atv_6.html index b2bbab2..f976f22 100644 --- a/proc/mv_atv_6.html +++ b/proc/mv_atv_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -422,7 +422,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_7.html b/proc/mv_atv_7.html index 2a64cce..0bd5530 100644 --- a/proc/mv_atv_7.html +++ b/proc/mv_atv_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_atv_8.html b/proc/mv_atv_8.html index 87efef2..a605820 100644 --- a/proc/mv_atv_8.html +++ b/proc/mv_atv_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_1.html b/proc/mv_av_1.html index 90bb6a5..f1d443d 100644 --- a/proc/mv_av_1.html +++ b/proc/mv_av_1.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -416,7 +416,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_2.html b/proc/mv_av_2.html index f656c9d..52ffbde 100644 --- a/proc/mv_av_2.html +++ b/proc/mv_av_2.html @@ -291,7 +291,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -306,7 +306,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -321,7 +321,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -673,7 +673,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_3.html b/proc/mv_av_3.html index 550d87a..52f40d1 100644 --- a/proc/mv_av_3.html +++ b/proc/mv_av_3.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_4.html b/proc/mv_av_4.html index b1ee211..06cfe88 100644 --- a/proc/mv_av_4.html +++ b/proc/mv_av_4.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -425,7 +425,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_5.html b/proc/mv_av_5.html index 6a7110a..226016e 100644 --- a/proc/mv_av_5.html +++ b/proc/mv_av_5.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -422,7 +422,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_6.html b/proc/mv_av_6.html index 65686bd..739e63e 100644 --- a/proc/mv_av_6.html +++ b/proc/mv_av_6.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -422,7 +422,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_7.html b/proc/mv_av_7.html index 9255490..a98a7cb 100644 --- a/proc/mv_av_7.html +++ b/proc/mv_av_7.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -424,7 +424,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/proc/mv_av_8.html b/proc/mv_av_8.html index f087d45..1c4e74c 100644 --- a/proc/mv_av_8.html +++ b/proc/mv_av_8.html @@ -159,7 +159,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -174,7 +174,7 @@

    Arguments

    - + real(kind=rk), intent(in), @@ -189,7 +189,7 @@

    Arguments

    - + real(kind=rk), intent(inout), @@ -427,7 +427,7 @@

    Source Code

    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

    + on 2024-01-31T09:42:40.327475


    diff --git a/program/test_matmul10.html b/program/test_matmul10.html index c0c66a5..917391a 100644 --- a/program/test_matmul10.html +++ b/program/test_matmul10.html @@ -112,15 +112,15 @@

    Variables

    - A - B - C_ref - C - m - n - o - im - ut + A + B + C_ref + C + m + n + o + im + ut
    @@ -162,9 +162,9 @@

    Uses

    • @@ -465,7 +465,7 @@

      Variables

      - + real(kind=rk), @@ -481,7 +481,7 @@

      Variables

      - + real(kind=rk), @@ -497,7 +497,7 @@

      Variables

      - + real(kind=rk), @@ -513,7 +513,7 @@

      Variables

      - + real(kind=rk), @@ -529,7 +529,7 @@

      Variables

      - + integer @@ -545,7 +545,7 @@

      Variables

      - + integer @@ -561,7 +561,7 @@

      Variables

      - + integer @@ -577,7 +577,7 @@

      Variables

      - + integer @@ -593,7 +593,7 @@

      Variables

      - + type(unit_test) @@ -717,7 +717,7 @@

      Source Code

      Documentation generated by FORD - on 2024-01-30T21:59:26.012531

      + on 2024-01-31T09:42:40.327475


      diff --git a/program/test_matmul11.html b/program/test_matmul11.html index 6d9b0b9..225934b 100644 --- a/program/test_matmul11.html +++ b/program/test_matmul11.html @@ -112,15 +112,15 @@

      Variables

      - A - B - C_ref - C - m - n - o - im - ut + A + B + C_ref + C + m + n + o + im + ut
      @@ -162,9 +162,9 @@

      Uses

      • @@ -465,7 +465,7 @@

        Variables

        - + real(kind=rk), @@ -481,7 +481,7 @@

        Variables

        - + real(kind=rk), @@ -497,7 +497,7 @@

        Variables

        - + real(kind=rk), @@ -513,7 +513,7 @@

        Variables

        - + real(kind=rk), @@ -529,7 +529,7 @@

        Variables

        - + integer @@ -545,7 +545,7 @@

        Variables

        - + integer @@ -561,7 +561,7 @@

        Variables

        - + integer @@ -577,7 +577,7 @@

        Variables

        - + integer @@ -593,7 +593,7 @@

        Variables

        - + type(unit_test) @@ -717,7 +717,7 @@

        Source Code

        Documentation generated by FORD - on 2024-01-30T21:59:26.012531

        + on 2024-01-31T09:42:40.327475


        diff --git a/program/test_matmul12.html b/program/test_matmul12.html index 1640d20..7b2c8b9 100644 --- a/program/test_matmul12.html +++ b/program/test_matmul12.html @@ -112,15 +112,15 @@

        Variables

        - A - B - C_ref - C - m - n - o - im - ut + A + B + C_ref + C + m + n + o + im + ut
        @@ -162,9 +162,9 @@

        Uses

        • @@ -465,7 +465,7 @@

          Variables

          - + real(kind=rk), @@ -481,7 +481,7 @@

          Variables

          - + real(kind=rk), @@ -497,7 +497,7 @@

          Variables

          - + real(kind=rk), @@ -513,7 +513,7 @@

          Variables

          - + real(kind=rk), @@ -529,7 +529,7 @@

          Variables

          - + integer @@ -545,7 +545,7 @@

          Variables

          - + integer @@ -561,7 +561,7 @@

          Variables

          - + integer @@ -577,7 +577,7 @@

          Variables

          - + integer @@ -593,7 +593,7 @@

          Variables

          - + type(unit_test) @@ -717,7 +717,7 @@

          Source Code

          Documentation generated by FORD - on 2024-01-30T21:59:26.012531

          + on 2024-01-31T09:42:40.327475


          diff --git a/program/test_matmul13.html b/program/test_matmul13.html index a4bfe47..08258e0 100644 --- a/program/test_matmul13.html +++ b/program/test_matmul13.html @@ -112,15 +112,15 @@

          Variables

          - A - B - C_ref - C - m - n - o - im - ut + A + B + C_ref + C + m + n + o + im + ut
          @@ -162,9 +162,9 @@

          Uses

          • @@ -465,7 +465,7 @@

            Variables

            - + real(kind=rk), @@ -481,7 +481,7 @@

            Variables

            - + real(kind=rk), @@ -497,7 +497,7 @@

            Variables

            - + real(kind=rk), @@ -513,7 +513,7 @@

            Variables

            - + real(kind=rk), @@ -529,7 +529,7 @@

            Variables

            - + integer @@ -545,7 +545,7 @@

            Variables

            - + integer @@ -561,7 +561,7 @@

            Variables

            - + integer @@ -577,7 +577,7 @@

            Variables

            - + integer @@ -593,7 +593,7 @@

            Variables

            - + type(unit_test) @@ -717,7 +717,7 @@

            Source Code

            Documentation generated by FORD - on 2024-01-30T21:59:26.012531

            + on 2024-01-31T09:42:40.327475


            diff --git a/program/test_matmul14.html b/program/test_matmul14.html index 7811be5..48f463a 100644 --- a/program/test_matmul14.html +++ b/program/test_matmul14.html @@ -112,14 +112,14 @@

            Variables

            - A - v - w_ref - w - m - n + A + v + w_ref + w + m + n im - ut + ut
            @@ -161,9 +161,9 @@

            Uses

            • @@ -464,7 +464,7 @@

              Variables

              - + real(kind=rk), @@ -480,7 +480,7 @@

              Variables

              - + real(kind=rk), @@ -496,7 +496,7 @@

              Variables

              - + real(kind=rk), @@ -512,7 +512,7 @@

              Variables

              - + real(kind=rk), @@ -528,7 +528,7 @@

              Variables

              - + integer @@ -544,7 +544,7 @@

              Variables

              - + integer @@ -576,7 +576,7 @@

              Variables

              - + type(unit_test) @@ -685,7 +685,7 @@

              Source Code

              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

              + on 2024-01-31T09:42:40.327475


              diff --git a/program/test_matmul15.html b/program/test_matmul15.html index 0ac6db7..168fe40 100644 --- a/program/test_matmul15.html +++ b/program/test_matmul15.html @@ -112,14 +112,14 @@

              Variables

              - A - v - w_ref - w - m - n - im - ut + A + v + w_ref + w + m + n + im + ut
              @@ -161,9 +161,9 @@

              Uses

              • @@ -464,7 +464,7 @@

                Variables

                - + real(kind=rk), @@ -480,7 +480,7 @@

                Variables

                - + real(kind=rk), @@ -496,7 +496,7 @@

                Variables

                - + real(kind=rk), @@ -512,7 +512,7 @@

                Variables

                - + real(kind=rk), @@ -528,7 +528,7 @@

                Variables

                - + integer @@ -544,7 +544,7 @@

                Variables

                - + integer @@ -560,7 +560,7 @@

                Variables

                - + integer @@ -576,7 +576,7 @@

                Variables

                - + type(unit_test) @@ -685,7 +685,7 @@

                Source Code

                Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                + on 2024-01-31T09:42:40.327475


                diff --git a/program/test_matmul3.html b/program/test_matmul3.html index deb1559..2ff13bb 100644 --- a/program/test_matmul3.html +++ b/program/test_matmul3.html @@ -112,14 +112,14 @@

                Variables

                - A - B - C_ref - C - m - n - o - ut + A + B + C_ref + C + m + n + o + ut
                @@ -161,9 +161,9 @@

                Uses

                • @@ -464,7 +464,7 @@

                  Variables

                  - + real(kind=rk), @@ -480,7 +480,7 @@

                  Variables

                  - + real(kind=rk), @@ -496,7 +496,7 @@

                  Variables

                  - + real(kind=rk), @@ -512,7 +512,7 @@

                  Variables

                  - + real(kind=rk), @@ -528,7 +528,7 @@

                  Variables

                  - + integer @@ -544,7 +544,7 @@

                  Variables

                  - + integer @@ -560,7 +560,7 @@

                  Variables

                  - + integer @@ -576,7 +576,7 @@

                  Variables

                  - + type(unit_test) @@ -737,7 +737,7 @@

                  Source Code

                  Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                  + on 2024-01-31T09:42:40.327475


                  diff --git a/program/test_matmul4.html b/program/test_matmul4.html index 6452982..09f25cc 100644 --- a/program/test_matmul4.html +++ b/program/test_matmul4.html @@ -112,14 +112,14 @@

                  Variables

                  - A - B - C_ref - C - m - n - o - ut + A + B + C_ref + C + m + n + o + ut
                  @@ -161,9 +161,9 @@

                  Uses

                  • @@ -464,7 +464,7 @@

                    Variables

                    - + real(kind=rk), @@ -480,7 +480,7 @@

                    Variables

                    - + real(kind=rk), @@ -496,7 +496,7 @@

                    Variables

                    - + real(kind=rk), @@ -512,7 +512,7 @@

                    Variables

                    - + real(kind=rk), @@ -528,7 +528,7 @@

                    Variables

                    - + integer @@ -544,7 +544,7 @@

                    Variables

                    - + integer @@ -560,7 +560,7 @@

                    Variables

                    - + integer @@ -576,7 +576,7 @@

                    Variables

                    - + type(unit_test) @@ -740,7 +740,7 @@

                    Source Code

                    Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                    + on 2024-01-31T09:42:40.327475


                    diff --git a/program/test_matmul5.html b/program/test_matmul5.html index f6c5b05..c166a6b 100644 --- a/program/test_matmul5.html +++ b/program/test_matmul5.html @@ -112,14 +112,14 @@

                    Variables

                    - A - B - C_ref - C - m - n - o - ut + A + B + C_ref + C + m + n + o + ut
                    @@ -161,9 +161,9 @@

                    Uses

                    • @@ -464,7 +464,7 @@

                      Variables

                      - + real(kind=rk), @@ -480,7 +480,7 @@

                      Variables

                      - + real(kind=rk), @@ -496,7 +496,7 @@

                      Variables

                      - + real(kind=rk), @@ -512,7 +512,7 @@

                      Variables

                      - + real(kind=rk), @@ -528,7 +528,7 @@

                      Variables

                      - + integer @@ -544,7 +544,7 @@

                      Variables

                      - + integer @@ -560,7 +560,7 @@

                      Variables

                      - + integer @@ -576,7 +576,7 @@

                      Variables

                      - + type(unit_test) @@ -739,7 +739,7 @@

                      Source Code

                      Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                      + on 2024-01-31T09:42:40.327475


                      diff --git a/program/test_matmul6.html b/program/test_matmul6.html index 6398d10..33ff56d 100644 --- a/program/test_matmul6.html +++ b/program/test_matmul6.html @@ -112,14 +112,14 @@

                      Variables

                      - A - B - C_ref - C - m - n - o - ut + A + B + C_ref + C + m + n + o + ut
                      @@ -161,9 +161,9 @@

                      Uses

                      • @@ -464,7 +464,7 @@

                        Variables

                        - + real(kind=rk), @@ -480,7 +480,7 @@

                        Variables

                        - + real(kind=rk), @@ -496,7 +496,7 @@

                        Variables

                        - + real(kind=rk), @@ -512,7 +512,7 @@

                        Variables

                        - + real(kind=rk), @@ -528,7 +528,7 @@

                        Variables

                        - + integer @@ -544,7 +544,7 @@

                        Variables

                        - + integer @@ -560,7 +560,7 @@

                        Variables

                        - + integer @@ -576,7 +576,7 @@

                        Variables

                        - + type(unit_test) @@ -739,7 +739,7 @@

                        Source Code

                        Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                        + on 2024-01-31T09:42:40.327475


                        diff --git a/program/test_matmul7.html b/program/test_matmul7.html index 0872ead..9c2006d 100644 --- a/program/test_matmul7.html +++ b/program/test_matmul7.html @@ -112,13 +112,13 @@

                        Variables

                        - A - v - w_ref - w - m - n - ut + A + v + w_ref + w + m + n + ut
                        @@ -160,9 +160,9 @@

                        Uses

                        • @@ -463,7 +463,7 @@

                          Variables

                          - + real(kind=rk), @@ -479,7 +479,7 @@

                          Variables

                          - + real(kind=rk), @@ -495,7 +495,7 @@

                          Variables

                          - + real(kind=rk), @@ -511,7 +511,7 @@

                          Variables

                          - + real(kind=rk), @@ -527,7 +527,7 @@

                          Variables

                          - + integer @@ -543,7 +543,7 @@

                          Variables

                          - + integer @@ -559,7 +559,7 @@

                          Variables

                          - + type(unit_test) @@ -692,7 +692,7 @@

                          Source Code

                          Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                          + on 2024-01-31T09:42:40.327475


                          diff --git a/program/test_matmul8.html b/program/test_matmul8.html index 06ee4a5..54a9c2a 100644 --- a/program/test_matmul8.html +++ b/program/test_matmul8.html @@ -112,13 +112,13 @@

                          Variables

                          - A - v - w_ref - w - m - n - ut + A + v + w_ref + w + m + n + ut
                          @@ -160,9 +160,9 @@

                          Uses

                          • @@ -463,7 +463,7 @@

                            Variables

                            - + real(kind=rk), @@ -479,7 +479,7 @@

                            Variables

                            - + real(kind=rk), @@ -495,7 +495,7 @@

                            Variables

                            - + real(kind=rk), @@ -511,7 +511,7 @@

                            Variables

                            - + real(kind=rk), @@ -527,7 +527,7 @@

                            Variables

                            - + integer @@ -543,7 +543,7 @@

                            Variables

                            - + integer @@ -559,7 +559,7 @@

                            Variables

                            - + type(unit_test) @@ -692,7 +692,7 @@

                            Source Code

                            Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                            + on 2024-01-31T09:42:40.327475


                            diff --git a/program/test_matmul9.html b/program/test_matmul9.html index 6db8d75..a929bff 100644 --- a/program/test_matmul9.html +++ b/program/test_matmul9.html @@ -112,12 +112,12 @@

                            Variables

                            - A - v - w_ref - w - m - n + A + v + w_ref + w + m + n ut
                            @@ -160,9 +160,9 @@

                            Uses

                            • @@ -463,7 +463,7 @@

                              Variables

                              - + real(kind=rk), @@ -479,7 +479,7 @@

                              Variables

                              - + real(kind=rk), @@ -495,7 +495,7 @@

                              Variables

                              - + real(kind=rk), @@ -511,7 +511,7 @@

                              Variables

                              - + real(kind=rk), @@ -527,7 +527,7 @@

                              Variables

                              - + integer @@ -543,7 +543,7 @@

                              Variables

                              - + integer @@ -692,7 +692,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/search.html b/search.html index 261a881..c73a8fe 100644 --- a/search.html +++ b/search.html @@ -95,7 +95,7 @@

                              Search Results

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/external_interfaces.f90.html b/sourcefile/external_interfaces.f90.html index d78e859..6049eaa 100644 --- a/sourcefile/external_interfaces.f90.html +++ b/sourcefile/external_interfaces.f90.html @@ -579,7 +579,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/formatmul.f90.html b/sourcefile/formatmul.f90.html index 73f9f11..cbfa922 100644 --- a/sourcefile/formatmul.f90.html +++ b/sourcefile/formatmul.f90.html @@ -850,7 +850,7 @@

                              Source Code

                              allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -869,7 +869,7 @@

                              Source Code

                              allocate(C(size(A,2), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -888,7 +888,7 @@

                              Source Code

                              allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -907,7 +907,7 @@

                              Source Code

                              allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -929,7 +929,7 @@

                              Source Code

                              allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -948,7 +948,7 @@

                              Source Code

                              allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -969,7 +969,7 @@

                              Source Code

                              allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -988,7 +988,7 @@

                              Source Code

                              allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -1009,7 +1009,7 @@

                              Source Code

                              allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -1047,7 +1047,7 @@

                              Source Code

                              allocate(w(size(A,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(se:ee) = & @@ -1066,7 +1066,7 @@

                              Source Code

                              allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & @@ -1086,7 +1086,7 @@

                              Source Code

                              allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & @@ -1426,7 +1426,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/formatmul_opts.f90.html b/sourcefile/formatmul_opts.f90.html index 3a3cbd4..253c506 100644 --- a/sourcefile/formatmul_opts.f90.html +++ b/sourcefile/formatmul_opts.f90.html @@ -2451,7 +2451,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test1.f90.html b/sourcefile/test1.f90.html index f104189..38af3fd 100644 --- a/sourcefile/test1.f90.html +++ b/sourcefile/test1.f90.html @@ -400,7 +400,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test10.f90.html b/sourcefile/test10.f90.html index 983353b..068360c 100644 --- a/sourcefile/test10.f90.html +++ b/sourcefile/test10.f90.html @@ -363,7 +363,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test11.f90.html b/sourcefile/test11.f90.html index a422163..5c2e039 100644 --- a/sourcefile/test11.f90.html +++ b/sourcefile/test11.f90.html @@ -363,7 +363,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test12.f90.html b/sourcefile/test12.f90.html index 47cbf70..6b1c5e3 100644 --- a/sourcefile/test12.f90.html +++ b/sourcefile/test12.f90.html @@ -348,7 +348,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test13.f90.html b/sourcefile/test13.f90.html index b0831e8..1c608f6 100644 --- a/sourcefile/test13.f90.html +++ b/sourcefile/test13.f90.html @@ -348,7 +348,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test2.f90.html b/sourcefile/test2.f90.html index d83a55c..3d2189b 100644 --- a/sourcefile/test2.f90.html +++ b/sourcefile/test2.f90.html @@ -403,7 +403,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test3.f90.html b/sourcefile/test3.f90.html index 34b1378..9a6fa4b 100644 --- a/sourcefile/test3.f90.html +++ b/sourcefile/test3.f90.html @@ -402,7 +402,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test4.f90.html b/sourcefile/test4.f90.html index c2ccbe9..1809e32 100644 --- a/sourcefile/test4.f90.html +++ b/sourcefile/test4.f90.html @@ -402,7 +402,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test5.f90.html b/sourcefile/test5.f90.html index 0bb971d..51309bf 100644 --- a/sourcefile/test5.f90.html +++ b/sourcefile/test5.f90.html @@ -372,7 +372,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test6.f90.html b/sourcefile/test6.f90.html index a4f3f0c..29573df 100644 --- a/sourcefile/test6.f90.html +++ b/sourcefile/test6.f90.html @@ -372,7 +372,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test7.f90.html b/sourcefile/test7.f90.html index f768a0b..20426ad 100644 --- a/sourcefile/test7.f90.html +++ b/sourcefile/test7.f90.html @@ -372,7 +372,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test8.f90.html b/sourcefile/test8.f90.html index 141e8f3..79fbbf1 100644 --- a/sourcefile/test8.f90.html +++ b/sourcefile/test8.f90.html @@ -363,7 +363,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/sourcefile/test9.f90.html b/sourcefile/test9.f90.html index 1b58596..aa15339 100644 --- a/sourcefile/test9.f90.html +++ b/sourcefile/test9.f90.html @@ -363,7 +363,7 @@

                              Source Code

                              Documentation generated by FORD - on 2024-01-30T21:59:26.012531

                              + on 2024-01-31T09:42:40.327475


                              diff --git a/src/formatmul.f90 b/src/formatmul.f90 index 1f8d949..2093d38 100644 --- a/src/formatmul.f90 +++ b/src/formatmul.f90 @@ -324,7 +324,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -343,7 +343,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,2), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -362,7 +362,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -381,7 +381,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -403,7 +403,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -422,7 +422,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -443,7 +443,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,1), size(B,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, :) = C(:, :) + & @@ -462,7 +462,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,2), size(B,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(se:ee, :) = & @@ -483,7 +483,7 @@ pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) allocate(C(size(A,1), size(B,2)), source=0.0_rk) call compute_block_ranges(size(B,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:C) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) C(:, se:ee) = & @@ -521,7 +521,7 @@ pure function mat_vec_block_rel(A, v, transA, option, nblock) result(w) allocate(w(size(A,2)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(se:ee) = & @@ -540,7 +540,7 @@ pure function mat_vec_block_rel(A, v, transA, option, nblock) result(w) allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & @@ -560,7 +560,7 @@ pure function mat_vec_block_rel(A, v, transA, option, nblock) result(w) allocate(w(size(A,1)), source=0.0_rk) call compute_block_ranges(size(A,2), nblock, block_size, start_elem, end_elem) #if defined(USE_DO_CONCURRENT) - do concurrent (ib = 1: nblock) reduce(+:w) + do concurrent (ib = 1: nblock) se = start_elem(ib) ee = end_elem(ib) w(:) = & diff --git a/tipuesearch/tipuesearch_content.js b/tipuesearch/tipuesearch_content.js index 054f200..e53c7f4 100644 --- a/tipuesearch/tipuesearch_content.js +++ b/tipuesearch/tipuesearch_content.js @@ -1 +1 @@ -var tipuesearch = {"pages":[{"title":" ForMatmul ","text":"ForMatmul ForMatmul : A Fortran library that overloads the matmul function to enable efficient matrix multiplication with/without coarray. Usage use formatmul c = matmul ( a , b , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) fpm dependency If you want to use ForMatmul as a dependency in your own fpm project,\nyou can easily include it by adding the following line to your fpm.toml file: [dependencies] formatmul = { git = \"https://github.com/gha3mi/formatmul.git\" } How to run tests Clone the repository: You can clone the ForMatmul repository from GitHub using the following command: git clone https://github.com/gha3mi/formatmul.git cd formatmul Tested with Intel compiler: ifort (IFORT) 2021.10.0 20230609 fpm @ifort-test fpm @ifort-test-coarray Tested with Intel compiler: ifx (IFX) 2023.2.0 20230622 fpm @ifx-test fpm @ifx-test-coarray Tested with NVIDIA compiler: nvfortran 23.11-0 64-bit target on x86-64 Linux fpm @nvfortran-test Benchmarks You can find benchmark results on ForBenchmark . API documentation The most up-to-date API documentation for the master branch is available here .\nTo generate the API documentation for ForMatmul using ford run the following\ncommand: ford ford.yml Contributing Contributions to ForMatmul are welcome!\nIf you find any issues or would like to suggest improvements, please open an issue. Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"impure_mm_AB_12 – ForMatmul","text":"impure subroutine impure_mm_AB_12(a, b, c) Uses kinds proc~~impure_mm_ab_12~~UsesGraph proc~impure_mm_ab_12 formatmul_opts.f90::impure_mm_AB_12 kinds kinds proc~impure_mm_ab_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12","tags":"","loc":"proc/impure_mm_ab_12.html"},{"title":"impure_mm_AB_13 – ForMatmul","text":"impure subroutine impure_mm_AB_13(a, b, c) Uses kinds proc~~impure_mm_ab_13~~UsesGraph proc~impure_mm_ab_13 formatmul_opts.f90::impure_mm_AB_13 kinds kinds proc~impure_mm_ab_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13","tags":"","loc":"proc/impure_mm_ab_13.html"},{"title":"impure_mm_ATB_12 – ForMatmul","text":"impure subroutine impure_mm_ATB_12(a, b, c) Uses kinds proc~~impure_mm_atb_12~~UsesGraph proc~impure_mm_atb_12 formatmul_opts.f90::impure_mm_ATB_12 kinds kinds proc~impure_mm_atb_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12","tags":"","loc":"proc/impure_mm_atb_12.html"},{"title":"impure_mm_ATB_13 – ForMatmul","text":"impure subroutine impure_mm_ATB_13(a, b, c) Uses kinds proc~~impure_mm_atb_13~~UsesGraph proc~impure_mm_atb_13 formatmul_opts.f90::impure_mm_ATB_13 kinds kinds proc~impure_mm_atb_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13","tags":"","loc":"proc/impure_mm_atb_13.html"},{"title":"impure_mm_ABT_12 – ForMatmul","text":"impure subroutine impure_mm_ABT_12(a, b, c) Uses kinds proc~~impure_mm_abt_12~~UsesGraph proc~impure_mm_abt_12 formatmul_opts.f90::impure_mm_ABT_12 kinds kinds proc~impure_mm_abt_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12","tags":"","loc":"proc/impure_mm_abt_12.html"},{"title":"impure_mm_ABT_13 – ForMatmul","text":"impure subroutine impure_mm_ABT_13(a, b, c) Uses kinds proc~~impure_mm_abt_13~~UsesGraph proc~impure_mm_abt_13 formatmul_opts.f90::impure_mm_ABT_13 kinds kinds proc~impure_mm_abt_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13","tags":"","loc":"proc/impure_mm_abt_13.html"},{"title":"impure_mm_ATBT_12 – ForMatmul","text":"impure subroutine impure_mm_ATBT_12(a, b, c) Uses kinds proc~~impure_mm_atbt_12~~UsesGraph proc~impure_mm_atbt_12 formatmul_opts.f90::impure_mm_ATBT_12 kinds kinds proc~impure_mm_atbt_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12","tags":"","loc":"proc/impure_mm_atbt_12.html"},{"title":"impure_mm_ATBT_13 – ForMatmul","text":"impure subroutine impure_mm_ATBT_13(a, b, c) Uses kinds proc~~impure_mm_atbt_13~~UsesGraph proc~impure_mm_atbt_13 formatmul_opts.f90::impure_mm_ATBT_13 kinds kinds proc~impure_mm_atbt_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13","tags":"","loc":"proc/impure_mm_atbt_13.html"},{"title":"gemm – ForMatmul","text":"public interface gemm Called by interface~~gemm~~CalledByGraph interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mm_ab_2->interface~gemm proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mm_abt_2->interface~gemm proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mm_atb_2->interface~gemm proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mm_atbt_2->interface~gemm proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine sgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc","tags":"","loc":"interface/gemm.html"},{"title":"gemv – ForMatmul","text":"public interface gemv Called by interface~~gemv~~CalledByGraph interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mv_atv_2->interface~gemv proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mv_av_2->interface~gemv proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine sgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy","tags":"","loc":"interface/gemv.html"},{"title":"mat_mat_rel_AB_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_AB_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_ab_opt~~CallsGraph proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_ab_opt~~CalledByGraph proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_AB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_AB_1 ( A , B , C ) case ( 'm2' ) call mm_AB_2 ( A , B , C ) case ( 'm3' ) call mm_AB_3 ( A , B , C ) case ( 'm4' ) call mm_AB_4 ( A , B , C ) case ( 'm5' ) call mm_AB_5 ( A , B , C ) case ( 'm6' ) call mm_AB_6 ( A , B , C ) case ( 'm7' ) call mm_AB_7 ( A , B , C ) case ( 'm8' ) call mm_AB_8 ( A , B , C ) case ( 'm9' ) call mm_AB_9 ( A , B , C ) case ( 'm10' ) call mm_AB_10 ( A , B , C ) case ( 'm11' ) call mm_AB_11 ( A , B , C ) case ( 'm12' ) call mm_AB_12 ( A , B , C ) case ( 'm13' ) call mm_AB_13 ( A , B , C ) end select end subroutine mat_mat_rel_AB_opt","tags":"","loc":"proc/mat_mat_rel_ab_opt.html"},{"title":"mat_mat_rel_ATB_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ATB_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_atb_opt~~CallsGraph proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atb_opt~~CalledByGraph proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATB_1 ( A , B , C ) case ( 'm2' ) call mm_ATB_2 ( A , B , C ) case ( 'm3' ) call mm_ATB_3 ( A , B , C ) case ( 'm4' ) call mm_ATB_4 ( A , B , C ) case ( 'm5' ) call mm_ATB_5 ( A , B , C ) case ( 'm6' ) call mm_ATB_6 ( A , B , C ) case ( 'm7' ) call mm_ATB_7 ( A , B , C ) case ( 'm8' ) call mm_ATB_8 ( A , B , C ) case ( 'm9' ) call mm_ATB_9 ( A , B , C ) case ( 'm10' ) call mm_ATB_10 ( A , B , C ) case ( 'm11' ) call mm_ATB_11 ( A , B , C ) case ( 'm12' ) call mm_ATB_12 ( A , B , C ) case ( 'm13' ) call mm_ATB_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATB_opt","tags":"","loc":"proc/mat_mat_rel_atb_opt.html"},{"title":"mat_mat_rel_ABT_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ABT_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_abt_opt~~CallsGraph proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_abt_opt~~CalledByGraph proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ABT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ABT_1 ( A , B , C ) case ( 'm2' ) call mm_ABT_2 ( A , B , C ) case ( 'm3' ) call mm_ABT_3 ( A , B , C ) case ( 'm4' ) call mm_ABT_4 ( A , B , C ) case ( 'm5' ) call mm_ABT_5 ( A , B , C ) case ( 'm6' ) call mm_ABT_6 ( A , B , C ) case ( 'm7' ) call mm_ABT_7 ( A , B , C ) case ( 'm8' ) call mm_ABT_8 ( A , B , C ) case ( 'm9' ) call mm_ABT_9 ( A , B , C ) case ( 'm10' ) call mm_ABT_10 ( A , B , C ) case ( 'm11' ) call mm_ABT_11 ( A , B , C ) case ( 'm12' ) call mm_ABT_12 ( A , B , C ) case ( 'm13' ) call mm_ABT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ABT_opt","tags":"","loc":"proc/mat_mat_rel_abt_opt.html"},{"title":"mat_mat_rel_ATBT_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ATBT_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_atbt_opt~~CallsGraph proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atbt_opt~~CalledByGraph proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATBT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATBT_1 ( A , B , C ) case ( 'm2' ) call mm_ATBT_2 ( A , B , C ) case ( 'm3' ) call mm_ATBT_3 ( A , B , C ) case ( 'm4' ) call mm_ATBT_4 ( A , B , C ) case ( 'm5' ) call mm_ATBT_5 ( A , B , C ) case ( 'm6' ) call mm_ATBT_6 ( A , B , C ) case ( 'm7' ) call mm_ATBT_7 ( A , B , C ) case ( 'm8' ) call mm_ATBT_8 ( A , B , C ) case ( 'm9' ) call mm_ATBT_9 ( A , B , C ) case ( 'm10' ) call mm_ATBT_10 ( A , B , C ) case ( 'm11' ) call mm_ATBT_11 ( A , B , C ) case ( 'm12' ) call mm_ATBT_12 ( A , B , C ) case ( 'm13' ) call mm_ATBT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATBT_opt","tags":"","loc":"proc/mat_mat_rel_atbt_opt.html"},{"title":"mat_vec_rel_Av_opt – ForMatmul","text":"public pure subroutine mat_vec_rel_Av_opt(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option Calls proc~~mat_vec_rel_av_opt~~CallsGraph proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_av_opt~~CalledByGraph proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_Av_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_Av_1 ( A , v , w ) case ( 'm2' ) call mv_Av_2 ( A , v , w ) case ( 'm3' ) call mv_Av_3 ( A , v , w ) case ( 'm4' ) call mv_Av_4 ( A , v , w ) case ( 'm5' ) call mv_Av_5 ( A , v , w ) case ( 'm6' ) call mv_Av_6 ( A , v , w ) case ( 'm7' ) call mv_Av_7 ( A , v , w ) case ( 'm8' ) call mv_Av_8 ( A , v , w ) end select end subroutine mat_vec_rel_Av_opt","tags":"","loc":"proc/mat_vec_rel_av_opt.html"},{"title":"mat_vec_rel_ATv_opt – ForMatmul","text":"public pure subroutine mat_vec_rel_ATv_opt(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option Calls proc~~mat_vec_rel_atv_opt~~CallsGraph proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_atv_opt~~CalledByGraph proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_ATv_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_ATv_1 ( A , v , w ) case ( 'm2' ) call mv_ATv_2 ( A , v , w ) case ( 'm3' ) call mv_ATv_3 ( A , v , w ) case ( 'm4' ) call mv_ATv_4 ( A , v , w ) case ( 'm5' ) call mv_ATv_5 ( A , v , w ) case ( 'm6' ) call mv_ATv_6 ( A , v , w ) case ( 'm7' ) call mv_ATv_7 ( A , v , w ) case ( 'm8' ) call mv_ATv_8 ( A , v , w ) end select end subroutine mat_vec_rel_ATv_opt","tags":"","loc":"proc/mat_vec_rel_atv_opt.html"},{"title":"mm_AB_1 – ForMatmul","text":"private pure subroutine mm_AB_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_1~~CalledByGraph proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , B ) end subroutine mm_AB_1","tags":"","loc":"proc/mm_ab_1.html"},{"title":"mm_AB_2 – ForMatmul","text":"private pure subroutine mm_AB_2(A, B, C) Uses external_interfaces_matmul proc~~mm_ab_2~~UsesGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_ab_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_ab_2~~CallsGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_ab_2~~CalledByGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 1 ) n = size ( A , 2 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , m , B , n , 0.0_rk , C , m ) end subroutine mm_AB_2","tags":"","loc":"proc/mm_ab_2.html"},{"title":"mm_AB_3 – ForMatmul","text":"private pure subroutine mm_AB_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_3~~CalledByGraph proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( j , k ) end do end do end do end subroutine mm_AB_3","tags":"","loc":"proc/mm_ab_3.html"},{"title":"mm_AB_4 – ForMatmul","text":"private pure subroutine mm_AB_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_4~~CalledByGraph proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( k , j ) end do end do end do end subroutine mm_AB_4","tags":"","loc":"proc/mm_ab_4.html"},{"title":"mm_AB_5 – ForMatmul","text":"private pure subroutine mm_AB_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_5~~CalledByGraph proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( i , k ) end do end do end do end subroutine mm_AB_5","tags":"","loc":"proc/mm_ab_5.html"},{"title":"mm_AB_6 – ForMatmul","text":"private pure subroutine mm_AB_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_6~~CalledByGraph proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( i , j ) end do end do end do end subroutine mm_AB_6","tags":"","loc":"proc/mm_ab_6.html"},{"title":"mm_AB_7 – ForMatmul","text":"private pure subroutine mm_AB_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_7~~CalledByGraph proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( k , i ) end do end do end do end subroutine mm_AB_7","tags":"","loc":"proc/mm_ab_7.html"},{"title":"mm_AB_8 – ForMatmul","text":"private pure subroutine mm_AB_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_8~~CalledByGraph proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( j , i ) end do end do end do end subroutine mm_AB_8","tags":"","loc":"proc/mm_ab_8.html"},{"title":"mm_AB_9 – ForMatmul","text":"private pure subroutine mm_AB_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_9~~CalledByGraph proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do end subroutine mm_AB_9","tags":"","loc":"proc/mm_ab_9.html"},{"title":"mm_AB_10 – ForMatmul","text":"private pure subroutine mm_AB_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_10~~CalledByGraph proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(:,i)) ! end do ! end do end subroutine mm_AB_10","tags":"","loc":"proc/mm_ab_10.html"},{"title":"mm_AB_11 – ForMatmul","text":"private pure subroutine mm_AB_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_11~~CalledByGraph proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(j,i) ! end do ! end do ! end do end subroutine mm_AB_11","tags":"","loc":"proc/mm_ab_11.html"},{"title":"mm_AB_12 – ForMatmul","text":"private pure subroutine mm_AB_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_12~~CalledByGraph proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12 end interface call impure_mm_AB_12 ( a , b , c ) end subroutine mm_AB_12","tags":"","loc":"proc/mm_ab_12.html"},{"title":"mm_AB_13 – ForMatmul","text":"private pure subroutine mm_AB_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_13~~CalledByGraph proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13 end interface call impure_mm_AB_13 ( a , b , c ) end subroutine mm_AB_13","tags":"","loc":"proc/mm_ab_13.html"},{"title":"mm_ATB_1 – ForMatmul","text":"private pure subroutine mm_ATB_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_1~~CalledByGraph proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), B ) end subroutine mm_ATB_1","tags":"","loc":"proc/mm_atb_1.html"},{"title":"mm_ATB_2 – ForMatmul","text":"private pure subroutine mm_ATB_2(A, B, C) Uses external_interfaces_matmul proc~~mm_atb_2~~UsesGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_atb_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_atb_2~~CallsGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_atb_2~~CalledByGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 2 ) n = size ( A , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , n , B , n , 0.0_rk , C , m ) end subroutine mm_ATB_2","tags":"","loc":"proc/mm_atb_2.html"},{"title":"mm_ATB_3 – ForMatmul","text":"private pure subroutine mm_ATB_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_3~~CalledByGraph proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( j , k ) end do end do end do end subroutine mm_ATB_3","tags":"","loc":"proc/mm_atb_3.html"},{"title":"mm_ATB_4 – ForMatmul","text":"private pure subroutine mm_ATB_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_4~~CalledByGraph proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( k , j ) end do end do end do end subroutine mm_ATB_4","tags":"","loc":"proc/mm_atb_4.html"},{"title":"mm_ATB_5 – ForMatmul","text":"private pure subroutine mm_ATB_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_5~~CalledByGraph proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( i , k ) end do end do end do end subroutine mm_ATB_5","tags":"","loc":"proc/mm_atb_5.html"},{"title":"mm_ATB_6 – ForMatmul","text":"private pure subroutine mm_ATB_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_6~~CalledByGraph proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( i , j ) end do end do end do end subroutine mm_ATB_6","tags":"","loc":"proc/mm_atb_6.html"},{"title":"mm_ATB_7 – ForMatmul","text":"private pure subroutine mm_ATB_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_7~~CalledByGraph proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( k , i ) end do end do end do end subroutine mm_ATB_7","tags":"","loc":"proc/mm_atb_7.html"},{"title":"mm_ATB_8 – ForMatmul","text":"private pure subroutine mm_ATB_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_8~~CalledByGraph proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( j , i ) end do end do end do end subroutine mm_ATB_8","tags":"","loc":"proc/mm_atb_8.html"},{"title":"mm_ATB_9 – ForMatmul","text":"private pure subroutine mm_ATB_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_9~~CalledByGraph proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do end subroutine mm_ATB_9","tags":"","loc":"proc/mm_atb_9.html"},{"title":"mm_ATB_10 – ForMatmul","text":"private pure subroutine mm_ATB_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_10~~CalledByGraph proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(:,i)) ! end do ! end do end subroutine mm_ATB_10","tags":"","loc":"proc/mm_atb_10.html"},{"title":"mm_ATB_11 – ForMatmul","text":"private pure subroutine mm_ATB_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_11~~CalledByGraph proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(j,i) ! end do ! end do ! end do end subroutine mm_ATB_11","tags":"","loc":"proc/mm_atb_11.html"},{"title":"mm_ATB_12 – ForMatmul","text":"private pure subroutine mm_ATB_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_12~~CalledByGraph proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12 end interface call impure_mm_ATB_12 ( a , b , c ) end subroutine mm_ATB_12","tags":"","loc":"proc/mm_atb_12.html"},{"title":"mm_ATB_13 – ForMatmul","text":"private pure subroutine mm_ATB_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_13~~CalledByGraph proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13 end interface call impure_mm_ATB_13 ( a , b , c ) end subroutine mm_ATB_13","tags":"","loc":"proc/mm_atb_13.html"},{"title":"mm_ABT_1 – ForMatmul","text":"private pure subroutine mm_ABT_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_1~~CalledByGraph proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , transpose ( B )) end subroutine mm_ABT_1","tags":"","loc":"proc/mm_abt_1.html"},{"title":"mm_ABT_2 – ForMatmul","text":"private pure subroutine mm_ABT_2(A, B, C) Uses external_interfaces_matmul proc~~mm_abt_2~~UsesGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_abt_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_abt_2~~CallsGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_abt_2~~CalledByGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p m = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'T' , m , p , size ( A , 2 ), 1.0_rk , A , m , B , p , 0.0_rk , C , m ) end subroutine mm_ABT_2","tags":"","loc":"proc/mm_abt_2.html"},{"title":"mm_ABT_3 – ForMatmul","text":"private pure subroutine mm_ABT_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_3~~CalledByGraph proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( k , j ) end do end do end do end subroutine mm_ABT_3","tags":"","loc":"proc/mm_abt_3.html"},{"title":"mm_ABT_4 – ForMatmul","text":"private pure subroutine mm_ABT_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_4~~CalledByGraph proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( j , k ) end do end do end do end subroutine mm_ABT_4","tags":"","loc":"proc/mm_abt_4.html"},{"title":"mm_ABT_5 – ForMatmul","text":"private pure subroutine mm_ABT_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_5~~CalledByGraph proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( k , i ) end do end do end do end subroutine mm_ABT_5","tags":"","loc":"proc/mm_abt_5.html"},{"title":"mm_ABT_6 – ForMatmul","text":"private pure subroutine mm_ABT_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_6~~CalledByGraph proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( j , i ) end do end do end do end subroutine mm_ABT_6","tags":"","loc":"proc/mm_abt_6.html"},{"title":"mm_ABT_7 – ForMatmul","text":"private pure subroutine mm_ABT_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_7~~CalledByGraph proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( i , k ) end do end do end do end subroutine mm_ABT_7","tags":"","loc":"proc/mm_abt_7.html"},{"title":"mm_ABT_8 – ForMatmul","text":"private pure subroutine mm_ABT_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_8~~CalledByGraph proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( i , j ) end do end do end do end subroutine mm_ABT_8","tags":"","loc":"proc/mm_abt_8.html"},{"title":"mm_ABT_9 – ForMatmul","text":"private pure subroutine mm_ABT_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_9~~CalledByGraph proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do end subroutine mm_ABT_9","tags":"","loc":"proc/mm_abt_9.html"},{"title":"mm_ABT_10 – ForMatmul","text":"private pure subroutine mm_ABT_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_10~~CalledByGraph proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(i,:)) ! end do ! end do end subroutine mm_ABT_10","tags":"","loc":"proc/mm_abt_10.html"},{"title":"mm_ABT_11 – ForMatmul","text":"private pure subroutine mm_ABT_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_11~~CalledByGraph proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(i,j) ! end do ! end do ! end do end subroutine mm_ABT_11","tags":"","loc":"proc/mm_abt_11.html"},{"title":"mm_ABT_12 – ForMatmul","text":"private pure subroutine mm_ABT_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_12~~CalledByGraph proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12 end interface call impure_mm_ABT_12 ( a , b , c ) end subroutine mm_ABT_12","tags":"","loc":"proc/mm_abt_12.html"},{"title":"mm_ABT_13 – ForMatmul","text":"private pure subroutine mm_ABT_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_13~~CalledByGraph proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13 end interface call impure_mm_ABT_13 ( a , b , c ) end subroutine mm_ABT_13","tags":"","loc":"proc/mm_abt_13.html"},{"title":"mm_ATBT_1 – ForMatmul","text":"private pure subroutine mm_ATBT_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_1~~CalledByGraph proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), transpose ( B )) end subroutine mm_ATBT_1","tags":"","loc":"proc/mm_atbt_1.html"},{"title":"mm_ATBT_2 – ForMatmul","text":"private pure subroutine mm_ATBT_2(A, B, C) Uses external_interfaces_matmul proc~~mm_atbt_2~~UsesGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_atbt_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_atbt_2~~CallsGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_atbt_2~~CalledByGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'T' , m , p , n , 1.0_rk , A , n , B , p , 0.0_rk , C , m ) end subroutine mm_ATBT_2","tags":"","loc":"proc/mm_atbt_2.html"},{"title":"mm_ATBT_3 – ForMatmul","text":"private pure subroutine mm_ATBT_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_3~~CalledByGraph proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( k , j ) end do end do end do end subroutine mm_ATBT_3","tags":"","loc":"proc/mm_atbt_3.html"},{"title":"mm_ATBT_4 – ForMatmul","text":"private pure subroutine mm_ATBT_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_4~~CalledByGraph proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( j , k ) end do end do end do end subroutine mm_ATBT_4","tags":"","loc":"proc/mm_atbt_4.html"},{"title":"mm_ATBT_5 – ForMatmul","text":"private pure subroutine mm_ATBT_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_5~~CalledByGraph proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( k , i ) end do end do end do end subroutine mm_ATBT_5","tags":"","loc":"proc/mm_atbt_5.html"},{"title":"mm_ATBT_6 – ForMatmul","text":"private pure subroutine mm_ATBT_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_6~~CalledByGraph proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( j , i ) end do end do end do end subroutine mm_ATBT_6","tags":"","loc":"proc/mm_atbt_6.html"},{"title":"mm_ATBT_7 – ForMatmul","text":"private pure subroutine mm_ATBT_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_7~~CalledByGraph proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( i , k ) end do end do end do end subroutine mm_ATBT_7","tags":"","loc":"proc/mm_atbt_7.html"},{"title":"mm_ATBT_8 – ForMatmul","text":"private pure subroutine mm_ATBT_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_8~~CalledByGraph proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( i , j ) end do end do end do end subroutine mm_ATBT_8","tags":"","loc":"proc/mm_atbt_8.html"},{"title":"mm_ATBT_9 – ForMatmul","text":"private pure subroutine mm_ATBT_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_9~~CalledByGraph proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do end subroutine mm_ATBT_9","tags":"","loc":"proc/mm_atbt_9.html"},{"title":"mm_ATBT_10 – ForMatmul","text":"private pure subroutine mm_ATBT_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_10~~CalledByGraph proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(i,:)) ! end do ! end do end subroutine mm_ATBT_10","tags":"","loc":"proc/mm_atbt_10.html"},{"title":"mm_ATBT_11 – ForMatmul","text":"private pure subroutine mm_ATBT_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_11~~CalledByGraph proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(i,j) ! end do ! end do ! end do end subroutine mm_ATBT_11","tags":"","loc":"proc/mm_atbt_11.html"},{"title":"mm_ATBT_12 – ForMatmul","text":"private pure subroutine mm_ATBT_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_12~~CalledByGraph proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12 end interface call impure_mm_ATBT_12 ( a , b , c ) end subroutine mm_ATBT_12","tags":"","loc":"proc/mm_atbt_12.html"},{"title":"mm_ATBT_13 – ForMatmul","text":"private pure subroutine mm_ATBT_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_13~~CalledByGraph proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13 end interface call impure_mm_ATBT_13 ( a , b , c ) end subroutine mm_ATBT_13","tags":"","loc":"proc/mm_atbt_13.html"},{"title":"mv_Av_1 – ForMatmul","text":"private pure subroutine mv_Av_1(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_1~~CalledByGraph proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( A , v ) end subroutine mv_Av_1","tags":"","loc":"proc/mv_av_1.html"},{"title":"mv_Av_2 – ForMatmul","text":"private pure subroutine mv_Av_2(A, v, w) Uses external_interfaces_matmul proc~~mv_av_2~~UsesGraph proc~mv_av_2 formatmul_opts::mv_Av_2 module~external_interfaces_matmul external_interfaces_matmul proc~mv_av_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Calls proc~~mv_av_2~~CallsGraph proc~mv_av_2 formatmul_opts::mv_Av_2 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mv_av_2~~CalledByGraph proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'N' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_Av_2","tags":"","loc":"proc/mv_av_2.html"},{"title":"mv_Av_3 – ForMatmul","text":"private pure subroutine mv_Av_3(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_3~~CalledByGraph proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_3","tags":"","loc":"proc/mv_av_3.html"},{"title":"mv_Av_4 – ForMatmul","text":"private pure subroutine mv_Av_4(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_4~~CalledByGraph proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_4","tags":"","loc":"proc/mv_av_4.html"},{"title":"mv_Av_5 – ForMatmul","text":"private pure subroutine mv_Av_5(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_5~~CalledByGraph proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 1 ) do k = 1 , m w ( k ) = dot_product ( a ( k ,:), v (:)) end do end subroutine mv_Av_5","tags":"","loc":"proc/mv_av_5.html"},{"title":"mv_Av_6 – ForMatmul","text":"private pure subroutine mv_Av_6(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_6~~CalledByGraph proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 2 ) do k = 1 , n w (:) = w (:) + a (:, k ) * v ( k ) end do end subroutine mv_Av_6","tags":"","loc":"proc/mv_av_6.html"},{"title":"mv_Av_7 – ForMatmul","text":"private pure subroutine mv_Av_7(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_7~~CalledByGraph proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(k,:), v(:)) ! end do end subroutine mv_Av_7","tags":"","loc":"proc/mv_av_7.html"},{"title":"mv_Av_8 – ForMatmul","text":"private pure subroutine mv_Av_8(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_8~~CalledByGraph proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_8 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(i,j)*v(j) ! end do ! end do end subroutine mv_Av_8","tags":"","loc":"proc/mv_av_8.html"},{"title":"mv_ATv_1 – ForMatmul","text":"private pure subroutine mv_ATv_1(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_1~~CalledByGraph proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( transpose ( A ), v ) end subroutine mv_ATv_1","tags":"","loc":"proc/mv_atv_1.html"},{"title":"mv_ATv_2 – ForMatmul","text":"private pure subroutine mv_ATv_2(A, v, w) Uses external_interfaces_matmul proc~~mv_atv_2~~UsesGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 module~external_interfaces_matmul external_interfaces_matmul proc~mv_atv_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Calls proc~~mv_atv_2~~CallsGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mv_atv_2~~CalledByGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'T' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_ATv_2","tags":"","loc":"proc/mv_atv_2.html"},{"title":"mv_ATv_3 – ForMatmul","text":"private pure subroutine mv_ATv_3(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_3~~CalledByGraph proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_3","tags":"","loc":"proc/mv_atv_3.html"},{"title":"mv_ATv_4 – ForMatmul","text":"private pure subroutine mv_ATv_4(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_4~~CalledByGraph proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_4","tags":"","loc":"proc/mv_atv_4.html"},{"title":"mv_ATv_5 – ForMatmul","text":"private pure subroutine mv_ATv_5(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_5~~CalledByGraph proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 2 ) do k = 1 , m w ( k ) = dot_product ( a (:, k ), v (:)) end do end subroutine mv_ATv_5","tags":"","loc":"proc/mv_atv_5.html"},{"title":"mv_ATv_6 – ForMatmul","text":"private pure subroutine mv_ATv_6(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_6~~CalledByGraph proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 1 ) do k = 1 , n w (:) = w (:) + a ( k ,:) * v ( k ) end do end subroutine mv_ATv_6","tags":"","loc":"proc/mv_atv_6.html"},{"title":"mv_ATv_7 – ForMatmul","text":"private pure subroutine mv_ATv_7(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_7~~CalledByGraph proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(:,k), v(:)) ! end do end subroutine mv_ATv_7","tags":"","loc":"proc/mv_atv_7.html"},{"title":"mv_ATv_8 – ForMatmul","text":"private pure subroutine mv_ATv_8(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_8~~CalledByGraph proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(j,i)*v(j) ! end do ! end do end subroutine mv_ATv_8","tags":"","loc":"proc/mv_atv_8.html"},{"title":"mat_mat_coarray_rel – ForMatmul","text":"private impure function mat_mat_coarray_rel(a, b, transA, transB, option, coarray) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_coarray_rel~~CallsGraph proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_coarray_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_coarray_rel~~CalledByGraph proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code impure function mat_mat_coarray_rel ( a , b , transA , transB , option , coarray ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB real ( rk ), allocatable :: c (:,:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: C_block (:,:)[:], B_block (:,:)[:], A_block (:,:)[:] if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B , transA = . true ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if end if #else C = matmul ( A , B , transA = transA , transB = transB , option = option ) #endif end function mat_mat_coarray_rel","tags":"","loc":"proc/mat_mat_coarray_rel.html"},{"title":"mat_vec_coarray_rel – ForMatmul","text":"private impure function mat_vec_coarray_rel(A, v, transA, option, coarray) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_coarray_rel~~CallsGraph proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_vec_coarray_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_coarray_rel~~CalledByGraph proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code impure function mat_vec_coarray_rel ( A , v , transA , option , coarray ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA real ( rk ), allocatable :: w (:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: w_block (:)[:], v_block (:)[:], A_block (:,:)[:] if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:, :)[ im ], v , transA = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w ( start_elem ( i ): end_elem ( i )) = w_block (:)[ i ] end do end if else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if #else w = matmul ( A , v , transA = transA , option = option ) #endif end function mat_vec_coarray_rel","tags":"","loc":"proc/mat_vec_coarray_rel.html"},{"title":"mat_mat_block_rel – ForMatmul","text":"private pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_block_rel~~CallsGraph proc~mat_mat_block_rel formatmul::mat_mat_block_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges reduce reduce proc~mat_mat_block_rel->reduce Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_block_rel~~CalledByGraph proc~mat_mat_block_rel formatmul::mat_mat_block_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_block_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_mat_block_rel ( a , b , transA , transB , option , nblock ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) logical , intent ( in ), optional :: transA , transB character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: c (:,:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #endif else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif end if end function mat_mat_block_rel","tags":"","loc":"proc/mat_mat_block_rel.html"},{"title":"mat_vec_block_rel – ForMatmul","text":"private pure function mat_vec_block_rel(A, v, transA, option, nblock) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_block_rel~~CallsGraph proc~mat_vec_block_rel formatmul::mat_vec_block_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_vec_block_rel->proc~compute_block_ranges reduce reduce proc~mat_vec_block_rel->reduce Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_block_rel~~CalledByGraph proc~mat_vec_block_rel formatmul::mat_vec_block_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_block_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_vec_block_rel ( A , v , transA , option , nblock ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) logical , intent ( in ), optional :: transA character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: w (:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #endif else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if end function mat_vec_block_rel","tags":"","loc":"proc/mat_vec_block_rel.html"},{"title":"mat_mat_rel – ForMatmul","text":"private pure function mat_mat_rel(A, B, transA, transB, option) result(C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_rel~~CallsGraph proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel->proc~mat_mat_rel_atbt proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm proc~mm_abt_2->interface~gemm proc~mm_atb_2->interface~gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel~~CalledByGraph proc~mat_mat_rel formatmul::mat_mat_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_mat_rel ( A , B , transA , transB , option ) result ( C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), allocatable :: C (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ATBT ( A , B , C , option ) else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) end if end function mat_mat_rel","tags":"","loc":"proc/mat_mat_rel.html"},{"title":"mat_vec_rel – ForMatmul","text":"private pure function mat_vec_rel(A, v, transA, option) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_rel~~CallsGraph proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel->proc~mat_vec_rel_av proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel~~CalledByGraph proc~mat_vec_rel formatmul::mat_vec_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_vec_rel ( A , v , transA , option ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), allocatable :: w (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call mat_vec_rel_ATv ( A , v , w , option ) else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if end function mat_vec_rel","tags":"","loc":"proc/mat_vec_rel.html"},{"title":"compute_block_ranges – ForMatmul","text":"private pure subroutine compute_block_ranges(d, nimg, block_size, start_elem, end_elem) Calculate block sizes and ranges.\nauthor: Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name integer, intent(in) :: d integer, intent(in) :: nimg integer, intent(out) :: block_size (nimg) integer, intent(out) :: start_elem (nimg) integer, intent(out) :: end_elem (nimg) Called by proc~~compute_block_ranges~~CalledByGraph proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel formatmul::mat_mat_block_rel proc~mat_mat_block_rel->proc~compute_block_ranges proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel proc~mat_mat_coarray_rel->proc~compute_block_ranges proc~mat_vec_block_rel formatmul::mat_vec_block_rel proc~mat_vec_block_rel->proc~compute_block_ranges proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel proc~mat_vec_coarray_rel->proc~compute_block_ranges interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_block_rel interface~matmul->proc~mat_mat_coarray_rel interface~matmul->proc~mat_vec_block_rel interface~matmul->proc~mat_vec_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine compute_block_ranges ( d , nimg , block_size , start_elem , end_elem ) integer , intent ( in ) :: d , nimg integer , intent ( out ) :: block_size ( nimg ), start_elem ( nimg ), end_elem ( nimg ) integer :: i , remainder block_size = d / nimg remainder = mod ( d , nimg ) block_size ( 1 : remainder ) = block_size ( 1 : remainder ) + 1 start_elem ( 1 ) = 1 do i = 2 , nimg start_elem ( i ) = start_elem ( i - 1 ) + block_size ( i - 1 ) end do end_elem ( 1 ) = block_size ( 1 ) end_elem ( 2 :) = start_elem ( 2 :) + block_size ( 2 :) - 1 ! Check if the block sizes are valid. if ( minval ( block_size ) <= 0 ) error stop 'ForDot: reduce the number of images of coarray.' end subroutine compute_block_ranges","tags":"","loc":"proc/compute_block_ranges.html"},{"title":"mat_mat_rel_AB – ForMatmul","text":"private pure subroutine mat_mat_rel_AB(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_ab~~CallsGraph proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_ab~~CalledByGraph proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_AB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_AB_opt ( A , B , C , option ) else call mat_mat_rel_AB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_AB","tags":"","loc":"proc/mat_mat_rel_ab.html"},{"title":"mat_mat_rel_ATB – ForMatmul","text":"private pure subroutine mat_mat_rel_ATB(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_atb~~CallsGraph proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atb~~CalledByGraph proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATB_opt ( A , B , C , option ) else call mat_mat_rel_ATB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATB","tags":"","loc":"proc/mat_mat_rel_atb.html"},{"title":"mat_mat_rel_ABT – ForMatmul","text":"private pure subroutine mat_mat_rel_ABT(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_abt~~CallsGraph proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_abt~~CalledByGraph proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ABT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ABT_opt ( A , B , C , option ) else call mat_mat_rel_ABT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ABT","tags":"","loc":"proc/mat_mat_rel_abt.html"},{"title":"mat_mat_rel_ATBT – ForMatmul","text":"private pure subroutine mat_mat_rel_ATBT(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_atbt~~CallsGraph proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atbt~~CalledByGraph proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATBT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATBT_opt ( A , B , C , option ) else call mat_mat_rel_ATBT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATBT","tags":"","loc":"proc/mat_mat_rel_atbt.html"},{"title":"mat_vec_rel_Av – ForMatmul","text":"private pure subroutine mat_vec_rel_Av(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option Calls proc~~mat_vec_rel_av~~CallsGraph proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_av~~CalledByGraph proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_Av ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_Av_opt ( A , v , w , option ) else call mat_vec_rel_Av_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_Av","tags":"","loc":"proc/mat_vec_rel_av.html"},{"title":"mat_vec_rel_ATv – ForMatmul","text":"private pure subroutine mat_vec_rel_ATv(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option Calls proc~~mat_vec_rel_atv~~CallsGraph proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_atv~~CalledByGraph proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_ATv ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_ATv_opt ( A , v , w , option ) else call mat_vec_rel_ATv_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_ATv","tags":"","loc":"proc/mat_vec_rel_atv.html"},{"title":"matmul – ForMatmul","text":"public interface matmul Calls interface~~matmul~~CallsGraph interface~matmul formatmul::matmul proc~mat_mat_block_rel formatmul::mat_mat_block_rel interface~matmul->proc~mat_mat_block_rel proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel interface~matmul->proc~mat_mat_coarray_rel proc~mat_mat_rel formatmul::mat_mat_rel interface~matmul->proc~mat_mat_rel proc~mat_vec_block_rel formatmul::mat_vec_block_rel interface~matmul->proc~mat_vec_block_rel proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel interface~matmul->proc~mat_vec_coarray_rel proc~mat_vec_rel formatmul::mat_vec_rel interface~matmul->proc~mat_vec_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges reduce reduce proc~mat_mat_block_rel->reduce proc~mat_mat_coarray_rel->proc~compute_block_ranges proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel->proc~mat_mat_rel_atbt proc~mat_vec_block_rel->proc~compute_block_ranges proc~mat_vec_block_rel->reduce proc~mat_vec_coarray_rel->proc~compute_block_ranges proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel->proc~mat_vec_rel_av proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm proc~mm_abt_2->interface~gemm proc~mm_atb_2->interface~gemm proc~mm_atbt_2->interface~gemm interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/matmul.html"},{"title":"external_interfaces_matmul – ForMatmul","text":"Uses kinds module~~external_interfaces_matmul~~UsesGraph module~external_interfaces_matmul external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~external_interfaces_matmul~~UsedByGraph module~external_interfaces_matmul external_interfaces_matmul proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mm_ab_2->module~external_interfaces_matmul proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mm_abt_2->module~external_interfaces_matmul proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mm_atb_2->module~external_interfaces_matmul proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mm_atbt_2->module~external_interfaces_matmul proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mv_atv_2->module~external_interfaces_matmul proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mv_av_2->module~external_interfaces_matmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Interfaces public interface gemm public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine sgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public interface gemv public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine sgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy","tags":"","loc":"module/external_interfaces_matmul.html"},{"title":"formatmul_opts – ForMatmul","text":"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Uses kinds module~~formatmul_opts~~UsesGraph module~formatmul_opts formatmul_opts kinds kinds module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~formatmul_opts~~UsedByGraph module~formatmul_opts formatmul_opts module~formatmul formatmul module~formatmul->module~formatmul_opts program~test_matmul10 test_matmul10 program~test_matmul10->module~formatmul program~test_matmul11 test_matmul11 program~test_matmul11->module~formatmul program~test_matmul12 test_matmul12 program~test_matmul12->module~formatmul program~test_matmul13 test_matmul13 program~test_matmul13->module~formatmul program~test_matmul14 test_matmul14 program~test_matmul14->module~formatmul program~test_matmul15 test_matmul15 program~test_matmul15->module~formatmul program~test_matmul3 test_matmul3 program~test_matmul3->module~formatmul program~test_matmul4 test_matmul4 program~test_matmul4->module~formatmul program~test_matmul5 test_matmul5 program~test_matmul5->module~formatmul program~test_matmul6 test_matmul6 program~test_matmul6->module~formatmul program~test_matmul7 test_matmul7 program~test_matmul7->module~formatmul program~test_matmul8 test_matmul8 program~test_matmul8->module~formatmul program~test_matmul9 test_matmul9 program~test_matmul9->module~formatmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine mat_mat_rel_AB_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ATB_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ABT_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ATBT_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_vec_rel_Av_opt (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option public pure subroutine mat_vec_rel_ATv_opt (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option private pure subroutine mm_AB_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mv_Av_1 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_2 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_3 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_4 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_5 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_6 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_7 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_8 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_1 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_2 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_3 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_4 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_5 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_6 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_7 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_8 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:)","tags":"","loc":"module/formatmul_opts.html"},{"title":"formatmul – ForMatmul","text":"Uses kinds formatmul_opts module~~formatmul~~UsesGraph module~formatmul formatmul kinds kinds module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~formatmul~~UsedByGraph module~formatmul formatmul program~test_matmul10 test_matmul10 program~test_matmul10->module~formatmul program~test_matmul11 test_matmul11 program~test_matmul11->module~formatmul program~test_matmul12 test_matmul12 program~test_matmul12->module~formatmul program~test_matmul13 test_matmul13 program~test_matmul13->module~formatmul program~test_matmul14 test_matmul14 program~test_matmul14->module~formatmul program~test_matmul15 test_matmul15 program~test_matmul15->module~formatmul program~test_matmul3 test_matmul3 program~test_matmul3->module~formatmul program~test_matmul4 test_matmul4 program~test_matmul4->module~formatmul program~test_matmul5 test_matmul5 program~test_matmul5->module~formatmul program~test_matmul6 test_matmul6 program~test_matmul6->module~formatmul program~test_matmul7 test_matmul7 program~test_matmul7->module~formatmul program~test_matmul8 test_matmul8 program~test_matmul8->module~formatmul program~test_matmul9 test_matmul9 program~test_matmul9->module~formatmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Interfaces public interface matmul private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) Functions private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) Subroutines private pure subroutine compute_block_ranges (d, nimg, block_size, start_elem, end_elem) Calculate block sizes and ranges.\nauthor: Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name integer, intent(in) :: d integer, intent(in) :: nimg integer, intent(out) :: block_size (nimg) integer, intent(out) :: start_elem (nimg) integer, intent(out) :: end_elem (nimg) private pure subroutine mat_mat_rel_AB (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ATB (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ABT (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ATBT (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_vec_rel_Av (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option private pure subroutine mat_vec_rel_ATv (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option","tags":"","loc":"module/formatmul.html"},{"title":"test_matmul13 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul13~~UsesGraph program~test_matmul13 test_matmul13 forunittest forunittest program~test_matmul13->forunittest kinds kinds program~test_matmul13->kinds module~formatmul formatmul program~test_matmul13->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul13~~CallsGraph program~test_matmul13 test_matmul13 check check program~test_matmul13->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul13 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.14' ) end program test_matmul13","tags":"","loc":"program/test_matmul13.html"},{"title":"test_matmul6 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul6~~UsesGraph program~test_matmul6 test_matmul6 forunittest forunittest program~test_matmul6->forunittest kinds kinds program~test_matmul6->kinds module~formatmul formatmul program~test_matmul6->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul6~~CallsGraph program~test_matmul6 test_matmul6 check check program~test_matmul6->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul6 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.14' ) C = matmul ( A , B , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.24' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.25') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.26') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.28' ) end program test_matmul6","tags":"","loc":"program/test_matmul6.html"},{"title":"test_matmul3 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul3~~UsesGraph program~test_matmul3 test_matmul3 forunittest forunittest program~test_matmul3->forunittest kinds kinds program~test_matmul3->kinds module~formatmul formatmul program~test_matmul3->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul3~~CallsGraph program~test_matmul3 test_matmul3 check check program~test_matmul3->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul3 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.1' ) C = matmul ( A , B , option = 'm1' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.2' ) C = matmul ( A , B , option = 'm2' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.3' ) C = matmul ( A , B , option = 'm3' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.4' ) C = matmul ( A , B , option = 'm4' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.5' ) C = matmul ( A , B , option = 'm5' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.6' ) C = matmul ( A , B , option = 'm6' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.7' ) C = matmul ( A , B , option = 'm7' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.8' ) C = matmul ( A , B , option = 'm8' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.9' ) C = matmul ( A , B , option = 'm9' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.10' ) ! C = matmul(A,B, option='m10') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.11') ! C = matmul(A,B, option='m11') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.12') C = matmul ( A , B , option = 'm12' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.13' ) C = matmul ( A , B , option = 'm13' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.14' ) C = matmul ( A , B , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.15' ) C = matmul ( A , B , option = 'm1' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.16' ) C = matmul ( A , B , option = 'm2' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.17' ) C = matmul ( A , B , option = 'm3' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.18' ) C = matmul ( A , B , option = 'm4' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.19' ) C = matmul ( A , B , option = 'm5' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.20' ) C = matmul ( A , B , option = 'm6' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.21' ) C = matmul ( A , B , option = 'm7' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.22' ) C = matmul ( A , B , option = 'm8' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.23' ) C = matmul ( A , B , option = 'm9' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.24' ) ! C = matmul(A,B, option='m10', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.25') ! C = matmul(A,B, option='m11', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.26') C = matmul ( A , B , option = 'm12' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.27' ) C = matmul ( A , B , option = 'm13' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.28' ) end program test_matmul3","tags":"","loc":"program/test_matmul3.html"},{"title":"test_matmul7 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul7~~UsesGraph program~test_matmul7 test_matmul7 forunittest forunittest program~test_matmul7->forunittest kinds kinds program~test_matmul7->kinds module~formatmul formatmul program~test_matmul7->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul7~~CallsGraph program~test_matmul7 test_matmul7 check check program~test_matmul7->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul7 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(m,n).v(n) m = 100 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.1' ) w = matmul ( A , v , option = 'm1' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.2' ) w = matmul ( A , v , option = 'm2' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.3' ) w = matmul ( A , v , option = 'm3' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.4' ) w = matmul ( A , v , option = 'm4' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.5' ) w = matmul ( A , v , option = 'm5' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.6' ) w = matmul ( A , v , option = 'm6' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.7' ) ! w = matmul(A,v, option='m7') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.8') ! w = matmul(A,v, option='m8') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.9') w = matmul ( A , v , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.10' ) w = matmul ( A , v , option = 'm1' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.11' ) w = matmul ( A , v , option = 'm2' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.12' ) w = matmul ( A , v , option = 'm3' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.13' ) w = matmul ( A , v , option = 'm4' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.14' ) w = matmul ( A , v , option = 'm5' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.15' ) w = matmul ( A , v , option = 'm6' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.16' ) ! w = matmul(A,v, option='m7', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.17') ! w = matmul(A,v, option='m8', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.18') end program test_matmul7","tags":"","loc":"program/test_matmul7.html"},{"title":"test_matmul4 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul4~~UsesGraph program~test_matmul4 test_matmul4 forunittest forunittest program~test_matmul4->forunittest kinds kinds program~test_matmul4->kinds module~formatmul formatmul program~test_matmul4->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul4~~CallsGraph program~test_matmul4 test_matmul4 check check program~test_matmul4->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul4 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.1' ) C = matmul ( A , B , option = 'm1' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.2' ) C = matmul ( A , B , option = 'm2' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.3' ) C = matmul ( A , B , option = 'm3' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.4' ) C = matmul ( A , B , option = 'm4' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.5' ) C = matmul ( A , B , option = 'm5' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.6' ) C = matmul ( A , B , option = 'm6' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.7' ) C = matmul ( A , B , option = 'm7' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.8' ) C = matmul ( A , B , option = 'm8' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.9' ) C = matmul ( A , B , option = 'm9' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.10' ) ! C = matmul(A,B, option='m10', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.11') ! C = matmul(A,B, option='m11', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.12') C = matmul ( A , B , option = 'm12' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.13' ) C = matmul ( A , B , option = 'm13' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.14' ) C = matmul ( A , B , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.24' ) ! C = matmul(A,B, option='m10', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.25') ! C = matmul(A,B, option='m11', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.26') C = matmul ( A , B , option = 'm12' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.28' ) end program test_matmul4","tags":"","loc":"program/test_matmul4.html"},{"title":"test_matmul5 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul5~~UsesGraph program~test_matmul5 test_matmul5 forunittest forunittest program~test_matmul5->forunittest kinds kinds program~test_matmul5->kinds module~formatmul formatmul program~test_matmul5->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul5~~CallsGraph program~test_matmul5 test_matmul5 check check program~test_matmul5->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul5 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.1' ) C = matmul ( A , B , option = 'm1' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.2' ) C = matmul ( A , B , option = 'm2' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.3' ) C = matmul ( A , B , option = 'm3' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.4' ) C = matmul ( A , B , option = 'm4' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.5' ) C = matmul ( A , B , option = 'm5' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.6' ) C = matmul ( A , B , option = 'm6' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.7' ) C = matmul ( A , B , option = 'm7' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.8' ) C = matmul ( A , B , option = 'm8' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.9' ) C = matmul ( A , B , option = 'm9' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.10' ) ! C = matmul(A,B, option='m10', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.11') ! C = matmul(A,B, option='m11', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.12') C = matmul ( A , B , option = 'm12' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.13' ) C = matmul ( A , B , option = 'm13' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.14' ) C = matmul ( A , B , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.15' ) C = matmul ( A , B , option = 'm1' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.16' ) C = matmul ( A , B , option = 'm2' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.17' ) C = matmul ( A , B , option = 'm3' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.18' ) C = matmul ( A , B , option = 'm4' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.19' ) C = matmul ( A , B , option = 'm5' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.20' ) C = matmul ( A , B , option = 'm6' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.21' ) C = matmul ( A , B , option = 'm7' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.22' ) C = matmul ( A , B , option = 'm8' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.23' ) C = matmul ( A , B , option = 'm9' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.24' ) ! C = matmul(A,B, option='m10', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.25') ! C = matmul(A,B, option='m11', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.26') C = matmul ( A , B , option = 'm12' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.27' ) C = matmul ( A , B , option = 'm13' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.28' ) end program test_matmul5","tags":"","loc":"program/test_matmul5.html"},{"title":"test_matmul12 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul12~~UsesGraph program~test_matmul12 test_matmul12 forunittest forunittest program~test_matmul12->forunittest kinds kinds program~test_matmul12->kinds module~formatmul formatmul program~test_matmul12->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul12~~CallsGraph program~test_matmul12 test_matmul12 check check program~test_matmul12->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul12 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.1' ) C = matmul ( A , B , option = 'm1' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.2' ) C = matmul ( A , B , option = 'm2' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.3' ) C = matmul ( A , B , option = 'm3' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.4' ) C = matmul ( A , B , option = 'm4' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.5' ) C = matmul ( A , B , option = 'm5' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.6' ) C = matmul ( A , B , option = 'm6' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.7' ) C = matmul ( A , B , option = 'm7' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.8' ) C = matmul ( A , B , option = 'm8' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.9' ) C = matmul ( A , B , option = 'm9' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.10' ) ! C = matmul(A,B, option='m10', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.11') ! C = matmul(A,B, option='m11', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.12') C = matmul ( A , B , option = 'm12' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.13' ) C = matmul ( A , B , option = 'm13' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.14' ) end program test_matmul12","tags":"","loc":"program/test_matmul12.html"},{"title":"test_matmul9 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul9~~UsesGraph program~test_matmul9 test_matmul9 forunittest forunittest program~test_matmul9->forunittest kinds kinds program~test_matmul9->kinds module~formatmul formatmul program~test_matmul9->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul9~~CallsGraph program~test_matmul9 test_matmul9 check check program~test_matmul9->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul9 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(n) = v(m).A(m,n) m = 100 n = 300 allocate ( A ( m , n ), v ( m )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( v , A ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.18') end program test_matmul9","tags":"","loc":"program/test_matmul9.html"},{"title":"test_matmul14 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul14~~UsesGraph program~test_matmul14 test_matmul14 forunittest forunittest program~test_matmul14->forunittest kinds kinds program~test_matmul14->kinds module~formatmul formatmul program~test_matmul14->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul14~~CallsGraph program~test_matmul14 test_matmul14 check check program~test_matmul14->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n integer :: im type(unit_test) :: ut Source Code program test_matmul14 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(m,n).v(n) m = 500 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.1' ) w = matmul ( A , v , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.2' ) w = matmul ( A , v , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.3' ) w = matmul ( A , v , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.4' ) w = matmul ( A , v , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.5' ) w = matmul ( A , v , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.6' ) w = matmul ( A , v , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.7' ) ! w = matmul(A,v, option='m7', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.8') ! w = matmul(A,v, option='m8', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.9') end program test_matmul14","tags":"","loc":"program/test_matmul14.html"},{"title":"test_matmul8 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul8~~UsesGraph program~test_matmul8 test_matmul8 forunittest forunittest program~test_matmul8->forunittest kinds kinds program~test_matmul8->kinds module~formatmul formatmul program~test_matmul8->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul8~~CallsGraph program~test_matmul8 test_matmul8 check check program~test_matmul8->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul8 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.18') end program test_matmul8","tags":"","loc":"program/test_matmul8.html"},{"title":"test_matmul11 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul11~~UsesGraph program~test_matmul11 test_matmul11 forunittest forunittest program~test_matmul11->forunittest kinds kinds program~test_matmul11->kinds module~formatmul formatmul program~test_matmul11->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul11~~CallsGraph program~test_matmul11 test_matmul11 check check program~test_matmul11->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul11 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.10' ) ! C = matmul(A,B, option='m10', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.11') ! C = matmul(A,B, option='m11', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.12') C = matmul ( A , B , option = 'm12' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.14' ) end program test_matmul11","tags":"","loc":"program/test_matmul11.html"},{"title":"test_matmul10 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul10~~UsesGraph program~test_matmul10 test_matmul10 forunittest forunittest program~test_matmul10->forunittest kinds kinds program~test_matmul10->kinds module~formatmul formatmul program~test_matmul10->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul10~~CallsGraph program~test_matmul10 test_matmul10 check check program~test_matmul10->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul10 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.1' ) C = matmul ( A , B , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.2' ) C = matmul ( A , B , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.3' ) C = matmul ( A , B , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.4' ) C = matmul ( A , B , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.5' ) C = matmul ( A , B , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.6' ) C = matmul ( A , B , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.7' ) C = matmul ( A , B , option = 'm7' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.8' ) C = matmul ( A , B , option = 'm8' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.9' ) C = matmul ( A , B , option = 'm9' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.10' ) ! C = matmul(A,B, option='m10', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.11') ! C = matmul(A,B, option='m11', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.12') C = matmul ( A , B , option = 'm12' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.13' ) C = matmul ( A , B , option = 'm13' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.14' ) end program test_matmul10","tags":"","loc":"program/test_matmul10.html"},{"title":"test_matmul15 – ForMatmul","text":"Uses kinds formatmul forunittest program~~test_matmul15~~UsesGraph program~test_matmul15 test_matmul15 forunittest forunittest program~test_matmul15->forunittest kinds kinds program~test_matmul15->kinds module~formatmul formatmul program~test_matmul15->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul15~~CallsGraph program~test_matmul15 test_matmul15 check check program~test_matmul15->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n integer :: im type(unit_test) :: ut Source Code program test_matmul15 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.1' ) w = matmul ( A , v , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.2' ) w = matmul ( A , v , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.3' ) w = matmul ( A , v , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.4' ) w = matmul ( A , v , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.5' ) w = matmul ( A , v , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.6' ) w = matmul ( A , v , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.7' ) ! w = matmul(A,v, option='m7', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.8') ! w = matmul(A,v, option='m8', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.9') end program test_matmul15","tags":"","loc":"program/test_matmul15.html"},{"title":"test11.f90 – ForMatmul","text":"This file depends on sourcefile~~test11.f90~~EfferentGraph sourcefile~test11.f90 test11.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul13 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.14' ) end program test_matmul13","tags":"","loc":"sourcefile/test11.f90.html"},{"title":"test4.f90 – ForMatmul","text":"This file depends on sourcefile~~test4.f90~~EfferentGraph sourcefile~test4.f90 test4.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul6 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.14' ) C = matmul ( A , B , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.24' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.25') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.26') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.28' ) end program test_matmul6","tags":"","loc":"sourcefile/test4.f90.html"},{"title":"external_interfaces.f90 – ForMatmul","text":"Files dependent on this one sourcefile~~external_interfaces.f90~~AfferentGraph sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module external_interfaces_matmul use kinds implicit none interface gemm #if defined(REAL64) pure subroutine dgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine dgemm #elif defined(REAL32) pure subroutine sgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine sgemm #else pure subroutine dgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine dgemm #endif end interface interface gemv #if defined(REAL64) pure subroutine dgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine dgemv #elif defined(REAL32) pure subroutine sgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine sgemv #else pure subroutine dgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine dgemv #endif end interface end module external_interfaces_matmul","tags":"","loc":"sourcefile/external_interfaces.f90.html"},{"title":"test1.f90 – ForMatmul","text":"This file depends on sourcefile~~test1.f90~~EfferentGraph sourcefile~test1.f90 test1.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul3 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.1' ) C = matmul ( A , B , option = 'm1' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.2' ) C = matmul ( A , B , option = 'm2' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.3' ) C = matmul ( A , B , option = 'm3' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.4' ) C = matmul ( A , B , option = 'm4' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.5' ) C = matmul ( A , B , option = 'm5' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.6' ) C = matmul ( A , B , option = 'm6' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.7' ) C = matmul ( A , B , option = 'm7' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.8' ) C = matmul ( A , B , option = 'm8' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.9' ) C = matmul ( A , B , option = 'm9' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.10' ) ! C = matmul(A,B, option='m10') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.11') ! C = matmul(A,B, option='m11') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.12') C = matmul ( A , B , option = 'm12' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.13' ) C = matmul ( A , B , option = 'm13' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.14' ) C = matmul ( A , B , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.15' ) C = matmul ( A , B , option = 'm1' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.16' ) C = matmul ( A , B , option = 'm2' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.17' ) C = matmul ( A , B , option = 'm3' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.18' ) C = matmul ( A , B , option = 'm4' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.19' ) C = matmul ( A , B , option = 'm5' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.20' ) C = matmul ( A , B , option = 'm6' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.21' ) C = matmul ( A , B , option = 'm7' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.22' ) C = matmul ( A , B , option = 'm8' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.23' ) C = matmul ( A , B , option = 'm9' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.24' ) ! C = matmul(A,B, option='m10', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.25') ! C = matmul(A,B, option='m11', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.26') C = matmul ( A , B , option = 'm12' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.27' ) C = matmul ( A , B , option = 'm13' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.28' ) end program test_matmul3","tags":"","loc":"sourcefile/test1.f90.html"},{"title":"test5.f90 – ForMatmul","text":"This file depends on sourcefile~~test5.f90~~EfferentGraph sourcefile~test5.f90 test5.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul7 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(m,n).v(n) m = 100 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.1' ) w = matmul ( A , v , option = 'm1' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.2' ) w = matmul ( A , v , option = 'm2' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.3' ) w = matmul ( A , v , option = 'm3' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.4' ) w = matmul ( A , v , option = 'm4' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.5' ) w = matmul ( A , v , option = 'm5' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.6' ) w = matmul ( A , v , option = 'm6' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.7' ) ! w = matmul(A,v, option='m7') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.8') ! w = matmul(A,v, option='m8') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.9') w = matmul ( A , v , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.10' ) w = matmul ( A , v , option = 'm1' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.11' ) w = matmul ( A , v , option = 'm2' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.12' ) w = matmul ( A , v , option = 'm3' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.13' ) w = matmul ( A , v , option = 'm4' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.14' ) w = matmul ( A , v , option = 'm5' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.15' ) w = matmul ( A , v , option = 'm6' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.16' ) ! w = matmul(A,v, option='m7', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.17') ! w = matmul(A,v, option='m8', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.18') end program test_matmul7","tags":"","loc":"sourcefile/test5.f90.html"},{"title":"test2.f90 – ForMatmul","text":"This file depends on sourcefile~~test2.f90~~EfferentGraph sourcefile~test2.f90 test2.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul4 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.1' ) C = matmul ( A , B , option = 'm1' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.2' ) C = matmul ( A , B , option = 'm2' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.3' ) C = matmul ( A , B , option = 'm3' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.4' ) C = matmul ( A , B , option = 'm4' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.5' ) C = matmul ( A , B , option = 'm5' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.6' ) C = matmul ( A , B , option = 'm6' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.7' ) C = matmul ( A , B , option = 'm7' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.8' ) C = matmul ( A , B , option = 'm8' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.9' ) C = matmul ( A , B , option = 'm9' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.10' ) ! C = matmul(A,B, option='m10', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.11') ! C = matmul(A,B, option='m11', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.12') C = matmul ( A , B , option = 'm12' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.13' ) C = matmul ( A , B , option = 'm13' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.14' ) C = matmul ( A , B , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.24' ) ! C = matmul(A,B, option='m10', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.25') ! C = matmul(A,B, option='m11', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.26') C = matmul ( A , B , option = 'm12' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.28' ) end program test_matmul4","tags":"","loc":"sourcefile/test2.f90.html"},{"title":"formatmul_opts.f90 – ForMatmul","text":"This file depends on sourcefile~~formatmul_opts.f90~~EfferentGraph sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~formatmul_opts.f90~~AfferentGraph sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module formatmul_opts use kinds implicit none private public & mat_mat_rel_AB_opt , & mat_mat_rel_ATB_opt , & mat_mat_rel_ABT_opt , & mat_mat_rel_ATBT_opt , & mat_vec_rel_Av_opt , & mat_vec_rel_Atv_opt contains !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_AB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_AB_1 ( A , B , C ) case ( 'm2' ) call mm_AB_2 ( A , B , C ) case ( 'm3' ) call mm_AB_3 ( A , B , C ) case ( 'm4' ) call mm_AB_4 ( A , B , C ) case ( 'm5' ) call mm_AB_5 ( A , B , C ) case ( 'm6' ) call mm_AB_6 ( A , B , C ) case ( 'm7' ) call mm_AB_7 ( A , B , C ) case ( 'm8' ) call mm_AB_8 ( A , B , C ) case ( 'm9' ) call mm_AB_9 ( A , B , C ) case ( 'm10' ) call mm_AB_10 ( A , B , C ) case ( 'm11' ) call mm_AB_11 ( A , B , C ) case ( 'm12' ) call mm_AB_12 ( A , B , C ) case ( 'm13' ) call mm_AB_13 ( A , B , C ) end select end subroutine mat_mat_rel_AB_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATB_1 ( A , B , C ) case ( 'm2' ) call mm_ATB_2 ( A , B , C ) case ( 'm3' ) call mm_ATB_3 ( A , B , C ) case ( 'm4' ) call mm_ATB_4 ( A , B , C ) case ( 'm5' ) call mm_ATB_5 ( A , B , C ) case ( 'm6' ) call mm_ATB_6 ( A , B , C ) case ( 'm7' ) call mm_ATB_7 ( A , B , C ) case ( 'm8' ) call mm_ATB_8 ( A , B , C ) case ( 'm9' ) call mm_ATB_9 ( A , B , C ) case ( 'm10' ) call mm_ATB_10 ( A , B , C ) case ( 'm11' ) call mm_ATB_11 ( A , B , C ) case ( 'm12' ) call mm_ATB_12 ( A , B , C ) case ( 'm13' ) call mm_ATB_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATB_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ABT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ABT_1 ( A , B , C ) case ( 'm2' ) call mm_ABT_2 ( A , B , C ) case ( 'm3' ) call mm_ABT_3 ( A , B , C ) case ( 'm4' ) call mm_ABT_4 ( A , B , C ) case ( 'm5' ) call mm_ABT_5 ( A , B , C ) case ( 'm6' ) call mm_ABT_6 ( A , B , C ) case ( 'm7' ) call mm_ABT_7 ( A , B , C ) case ( 'm8' ) call mm_ABT_8 ( A , B , C ) case ( 'm9' ) call mm_ABT_9 ( A , B , C ) case ( 'm10' ) call mm_ABT_10 ( A , B , C ) case ( 'm11' ) call mm_ABT_11 ( A , B , C ) case ( 'm12' ) call mm_ABT_12 ( A , B , C ) case ( 'm13' ) call mm_ABT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ABT_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATBT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATBT_1 ( A , B , C ) case ( 'm2' ) call mm_ATBT_2 ( A , B , C ) case ( 'm3' ) call mm_ATBT_3 ( A , B , C ) case ( 'm4' ) call mm_ATBT_4 ( A , B , C ) case ( 'm5' ) call mm_ATBT_5 ( A , B , C ) case ( 'm6' ) call mm_ATBT_6 ( A , B , C ) case ( 'm7' ) call mm_ATBT_7 ( A , B , C ) case ( 'm8' ) call mm_ATBT_8 ( A , B , C ) case ( 'm9' ) call mm_ATBT_9 ( A , B , C ) case ( 'm10' ) call mm_ATBT_10 ( A , B , C ) case ( 'm11' ) call mm_ATBT_11 ( A , B , C ) case ( 'm12' ) call mm_ATBT_12 ( A , B , C ) case ( 'm13' ) call mm_ATBT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATBT_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_Av_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_Av_1 ( A , v , w ) case ( 'm2' ) call mv_Av_2 ( A , v , w ) case ( 'm3' ) call mv_Av_3 ( A , v , w ) case ( 'm4' ) call mv_Av_4 ( A , v , w ) case ( 'm5' ) call mv_Av_5 ( A , v , w ) case ( 'm6' ) call mv_Av_6 ( A , v , w ) case ( 'm7' ) call mv_Av_7 ( A , v , w ) case ( 'm8' ) call mv_Av_8 ( A , v , w ) end select end subroutine mat_vec_rel_Av_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_ATv_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_ATv_1 ( A , v , w ) case ( 'm2' ) call mv_ATv_2 ( A , v , w ) case ( 'm3' ) call mv_ATv_3 ( A , v , w ) case ( 'm4' ) call mv_ATv_4 ( A , v , w ) case ( 'm5' ) call mv_ATv_5 ( A , v , w ) case ( 'm6' ) call mv_ATv_6 ( A , v , w ) case ( 'm7' ) call mv_ATv_7 ( A , v , w ) case ( 'm8' ) call mv_ATv_8 ( A , v , w ) end select end subroutine mat_vec_rel_ATv_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , B ) end subroutine mm_AB_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 1 ) n = size ( A , 2 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , m , B , n , 0.0_rk , C , m ) end subroutine mm_AB_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( j , k ) end do end do end do end subroutine mm_AB_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( k , j ) end do end do end do end subroutine mm_AB_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( i , k ) end do end do end do end subroutine mm_AB_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( i , j ) end do end do end do end subroutine mm_AB_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( k , i ) end do end do end do end subroutine mm_AB_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( j , i ) end do end do end do end subroutine mm_AB_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do end subroutine mm_AB_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_AB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(:,i)) ! end do ! end do end subroutine mm_AB_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_AB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(j,i) ! end do ! end do ! end do end subroutine mm_AB_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12 end interface call impure_mm_AB_12 ( a , b , c ) end subroutine mm_AB_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13 end interface call impure_mm_AB_13 ( a , b , c ) end subroutine mm_AB_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), B ) end subroutine mm_ATB_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 2 ) n = size ( A , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , n , B , n , 0.0_rk , C , m ) end subroutine mm_ATB_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( j , k ) end do end do end do end subroutine mm_ATB_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( k , j ) end do end do end do end subroutine mm_ATB_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( i , k ) end do end do end do end subroutine mm_ATB_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( i , j ) end do end do end do end subroutine mm_ATB_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( k , i ) end do end do end do end subroutine mm_ATB_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( j , i ) end do end do end do end subroutine mm_ATB_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do end subroutine mm_ATB_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(:,i)) ! end do ! end do end subroutine mm_ATB_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(j,i) ! end do ! end do ! end do end subroutine mm_ATB_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12 end interface call impure_mm_ATB_12 ( a , b , c ) end subroutine mm_ATB_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13 end interface call impure_mm_ATB_13 ( a , b , c ) end subroutine mm_ATB_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , transpose ( B )) end subroutine mm_ABT_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p m = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'T' , m , p , size ( A , 2 ), 1.0_rk , A , m , B , p , 0.0_rk , C , m ) end subroutine mm_ABT_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( k , j ) end do end do end do end subroutine mm_ABT_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( j , k ) end do end do end do end subroutine mm_ABT_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( k , i ) end do end do end do end subroutine mm_ABT_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( j , i ) end do end do end do end subroutine mm_ABT_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( i , k ) end do end do end do end subroutine mm_ABT_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( i , j ) end do end do end do end subroutine mm_ABT_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do end subroutine mm_ABT_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(i,:)) ! end do ! end do end subroutine mm_ABT_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(i,j) ! end do ! end do ! end do end subroutine mm_ABT_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12 end interface call impure_mm_ABT_12 ( a , b , c ) end subroutine mm_ABT_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13 end interface call impure_mm_ABT_13 ( a , b , c ) end subroutine mm_ABT_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), transpose ( B )) end subroutine mm_ATBT_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'T' , m , p , n , 1.0_rk , A , n , B , p , 0.0_rk , C , m ) end subroutine mm_ATBT_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( k , j ) end do end do end do end subroutine mm_ATBT_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( j , k ) end do end do end do end subroutine mm_ATBT_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( k , i ) end do end do end do end subroutine mm_ATBT_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( j , i ) end do end do end do end subroutine mm_ATBT_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( i , k ) end do end do end do end subroutine mm_ATBT_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( i , j ) end do end do end do end subroutine mm_ATBT_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do end subroutine mm_ATBT_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(i,:)) ! end do ! end do end subroutine mm_ATBT_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(i,j) ! end do ! end do ! end do end subroutine mm_ATBT_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12 end interface call impure_mm_ATBT_12 ( a , b , c ) end subroutine mm_ATBT_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13 end interface call impure_mm_ATBT_13 ( a , b , c ) end subroutine mm_ATBT_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( A , v ) end subroutine mv_Av_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'N' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_Av_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 1 ) do k = 1 , m w ( k ) = dot_product ( a ( k ,:), v (:)) end do end subroutine mv_Av_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 2 ) do k = 1 , n w (:) = w (:) + a (:, k ) * v ( k ) end do end subroutine mv_Av_6 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_Av_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(k,:), v(:)) ! end do end subroutine mv_Av_7 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_Av_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(i,j)*v(j) ! end do ! end do end subroutine mv_Av_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( transpose ( A ), v ) end subroutine mv_ATv_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'T' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_ATv_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 2 ) do k = 1 , m w ( k ) = dot_product ( a (:, k ), v (:)) end do end subroutine mv_ATv_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 1 ) do k = 1 , n w (:) = w (:) + a ( k ,:) * v ( k ) end do end subroutine mv_ATv_6 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(:,k), v(:)) ! end do end subroutine mv_ATv_7 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(j,i)*v(j) ! end do ! end do end subroutine mv_ATv_8 !=============================================================================== end module formatmul_opts !> author: Seyed Ali Ghasemi impure subroutine impure_mm_AB_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_AB_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_AB_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_AB_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATB_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATB_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATB_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATB_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ABT_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ABT_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ABT_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ABT_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATBT_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATBT_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATBT_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATBT_13","tags":"","loc":"sourcefile/formatmul_opts.f90.html"},{"title":"test3.f90 – ForMatmul","text":"This file depends on sourcefile~~test3.f90~~EfferentGraph sourcefile~test3.f90 test3.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul5 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.1' ) C = matmul ( A , B , option = 'm1' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.2' ) C = matmul ( A , B , option = 'm2' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.3' ) C = matmul ( A , B , option = 'm3' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.4' ) C = matmul ( A , B , option = 'm4' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.5' ) C = matmul ( A , B , option = 'm5' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.6' ) C = matmul ( A , B , option = 'm6' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.7' ) C = matmul ( A , B , option = 'm7' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.8' ) C = matmul ( A , B , option = 'm8' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.9' ) C = matmul ( A , B , option = 'm9' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.10' ) ! C = matmul(A,B, option='m10', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.11') ! C = matmul(A,B, option='m11', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.12') C = matmul ( A , B , option = 'm12' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.13' ) C = matmul ( A , B , option = 'm13' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.14' ) C = matmul ( A , B , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.15' ) C = matmul ( A , B , option = 'm1' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.16' ) C = matmul ( A , B , option = 'm2' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.17' ) C = matmul ( A , B , option = 'm3' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.18' ) C = matmul ( A , B , option = 'm4' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.19' ) C = matmul ( A , B , option = 'm5' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.20' ) C = matmul ( A , B , option = 'm6' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.21' ) C = matmul ( A , B , option = 'm7' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.22' ) C = matmul ( A , B , option = 'm8' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.23' ) C = matmul ( A , B , option = 'm9' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.24' ) ! C = matmul(A,B, option='m10', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.25') ! C = matmul(A,B, option='m11', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.26') C = matmul ( A , B , option = 'm12' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.27' ) C = matmul ( A , B , option = 'm13' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.28' ) end program test_matmul5","tags":"","loc":"sourcefile/test3.f90.html"},{"title":"test10.f90 – ForMatmul","text":"This file depends on sourcefile~~test10.f90~~EfferentGraph sourcefile~test10.f90 test10.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul12 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.1' ) C = matmul ( A , B , option = 'm1' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.2' ) C = matmul ( A , B , option = 'm2' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.3' ) C = matmul ( A , B , option = 'm3' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.4' ) C = matmul ( A , B , option = 'm4' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.5' ) C = matmul ( A , B , option = 'm5' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.6' ) C = matmul ( A , B , option = 'm6' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.7' ) C = matmul ( A , B , option = 'm7' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.8' ) C = matmul ( A , B , option = 'm8' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.9' ) C = matmul ( A , B , option = 'm9' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.10' ) ! C = matmul(A,B, option='m10', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.11') ! C = matmul(A,B, option='m11', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.12') C = matmul ( A , B , option = 'm12' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.13' ) C = matmul ( A , B , option = 'm13' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.14' ) end program test_matmul12","tags":"","loc":"sourcefile/test10.f90.html"},{"title":"test7.f90 – ForMatmul","text":"This file depends on sourcefile~~test7.f90~~EfferentGraph sourcefile~test7.f90 test7.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul9 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(n) = v(m).A(m,n) m = 100 n = 300 allocate ( A ( m , n ), v ( m )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( v , A ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.18') end program test_matmul9","tags":"","loc":"sourcefile/test7.f90.html"},{"title":"test12.f90 – ForMatmul","text":"This file depends on sourcefile~~test12.f90~~EfferentGraph sourcefile~test12.f90 test12.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul14 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(m,n).v(n) m = 500 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.1' ) w = matmul ( A , v , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.2' ) w = matmul ( A , v , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.3' ) w = matmul ( A , v , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.4' ) w = matmul ( A , v , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.5' ) w = matmul ( A , v , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.6' ) w = matmul ( A , v , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.7' ) ! w = matmul(A,v, option='m7', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.8') ! w = matmul(A,v, option='m8', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.9') end program test_matmul14","tags":"","loc":"sourcefile/test12.f90.html"},{"title":"test6.f90 – ForMatmul","text":"This file depends on sourcefile~~test6.f90~~EfferentGraph sourcefile~test6.f90 test6.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul8 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.18') end program test_matmul8","tags":"","loc":"sourcefile/test6.f90.html"},{"title":"formatmul.f90 – ForMatmul","text":"This file depends on sourcefile~~formatmul.f90~~EfferentGraph sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~formatmul.f90~~AfferentGraph sourcefile~formatmul.f90 formatmul.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module formatmul use kinds use formatmul_opts implicit none private public matmul interface matmul procedure :: mat_mat_rel procedure :: mat_mat_block_rel procedure :: mat_mat_coarray_rel procedure :: mat_vec_rel procedure :: mat_vec_block_rel procedure :: mat_vec_coarray_rel ! procedure :: vec_mat_rel ! Ambiguous interface end interface matmul contains !=============================================================================== !> author: Seyed Ali Ghasemi impure function mat_mat_coarray_rel ( a , b , transA , transB , option , coarray ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB real ( rk ), allocatable :: c (:,:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: C_block (:,:)[:], B_block (:,:)[:], A_block (:,:)[:] if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B , transA = . true ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if end if #else C = matmul ( A , B , transA = transA , transB = transB , option = option ) #endif end function mat_mat_coarray_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi impure function mat_vec_coarray_rel ( A , v , transA , option , coarray ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA real ( rk ), allocatable :: w (:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: w_block (:)[:], v_block (:)[:], A_block (:,:)[:] if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:, :)[ im ], v , transA = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w ( start_elem ( i ): end_elem ( i )) = w_block (:)[ i ] end do end if else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if #else w = matmul ( A , v , transA = transA , option = option ) #endif end function mat_vec_coarray_rel !=============================================================================== !=============================================================================== !> Calculate block sizes and ranges. !> author: Seyed Ali Ghasemi pure subroutine compute_block_ranges ( d , nimg , block_size , start_elem , end_elem ) integer , intent ( in ) :: d , nimg integer , intent ( out ) :: block_size ( nimg ), start_elem ( nimg ), end_elem ( nimg ) integer :: i , remainder block_size = d / nimg remainder = mod ( d , nimg ) block_size ( 1 : remainder ) = block_size ( 1 : remainder ) + 1 start_elem ( 1 ) = 1 do i = 2 , nimg start_elem ( i ) = start_elem ( i - 1 ) + block_size ( i - 1 ) end do end_elem ( 1 ) = block_size ( 1 ) end_elem ( 2 :) = start_elem ( 2 :) + block_size ( 2 :) - 1 ! Check if the block sizes are valid. if ( minval ( block_size ) <= 0 ) error stop 'ForDot: reduce the number of images of coarray.' end subroutine compute_block_ranges !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_mat_block_rel ( a , b , transA , transB , option , nblock ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) logical , intent ( in ), optional :: transA , transB character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: c (:,:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #endif else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : C ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif end if end function mat_mat_block_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_vec_block_rel ( A , v , transA , option , nblock ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) logical , intent ( in ), optional :: transA character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: w (:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #endif else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) reduce ( + : w ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if end function mat_vec_block_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_mat_rel ( A , B , transA , transB , option ) result ( C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), allocatable :: C (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ATBT ( A , B , C , option ) else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) end if end function mat_mat_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_vec_rel ( A , v , transA , option ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), allocatable :: w (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call mat_vec_rel_ATv ( A , v , w , option ) else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if end function mat_vec_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_AB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_AB_opt ( A , B , C , option ) else call mat_mat_rel_AB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_AB !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATB_opt ( A , B , C , option ) else call mat_mat_rel_ATB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATB !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ABT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ABT_opt ( A , B , C , option ) else call mat_mat_rel_ABT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ABT !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATBT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATBT_opt ( A , B , C , option ) else call mat_mat_rel_ATBT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATBT !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_Av ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_Av_opt ( A , v , w , option ) else call mat_vec_rel_Av_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_Av !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_ATv ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_ATv_opt ( A , v , w , option ) else call mat_vec_rel_ATv_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_ATv !=============================================================================== ! ! Ambiguous interface ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure function vec_mat_rel(v, A, transA, option) result(w) ! real(rk), intent(in), contiguous :: v(:), A(:,:) ! real(rk), allocatable :: w(:) ! character(*), intent(in), optional :: option ! logical, intent(in), optional :: transA ! if (present(transA)) then ! if (transA) then ! ! ATv ! allocate(w(size(A,1)), source=0.0_rk) ! call vec_mat_rel_ATv(v, A, w, option) ! else if (.not. transA) then ! ! Av ! allocate(w(size(A,2)), source=0.0_rk) ! call vec_mat_rel_Av(v, A, w, option) ! end if ! else if (.not. present(transA)) then ! ! Av ! allocate(w(size(A,2)), source=0.0_rk) ! call vec_mat_rel_Av(v, A, w, option) ! end if ! end function vec_mat_rel ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_Av(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in), optional :: option ! if (present(option)) then ! call vec_mat_rel_Av_opt(v, A, w, option) ! else ! call vec_mat_rel_Av_opt(v, A, w, 'm2') ! end if ! end subroutine vec_mat_rel_Av ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_ATv(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in), optional :: option ! if (present(option)) then ! call vec_mat_rel_ATv_opt(v, A, w, option) ! else ! call vec_mat_rel_ATv_opt(v, A, w, 'm2') ! end if ! end subroutine vec_mat_rel_ATv ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_Av_opt(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in) :: option ! ! select case (option) ! ! case ('m1') ! ! call vm_vA_1(v, A, w) ! ! case ('m2') ! ! call vm_vA_2(v, A, w) ! ! case ('m3') ! ! call vm_vA_3(v, A, w) ! ! case ('m4') ! ! call vm_vA_4(v, A, w) ! ! case ('m5') ! ! call vm_vA_5(v, A, w) ! ! case ('m6') ! ! call vm_vA_6(v, A, w) ! ! case ('m7') ! ! call vm_vA_7(v, A, w) ! ! case ('m8') ! ! call vm_vA_8(v, A, w) ! ! end select ! end subroutine vec_mat_rel_Av_opt ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_ATv_opt(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in) :: option ! ! select case (option) ! ! case ('m1') ! ! call vm_vAT_1(v, A, w) ! ! case ('m2') ! ! call vm_vAT_2(v, A, w) ! ! case ('m3') ! ! call vm_vAT_3(v, A, w) ! ! case ('m4') ! ! call vm_vAT_4(v, A, w) ! ! case ('m5') ! ! call vm_vAT_5(v, A, w) ! ! case ('m6') ! ! call vm_vAT_6(v, A, w) ! ! case ('m7') ! ! call vm_vAT_7(v, A, w) ! ! case ('m8') ! ! call vm_vAT_8(v, A, w) ! ! end select ! end subroutine vec_mat_rel_ATv_opt ! !=============================================================================== end module formatmul","tags":"","loc":"sourcefile/formatmul.f90.html"},{"title":"test9.f90 – ForMatmul","text":"This file depends on sourcefile~~test9.f90~~EfferentGraph sourcefile~test9.f90 test9.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul11 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.10' ) ! C = matmul(A,B, option='m10', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.11') ! C = matmul(A,B, option='m11', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.12') C = matmul ( A , B , option = 'm12' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.14' ) end program test_matmul11","tags":"","loc":"sourcefile/test9.f90.html"},{"title":"test8.f90 – ForMatmul","text":"This file depends on sourcefile~~test8.f90~~EfferentGraph sourcefile~test8.f90 test8.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul10 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.1' ) C = matmul ( A , B , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.2' ) C = matmul ( A , B , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.3' ) C = matmul ( A , B , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.4' ) C = matmul ( A , B , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.5' ) C = matmul ( A , B , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.6' ) C = matmul ( A , B , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.7' ) C = matmul ( A , B , option = 'm7' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.8' ) C = matmul ( A , B , option = 'm8' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.9' ) C = matmul ( A , B , option = 'm9' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.10' ) ! C = matmul(A,B, option='m10', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.11') ! C = matmul(A,B, option='m11', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.12') C = matmul ( A , B , option = 'm12' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.13' ) C = matmul ( A , B , option = 'm13' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.14' ) end program test_matmul10","tags":"","loc":"sourcefile/test8.f90.html"},{"title":"test13.f90 – ForMatmul","text":"This file depends on sourcefile~~test13.f90~~EfferentGraph sourcefile~test13.f90 test13.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul15 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.1' ) w = matmul ( A , v , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.2' ) w = matmul ( A , v , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.3' ) w = matmul ( A , v , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.4' ) w = matmul ( A , v , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.5' ) w = matmul ( A , v , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.6' ) w = matmul ( A , v , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.7' ) ! w = matmul(A,v, option='m7', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.8') ! w = matmul(A,v, option='m8', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.9') end program test_matmul15","tags":"","loc":"sourcefile/test13.f90.html"}]} \ No newline at end of file +var tipuesearch = {"pages":[{"title":" ForMatmul ","text":"ForMatmul ForMatmul : A Fortran library that overloads the matmul function to enable efficient matrix multiplication with/without coarray. Usage use formatmul c = matmul ( a , b , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) fpm dependency If you want to use ForMatmul as a dependency in your own fpm project,\nyou can easily include it by adding the following line to your fpm.toml file: [dependencies] formatmul = { git = \"https://github.com/gha3mi/formatmul.git\" } How to run tests Clone the repository: You can clone the ForMatmul repository from GitHub using the following command: git clone https://github.com/gha3mi/formatmul.git cd formatmul Tested with Intel compiler: ifort (IFORT) 2021.10.0 20230609 fpm @ifort-test fpm @ifort-test-coarray Tested with Intel compiler: ifx (IFX) 2023.2.0 20230622 fpm @ifx-test fpm @ifx-test-coarray Tested with NVIDIA compiler: nvfortran 23.11-0 64-bit target on x86-64 Linux fpm @nvfortran-test Benchmarks You can find benchmark results on ForBenchmark . API documentation The most up-to-date API documentation for the master branch is available here .\nTo generate the API documentation for ForMatmul using ford run the following\ncommand: ford ford.yml Contributing Contributions to ForMatmul are welcome!\nIf you find any issues or would like to suggest improvements, please open an issue. Developer Info Seyed Ali Ghasemi","tags":"home","loc":"index.html"},{"title":"impure_mm_AB_12 – ForMatmul","text":"impure subroutine impure_mm_AB_12(a, b, c) Uses kinds proc~~impure_mm_ab_12~~UsesGraph proc~impure_mm_ab_12 formatmul_opts.f90::impure_mm_AB_12 kinds kinds proc~impure_mm_ab_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12","tags":"","loc":"proc/impure_mm_ab_12.html"},{"title":"impure_mm_AB_13 – ForMatmul","text":"impure subroutine impure_mm_AB_13(a, b, c) Uses kinds proc~~impure_mm_ab_13~~UsesGraph proc~impure_mm_ab_13 formatmul_opts.f90::impure_mm_AB_13 kinds kinds proc~impure_mm_ab_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13","tags":"","loc":"proc/impure_mm_ab_13.html"},{"title":"impure_mm_ATB_12 – ForMatmul","text":"impure subroutine impure_mm_ATB_12(a, b, c) Uses kinds proc~~impure_mm_atb_12~~UsesGraph proc~impure_mm_atb_12 formatmul_opts.f90::impure_mm_ATB_12 kinds kinds proc~impure_mm_atb_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12","tags":"","loc":"proc/impure_mm_atb_12.html"},{"title":"impure_mm_ATB_13 – ForMatmul","text":"impure subroutine impure_mm_ATB_13(a, b, c) Uses kinds proc~~impure_mm_atb_13~~UsesGraph proc~impure_mm_atb_13 formatmul_opts.f90::impure_mm_ATB_13 kinds kinds proc~impure_mm_atb_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13","tags":"","loc":"proc/impure_mm_atb_13.html"},{"title":"impure_mm_ABT_12 – ForMatmul","text":"impure subroutine impure_mm_ABT_12(a, b, c) Uses kinds proc~~impure_mm_abt_12~~UsesGraph proc~impure_mm_abt_12 formatmul_opts.f90::impure_mm_ABT_12 kinds kinds proc~impure_mm_abt_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12","tags":"","loc":"proc/impure_mm_abt_12.html"},{"title":"impure_mm_ABT_13 – ForMatmul","text":"impure subroutine impure_mm_ABT_13(a, b, c) Uses kinds proc~~impure_mm_abt_13~~UsesGraph proc~impure_mm_abt_13 formatmul_opts.f90::impure_mm_ABT_13 kinds kinds proc~impure_mm_abt_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13","tags":"","loc":"proc/impure_mm_abt_13.html"},{"title":"impure_mm_ATBT_12 – ForMatmul","text":"impure subroutine impure_mm_ATBT_12(a, b, c) Uses kinds proc~~impure_mm_atbt_12~~UsesGraph proc~impure_mm_atbt_12 formatmul_opts.f90::impure_mm_ATBT_12 kinds kinds proc~impure_mm_atbt_12->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12","tags":"","loc":"proc/impure_mm_atbt_12.html"},{"title":"impure_mm_ATBT_13 – ForMatmul","text":"impure subroutine impure_mm_ATBT_13(a, b, c) Uses kinds proc~~impure_mm_atbt_13~~UsesGraph proc~impure_mm_atbt_13 formatmul_opts.f90::impure_mm_ATBT_13 kinds kinds proc~impure_mm_atbt_13->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in) :: a (:,:) real(kind=rk), intent(in) :: b (:,:) real(kind=rk), intent(inout) :: c (:,:) Source Code pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13","tags":"","loc":"proc/impure_mm_atbt_13.html"},{"title":"mat_mat_rel_AB_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_AB_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_ab_opt~~CallsGraph proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_ab_opt~~CalledByGraph proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_AB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_AB_1 ( A , B , C ) case ( 'm2' ) call mm_AB_2 ( A , B , C ) case ( 'm3' ) call mm_AB_3 ( A , B , C ) case ( 'm4' ) call mm_AB_4 ( A , B , C ) case ( 'm5' ) call mm_AB_5 ( A , B , C ) case ( 'm6' ) call mm_AB_6 ( A , B , C ) case ( 'm7' ) call mm_AB_7 ( A , B , C ) case ( 'm8' ) call mm_AB_8 ( A , B , C ) case ( 'm9' ) call mm_AB_9 ( A , B , C ) case ( 'm10' ) call mm_AB_10 ( A , B , C ) case ( 'm11' ) call mm_AB_11 ( A , B , C ) case ( 'm12' ) call mm_AB_12 ( A , B , C ) case ( 'm13' ) call mm_AB_13 ( A , B , C ) end select end subroutine mat_mat_rel_AB_opt","tags":"","loc":"proc/mat_mat_rel_ab_opt.html"},{"title":"mat_mat_rel_ATB_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ATB_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_atb_opt~~CallsGraph proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atb_opt~~CalledByGraph proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATB_1 ( A , B , C ) case ( 'm2' ) call mm_ATB_2 ( A , B , C ) case ( 'm3' ) call mm_ATB_3 ( A , B , C ) case ( 'm4' ) call mm_ATB_4 ( A , B , C ) case ( 'm5' ) call mm_ATB_5 ( A , B , C ) case ( 'm6' ) call mm_ATB_6 ( A , B , C ) case ( 'm7' ) call mm_ATB_7 ( A , B , C ) case ( 'm8' ) call mm_ATB_8 ( A , B , C ) case ( 'm9' ) call mm_ATB_9 ( A , B , C ) case ( 'm10' ) call mm_ATB_10 ( A , B , C ) case ( 'm11' ) call mm_ATB_11 ( A , B , C ) case ( 'm12' ) call mm_ATB_12 ( A , B , C ) case ( 'm13' ) call mm_ATB_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATB_opt","tags":"","loc":"proc/mat_mat_rel_atb_opt.html"},{"title":"mat_mat_rel_ABT_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ABT_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_abt_opt~~CallsGraph proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_abt_opt~~CalledByGraph proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ABT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ABT_1 ( A , B , C ) case ( 'm2' ) call mm_ABT_2 ( A , B , C ) case ( 'm3' ) call mm_ABT_3 ( A , B , C ) case ( 'm4' ) call mm_ABT_4 ( A , B , C ) case ( 'm5' ) call mm_ABT_5 ( A , B , C ) case ( 'm6' ) call mm_ABT_6 ( A , B , C ) case ( 'm7' ) call mm_ABT_7 ( A , B , C ) case ( 'm8' ) call mm_ABT_8 ( A , B , C ) case ( 'm9' ) call mm_ABT_9 ( A , B , C ) case ( 'm10' ) call mm_ABT_10 ( A , B , C ) case ( 'm11' ) call mm_ABT_11 ( A , B , C ) case ( 'm12' ) call mm_ABT_12 ( A , B , C ) case ( 'm13' ) call mm_ABT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ABT_opt","tags":"","loc":"proc/mat_mat_rel_abt_opt.html"},{"title":"mat_mat_rel_ATBT_opt – ForMatmul","text":"public pure subroutine mat_mat_rel_ATBT_opt(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option Calls proc~~mat_mat_rel_atbt_opt~~CallsGraph proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atbt_opt~~CalledByGraph proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATBT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATBT_1 ( A , B , C ) case ( 'm2' ) call mm_ATBT_2 ( A , B , C ) case ( 'm3' ) call mm_ATBT_3 ( A , B , C ) case ( 'm4' ) call mm_ATBT_4 ( A , B , C ) case ( 'm5' ) call mm_ATBT_5 ( A , B , C ) case ( 'm6' ) call mm_ATBT_6 ( A , B , C ) case ( 'm7' ) call mm_ATBT_7 ( A , B , C ) case ( 'm8' ) call mm_ATBT_8 ( A , B , C ) case ( 'm9' ) call mm_ATBT_9 ( A , B , C ) case ( 'm10' ) call mm_ATBT_10 ( A , B , C ) case ( 'm11' ) call mm_ATBT_11 ( A , B , C ) case ( 'm12' ) call mm_ATBT_12 ( A , B , C ) case ( 'm13' ) call mm_ATBT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATBT_opt","tags":"","loc":"proc/mat_mat_rel_atbt_opt.html"},{"title":"mat_vec_rel_Av_opt – ForMatmul","text":"public pure subroutine mat_vec_rel_Av_opt(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option Calls proc~~mat_vec_rel_av_opt~~CallsGraph proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_av_opt~~CalledByGraph proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_Av_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_Av_1 ( A , v , w ) case ( 'm2' ) call mv_Av_2 ( A , v , w ) case ( 'm3' ) call mv_Av_3 ( A , v , w ) case ( 'm4' ) call mv_Av_4 ( A , v , w ) case ( 'm5' ) call mv_Av_5 ( A , v , w ) case ( 'm6' ) call mv_Av_6 ( A , v , w ) case ( 'm7' ) call mv_Av_7 ( A , v , w ) case ( 'm8' ) call mv_Av_8 ( A , v , w ) end select end subroutine mat_vec_rel_Av_opt","tags":"","loc":"proc/mat_vec_rel_av_opt.html"},{"title":"mat_vec_rel_ATv_opt – ForMatmul","text":"public pure subroutine mat_vec_rel_ATv_opt(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option Calls proc~~mat_vec_rel_atv_opt~~CallsGraph proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_atv_opt~~CalledByGraph proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_ATv_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_ATv_1 ( A , v , w ) case ( 'm2' ) call mv_ATv_2 ( A , v , w ) case ( 'm3' ) call mv_ATv_3 ( A , v , w ) case ( 'm4' ) call mv_ATv_4 ( A , v , w ) case ( 'm5' ) call mv_ATv_5 ( A , v , w ) case ( 'm6' ) call mv_ATv_6 ( A , v , w ) case ( 'm7' ) call mv_ATv_7 ( A , v , w ) case ( 'm8' ) call mv_ATv_8 ( A , v , w ) end select end subroutine mat_vec_rel_ATv_opt","tags":"","loc":"proc/mat_vec_rel_atv_opt.html"},{"title":"mm_AB_1 – ForMatmul","text":"private pure subroutine mm_AB_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_1~~CalledByGraph proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , B ) end subroutine mm_AB_1","tags":"","loc":"proc/mm_ab_1.html"},{"title":"mm_AB_2 – ForMatmul","text":"private pure subroutine mm_AB_2(A, B, C) Uses external_interfaces_matmul proc~~mm_ab_2~~UsesGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_ab_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_ab_2~~CallsGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_ab_2~~CalledByGraph proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 1 ) n = size ( A , 2 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , m , B , n , 0.0_rk , C , m ) end subroutine mm_AB_2","tags":"","loc":"proc/mm_ab_2.html"},{"title":"mm_AB_3 – ForMatmul","text":"private pure subroutine mm_AB_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_3~~CalledByGraph proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( j , k ) end do end do end do end subroutine mm_AB_3","tags":"","loc":"proc/mm_ab_3.html"},{"title":"mm_AB_4 – ForMatmul","text":"private pure subroutine mm_AB_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_4~~CalledByGraph proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( k , j ) end do end do end do end subroutine mm_AB_4","tags":"","loc":"proc/mm_ab_4.html"},{"title":"mm_AB_5 – ForMatmul","text":"private pure subroutine mm_AB_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_5~~CalledByGraph proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( i , k ) end do end do end do end subroutine mm_AB_5","tags":"","loc":"proc/mm_ab_5.html"},{"title":"mm_AB_6 – ForMatmul","text":"private pure subroutine mm_AB_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_6~~CalledByGraph proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( i , j ) end do end do end do end subroutine mm_AB_6","tags":"","loc":"proc/mm_ab_6.html"},{"title":"mm_AB_7 – ForMatmul","text":"private pure subroutine mm_AB_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_7~~CalledByGraph proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( k , i ) end do end do end do end subroutine mm_AB_7","tags":"","loc":"proc/mm_ab_7.html"},{"title":"mm_AB_8 – ForMatmul","text":"private pure subroutine mm_AB_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_8~~CalledByGraph proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( j , i ) end do end do end do end subroutine mm_AB_8","tags":"","loc":"proc/mm_ab_8.html"},{"title":"mm_AB_9 – ForMatmul","text":"private pure subroutine mm_AB_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_9~~CalledByGraph proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do end subroutine mm_AB_9","tags":"","loc":"proc/mm_ab_9.html"},{"title":"mm_AB_10 – ForMatmul","text":"private pure subroutine mm_AB_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_10~~CalledByGraph proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(:,i)) ! end do ! end do end subroutine mm_AB_10","tags":"","loc":"proc/mm_ab_10.html"},{"title":"mm_AB_11 – ForMatmul","text":"private pure subroutine mm_AB_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_11~~CalledByGraph proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(j,i) ! end do ! end do ! end do end subroutine mm_AB_11","tags":"","loc":"proc/mm_ab_11.html"},{"title":"mm_AB_12 – ForMatmul","text":"private pure subroutine mm_AB_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_12~~CalledByGraph proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12 end interface call impure_mm_AB_12 ( a , b , c ) end subroutine mm_AB_12","tags":"","loc":"proc/mm_ab_12.html"},{"title":"mm_AB_13 – ForMatmul","text":"private pure subroutine mm_AB_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_ab_13~~CalledByGraph proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_AB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13 end interface call impure_mm_AB_13 ( a , b , c ) end subroutine mm_AB_13","tags":"","loc":"proc/mm_ab_13.html"},{"title":"mm_ATB_1 – ForMatmul","text":"private pure subroutine mm_ATB_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_1~~CalledByGraph proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), B ) end subroutine mm_ATB_1","tags":"","loc":"proc/mm_atb_1.html"},{"title":"mm_ATB_2 – ForMatmul","text":"private pure subroutine mm_ATB_2(A, B, C) Uses external_interfaces_matmul proc~~mm_atb_2~~UsesGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_atb_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_atb_2~~CallsGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_atb_2~~CalledByGraph proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 2 ) n = size ( A , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , n , B , n , 0.0_rk , C , m ) end subroutine mm_ATB_2","tags":"","loc":"proc/mm_atb_2.html"},{"title":"mm_ATB_3 – ForMatmul","text":"private pure subroutine mm_ATB_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_3~~CalledByGraph proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( j , k ) end do end do end do end subroutine mm_ATB_3","tags":"","loc":"proc/mm_atb_3.html"},{"title":"mm_ATB_4 – ForMatmul","text":"private pure subroutine mm_ATB_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_4~~CalledByGraph proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( k , j ) end do end do end do end subroutine mm_ATB_4","tags":"","loc":"proc/mm_atb_4.html"},{"title":"mm_ATB_5 – ForMatmul","text":"private pure subroutine mm_ATB_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_5~~CalledByGraph proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( i , k ) end do end do end do end subroutine mm_ATB_5","tags":"","loc":"proc/mm_atb_5.html"},{"title":"mm_ATB_6 – ForMatmul","text":"private pure subroutine mm_ATB_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_6~~CalledByGraph proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( i , j ) end do end do end do end subroutine mm_ATB_6","tags":"","loc":"proc/mm_atb_6.html"},{"title":"mm_ATB_7 – ForMatmul","text":"private pure subroutine mm_ATB_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_7~~CalledByGraph proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( k , i ) end do end do end do end subroutine mm_ATB_7","tags":"","loc":"proc/mm_atb_7.html"},{"title":"mm_ATB_8 – ForMatmul","text":"private pure subroutine mm_ATB_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_8~~CalledByGraph proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( j , i ) end do end do end do end subroutine mm_ATB_8","tags":"","loc":"proc/mm_atb_8.html"},{"title":"mm_ATB_9 – ForMatmul","text":"private pure subroutine mm_ATB_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_9~~CalledByGraph proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do end subroutine mm_ATB_9","tags":"","loc":"proc/mm_atb_9.html"},{"title":"mm_ATB_10 – ForMatmul","text":"private pure subroutine mm_ATB_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_10~~CalledByGraph proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(:,i)) ! end do ! end do end subroutine mm_ATB_10","tags":"","loc":"proc/mm_atb_10.html"},{"title":"mm_ATB_11 – ForMatmul","text":"private pure subroutine mm_ATB_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_11~~CalledByGraph proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(j,i) ! end do ! end do ! end do end subroutine mm_ATB_11","tags":"","loc":"proc/mm_atb_11.html"},{"title":"mm_ATB_12 – ForMatmul","text":"private pure subroutine mm_ATB_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_12~~CalledByGraph proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12 end interface call impure_mm_ATB_12 ( a , b , c ) end subroutine mm_ATB_12","tags":"","loc":"proc/mm_atb_12.html"},{"title":"mm_ATB_13 – ForMatmul","text":"private pure subroutine mm_ATB_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atb_13~~CalledByGraph proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13 end interface call impure_mm_ATB_13 ( a , b , c ) end subroutine mm_ATB_13","tags":"","loc":"proc/mm_atb_13.html"},{"title":"mm_ABT_1 – ForMatmul","text":"private pure subroutine mm_ABT_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_1~~CalledByGraph proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , transpose ( B )) end subroutine mm_ABT_1","tags":"","loc":"proc/mm_abt_1.html"},{"title":"mm_ABT_2 – ForMatmul","text":"private pure subroutine mm_ABT_2(A, B, C) Uses external_interfaces_matmul proc~~mm_abt_2~~UsesGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_abt_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_abt_2~~CallsGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_abt_2~~CalledByGraph proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p m = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'T' , m , p , size ( A , 2 ), 1.0_rk , A , m , B , p , 0.0_rk , C , m ) end subroutine mm_ABT_2","tags":"","loc":"proc/mm_abt_2.html"},{"title":"mm_ABT_3 – ForMatmul","text":"private pure subroutine mm_ABT_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_3~~CalledByGraph proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( k , j ) end do end do end do end subroutine mm_ABT_3","tags":"","loc":"proc/mm_abt_3.html"},{"title":"mm_ABT_4 – ForMatmul","text":"private pure subroutine mm_ABT_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_4~~CalledByGraph proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( j , k ) end do end do end do end subroutine mm_ABT_4","tags":"","loc":"proc/mm_abt_4.html"},{"title":"mm_ABT_5 – ForMatmul","text":"private pure subroutine mm_ABT_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_5~~CalledByGraph proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( k , i ) end do end do end do end subroutine mm_ABT_5","tags":"","loc":"proc/mm_abt_5.html"},{"title":"mm_ABT_6 – ForMatmul","text":"private pure subroutine mm_ABT_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_6~~CalledByGraph proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( j , i ) end do end do end do end subroutine mm_ABT_6","tags":"","loc":"proc/mm_abt_6.html"},{"title":"mm_ABT_7 – ForMatmul","text":"private pure subroutine mm_ABT_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_7~~CalledByGraph proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( i , k ) end do end do end do end subroutine mm_ABT_7","tags":"","loc":"proc/mm_abt_7.html"},{"title":"mm_ABT_8 – ForMatmul","text":"private pure subroutine mm_ABT_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_8~~CalledByGraph proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( i , j ) end do end do end do end subroutine mm_ABT_8","tags":"","loc":"proc/mm_abt_8.html"},{"title":"mm_ABT_9 – ForMatmul","text":"private pure subroutine mm_ABT_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_9~~CalledByGraph proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do end subroutine mm_ABT_9","tags":"","loc":"proc/mm_abt_9.html"},{"title":"mm_ABT_10 – ForMatmul","text":"private pure subroutine mm_ABT_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_10~~CalledByGraph proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(i,:)) ! end do ! end do end subroutine mm_ABT_10","tags":"","loc":"proc/mm_abt_10.html"},{"title":"mm_ABT_11 – ForMatmul","text":"private pure subroutine mm_ABT_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_11~~CalledByGraph proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(i,j) ! end do ! end do ! end do end subroutine mm_ABT_11","tags":"","loc":"proc/mm_abt_11.html"},{"title":"mm_ABT_12 – ForMatmul","text":"private pure subroutine mm_ABT_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_12~~CalledByGraph proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12 end interface call impure_mm_ABT_12 ( a , b , c ) end subroutine mm_ABT_12","tags":"","loc":"proc/mm_abt_12.html"},{"title":"mm_ABT_13 – ForMatmul","text":"private pure subroutine mm_ABT_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_abt_13~~CalledByGraph proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ABT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13 end interface call impure_mm_ABT_13 ( a , b , c ) end subroutine mm_ABT_13","tags":"","loc":"proc/mm_abt_13.html"},{"title":"mm_ATBT_1 – ForMatmul","text":"private pure subroutine mm_ATBT_1(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_1~~CalledByGraph proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), transpose ( B )) end subroutine mm_ATBT_1","tags":"","loc":"proc/mm_atbt_1.html"},{"title":"mm_ATBT_2 – ForMatmul","text":"private pure subroutine mm_ATBT_2(A, B, C) Uses external_interfaces_matmul proc~~mm_atbt_2~~UsesGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 module~external_interfaces_matmul external_interfaces_matmul proc~mm_atbt_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Calls proc~~mm_atbt_2~~CallsGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mm_atbt_2~~CalledByGraph proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'T' , m , p , n , 1.0_rk , A , n , B , p , 0.0_rk , C , m ) end subroutine mm_ATBT_2","tags":"","loc":"proc/mm_atbt_2.html"},{"title":"mm_ATBT_3 – ForMatmul","text":"private pure subroutine mm_ATBT_3(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_3~~CalledByGraph proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( k , j ) end do end do end do end subroutine mm_ATBT_3","tags":"","loc":"proc/mm_atbt_3.html"},{"title":"mm_ATBT_4 – ForMatmul","text":"private pure subroutine mm_ATBT_4(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_4~~CalledByGraph proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( j , k ) end do end do end do end subroutine mm_ATBT_4","tags":"","loc":"proc/mm_atbt_4.html"},{"title":"mm_ATBT_5 – ForMatmul","text":"private pure subroutine mm_ATBT_5(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_5~~CalledByGraph proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( k , i ) end do end do end do end subroutine mm_ATBT_5","tags":"","loc":"proc/mm_atbt_5.html"},{"title":"mm_ATBT_6 – ForMatmul","text":"private pure subroutine mm_ATBT_6(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_6~~CalledByGraph proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( j , i ) end do end do end do end subroutine mm_ATBT_6","tags":"","loc":"proc/mm_atbt_6.html"},{"title":"mm_ATBT_7 – ForMatmul","text":"private pure subroutine mm_ATBT_7(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_7~~CalledByGraph proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( i , k ) end do end do end do end subroutine mm_ATBT_7","tags":"","loc":"proc/mm_atbt_7.html"},{"title":"mm_ATBT_8 – ForMatmul","text":"private pure subroutine mm_ATBT_8(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_8~~CalledByGraph proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( i , j ) end do end do end do end subroutine mm_ATBT_8","tags":"","loc":"proc/mm_atbt_8.html"},{"title":"mm_ATBT_9 – ForMatmul","text":"private pure subroutine mm_ATBT_9(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_9~~CalledByGraph proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do end subroutine mm_ATBT_9","tags":"","loc":"proc/mm_atbt_9.html"},{"title":"mm_ATBT_10 – ForMatmul","text":"private pure subroutine mm_ATBT_10(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_10~~CalledByGraph proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(i,:)) ! end do ! end do end subroutine mm_ATBT_10","tags":"","loc":"proc/mm_atbt_10.html"},{"title":"mm_ATBT_11 – ForMatmul","text":"private pure subroutine mm_ATBT_11(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_11~~CalledByGraph proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(i,j) ! end do ! end do ! end do end subroutine mm_ATBT_11","tags":"","loc":"proc/mm_atbt_11.html"},{"title":"mm_ATBT_12 – ForMatmul","text":"private pure subroutine mm_ATBT_12(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_12~~CalledByGraph proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12 end interface call impure_mm_ATBT_12 ( a , b , c ) end subroutine mm_ATBT_12","tags":"","loc":"proc/mm_atbt_12.html"},{"title":"mm_ATBT_13 – ForMatmul","text":"private pure subroutine mm_ATBT_13(A, B, C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) Called by proc~~mm_atbt_13~~CalledByGraph proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mm_ATBT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13 end interface call impure_mm_ATBT_13 ( a , b , c ) end subroutine mm_ATBT_13","tags":"","loc":"proc/mm_atbt_13.html"},{"title":"mv_Av_1 – ForMatmul","text":"private pure subroutine mv_Av_1(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_1~~CalledByGraph proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( A , v ) end subroutine mv_Av_1","tags":"","loc":"proc/mv_av_1.html"},{"title":"mv_Av_2 – ForMatmul","text":"private pure subroutine mv_Av_2(A, v, w) Uses external_interfaces_matmul proc~~mv_av_2~~UsesGraph proc~mv_av_2 formatmul_opts::mv_Av_2 module~external_interfaces_matmul external_interfaces_matmul proc~mv_av_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Calls proc~~mv_av_2~~CallsGraph proc~mv_av_2 formatmul_opts::mv_Av_2 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mv_av_2~~CalledByGraph proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'N' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_Av_2","tags":"","loc":"proc/mv_av_2.html"},{"title":"mv_Av_3 – ForMatmul","text":"private pure subroutine mv_Av_3(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_3~~CalledByGraph proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_3","tags":"","loc":"proc/mv_av_3.html"},{"title":"mv_Av_4 – ForMatmul","text":"private pure subroutine mv_Av_4(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_4~~CalledByGraph proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_4","tags":"","loc":"proc/mv_av_4.html"},{"title":"mv_Av_5 – ForMatmul","text":"private pure subroutine mv_Av_5(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_5~~CalledByGraph proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 1 ) do k = 1 , m w ( k ) = dot_product ( a ( k ,:), v (:)) end do end subroutine mv_Av_5","tags":"","loc":"proc/mv_av_5.html"},{"title":"mv_Av_6 – ForMatmul","text":"private pure subroutine mv_Av_6(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_6~~CalledByGraph proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 2 ) do k = 1 , n w (:) = w (:) + a (:, k ) * v ( k ) end do end subroutine mv_Av_6","tags":"","loc":"proc/mv_av_6.html"},{"title":"mv_Av_7 – ForMatmul","text":"private pure subroutine mv_Av_7(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_7~~CalledByGraph proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(k,:), v(:)) ! end do end subroutine mv_Av_7","tags":"","loc":"proc/mv_av_7.html"},{"title":"mv_Av_8 – ForMatmul","text":"private pure subroutine mv_Av_8(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_av_8~~CalledByGraph proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_8 proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_Av_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(i,j)*v(j) ! end do ! end do end subroutine mv_Av_8","tags":"","loc":"proc/mv_av_8.html"},{"title":"mv_ATv_1 – ForMatmul","text":"private pure subroutine mv_ATv_1(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_1~~CalledByGraph proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( transpose ( A ), v ) end subroutine mv_ATv_1","tags":"","loc":"proc/mv_atv_1.html"},{"title":"mv_ATv_2 – ForMatmul","text":"private pure subroutine mv_ATv_2(A, v, w) Uses external_interfaces_matmul proc~~mv_atv_2~~UsesGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 module~external_interfaces_matmul external_interfaces_matmul proc~mv_atv_2->module~external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Calls proc~~mv_atv_2~~CallsGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mv_atv_2~~CalledByGraph proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'T' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_ATv_2","tags":"","loc":"proc/mv_atv_2.html"},{"title":"mv_ATv_3 – ForMatmul","text":"private pure subroutine mv_ATv_3(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_3~~CalledByGraph proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_3","tags":"","loc":"proc/mv_atv_3.html"},{"title":"mv_ATv_4 – ForMatmul","text":"private pure subroutine mv_ATv_4(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_4~~CalledByGraph proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_4","tags":"","loc":"proc/mv_atv_4.html"},{"title":"mv_ATv_5 – ForMatmul","text":"private pure subroutine mv_ATv_5(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_5~~CalledByGraph proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 2 ) do k = 1 , m w ( k ) = dot_product ( a (:, k ), v (:)) end do end subroutine mv_ATv_5","tags":"","loc":"proc/mv_atv_5.html"},{"title":"mv_ATv_6 – ForMatmul","text":"private pure subroutine mv_ATv_6(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_6~~CalledByGraph proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 1 ) do k = 1 , n w (:) = w (:) + a ( k ,:) * v ( k ) end do end subroutine mv_ATv_6","tags":"","loc":"proc/mv_atv_6.html"},{"title":"mv_ATv_7 – ForMatmul","text":"private pure subroutine mv_ATv_7(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_7~~CalledByGraph proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(:,k), v(:)) ! end do end subroutine mv_ATv_7","tags":"","loc":"proc/mv_atv_7.html"},{"title":"mv_ATv_8 – ForMatmul","text":"private pure subroutine mv_ATv_8(A, v, w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) Called by proc~~mv_atv_8~~CalledByGraph proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mv_ATv_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(j,i)*v(j) ! end do ! end do end subroutine mv_ATv_8","tags":"","loc":"proc/mv_atv_8.html"},{"title":"mat_mat_coarray_rel – ForMatmul","text":"private impure function mat_mat_coarray_rel(a, b, transA, transB, option, coarray) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_coarray_rel~~CallsGraph proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_coarray_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_coarray_rel~~CalledByGraph proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code impure function mat_mat_coarray_rel ( a , b , transA , transB , option , coarray ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB real ( rk ), allocatable :: c (:,:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: C_block (:,:)[:], B_block (:,:)[:], A_block (:,:)[:] if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B , transA = . true ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if end if #else C = matmul ( A , B , transA = transA , transB = transB , option = option ) #endif end function mat_mat_coarray_rel","tags":"","loc":"proc/mat_mat_coarray_rel.html"},{"title":"mat_vec_coarray_rel – ForMatmul","text":"private impure function mat_vec_coarray_rel(A, v, transA, option, coarray) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_coarray_rel~~CallsGraph proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_vec_coarray_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_coarray_rel~~CalledByGraph proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code impure function mat_vec_coarray_rel ( A , v , transA , option , coarray ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA real ( rk ), allocatable :: w (:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: w_block (:)[:], v_block (:)[:], A_block (:,:)[:] if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:, :)[ im ], v , transA = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w ( start_elem ( i ): end_elem ( i )) = w_block (:)[ i ] end do end if else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if #else w = matmul ( A , v , transA = transA , option = option ) #endif end function mat_vec_coarray_rel","tags":"","loc":"proc/mat_vec_coarray_rel.html"},{"title":"mat_mat_block_rel – ForMatmul","text":"private pure function mat_mat_block_rel(a, b, transA, transB, option, nblock) result(c) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_block_rel~~CallsGraph proc~mat_mat_block_rel formatmul::mat_mat_block_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_block_rel~~CalledByGraph proc~mat_mat_block_rel formatmul::mat_mat_block_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_block_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_mat_block_rel ( a , b , transA , transB , option , nblock ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) logical , intent ( in ), optional :: transA , transB character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: c (:,:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #endif else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif end if end function mat_mat_block_rel","tags":"","loc":"proc/mat_mat_block_rel.html"},{"title":"mat_vec_block_rel – ForMatmul","text":"private pure function mat_vec_block_rel(A, v, transA, option, nblock) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_block_rel~~CallsGraph proc~mat_vec_block_rel formatmul::mat_vec_block_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_vec_block_rel->proc~compute_block_ranges Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_block_rel~~CalledByGraph proc~mat_vec_block_rel formatmul::mat_vec_block_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_block_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_vec_block_rel ( A , v , transA , option , nblock ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) logical , intent ( in ), optional :: transA character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: w (:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #endif else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if end function mat_vec_block_rel","tags":"","loc":"proc/mat_vec_block_rel.html"},{"title":"mat_mat_rel – ForMatmul","text":"private pure function mat_mat_rel(A, B, transA, transB, option) result(C) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) Calls proc~~mat_mat_rel~~CallsGraph proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel->proc~mat_mat_rel_atbt proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm proc~mm_abt_2->interface~gemm proc~mm_atb_2->interface~gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel~~CalledByGraph proc~mat_mat_rel formatmul::mat_mat_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_mat_rel ( A , B , transA , transB , option ) result ( C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), allocatable :: C (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ATBT ( A , B , C , option ) else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) end if end function mat_mat_rel","tags":"","loc":"proc/mat_mat_rel.html"},{"title":"mat_vec_rel – ForMatmul","text":"private pure function mat_vec_rel(A, v, transA, option) result(w) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) Calls proc~~mat_vec_rel~~CallsGraph proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel->proc~mat_vec_rel_av proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel~~CalledByGraph proc~mat_vec_rel formatmul::mat_vec_rel interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure function mat_vec_rel ( A , v , transA , option ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), allocatable :: w (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call mat_vec_rel_ATv ( A , v , w , option ) else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if end function mat_vec_rel","tags":"","loc":"proc/mat_vec_rel.html"},{"title":"compute_block_ranges – ForMatmul","text":"private pure subroutine compute_block_ranges(d, nimg, block_size, start_elem, end_elem) Calculate block sizes and ranges.\nauthor: Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name integer, intent(in) :: d integer, intent(in) :: nimg integer, intent(out) :: block_size (nimg) integer, intent(out) :: start_elem (nimg) integer, intent(out) :: end_elem (nimg) Called by proc~~compute_block_ranges~~CalledByGraph proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel formatmul::mat_mat_block_rel proc~mat_mat_block_rel->proc~compute_block_ranges proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel proc~mat_mat_coarray_rel->proc~compute_block_ranges proc~mat_vec_block_rel formatmul::mat_vec_block_rel proc~mat_vec_block_rel->proc~compute_block_ranges proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel proc~mat_vec_coarray_rel->proc~compute_block_ranges interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_block_rel interface~matmul->proc~mat_mat_coarray_rel interface~matmul->proc~mat_vec_block_rel interface~matmul->proc~mat_vec_coarray_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine compute_block_ranges ( d , nimg , block_size , start_elem , end_elem ) integer , intent ( in ) :: d , nimg integer , intent ( out ) :: block_size ( nimg ), start_elem ( nimg ), end_elem ( nimg ) integer :: i , remainder block_size = d / nimg remainder = mod ( d , nimg ) block_size ( 1 : remainder ) = block_size ( 1 : remainder ) + 1 start_elem ( 1 ) = 1 do i = 2 , nimg start_elem ( i ) = start_elem ( i - 1 ) + block_size ( i - 1 ) end do end_elem ( 1 ) = block_size ( 1 ) end_elem ( 2 :) = start_elem ( 2 :) + block_size ( 2 :) - 1 ! Check if the block sizes are valid. if ( minval ( block_size ) <= 0 ) error stop 'ForDot: reduce the number of images of coarray.' end subroutine compute_block_ranges","tags":"","loc":"proc/compute_block_ranges.html"},{"title":"mat_mat_rel_AB – ForMatmul","text":"private pure subroutine mat_mat_rel_AB(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_ab~~CallsGraph proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_ab~~CalledByGraph proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_AB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_AB_opt ( A , B , C , option ) else call mat_mat_rel_AB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_AB","tags":"","loc":"proc/mat_mat_rel_ab.html"},{"title":"mat_mat_rel_ATB – ForMatmul","text":"private pure subroutine mat_mat_rel_ATB(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_atb~~CallsGraph proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atb_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atb~~CalledByGraph proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atb interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATB_opt ( A , B , C , option ) else call mat_mat_rel_ATB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATB","tags":"","loc":"proc/mat_mat_rel_atb.html"},{"title":"mat_mat_rel_ABT – ForMatmul","text":"private pure subroutine mat_mat_rel_ABT(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_abt~~CallsGraph proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_abt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_abt~~CalledByGraph proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_abt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ABT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ABT_opt ( A , B , C , option ) else call mat_mat_rel_ABT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ABT","tags":"","loc":"proc/mat_mat_rel_abt.html"},{"title":"mat_mat_rel_ATBT – ForMatmul","text":"private pure subroutine mat_mat_rel_ATBT(A, B, C, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option Calls proc~~mat_mat_rel_atbt~~CallsGraph proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 interface~gemm external_interfaces_matmul::gemm proc~mm_atbt_2->interface~gemm Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_mat_rel_atbt~~CalledByGraph proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_mat_rel_ATBT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATBT_opt ( A , B , C , option ) else call mat_mat_rel_ATBT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATBT","tags":"","loc":"proc/mat_mat_rel_atbt.html"},{"title":"mat_vec_rel_Av – ForMatmul","text":"private pure subroutine mat_vec_rel_Av(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option Calls proc~~mat_vec_rel_av~~CallsGraph proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemv external_interfaces_matmul::gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_av~~CalledByGraph proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_Av ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_Av_opt ( A , v , w , option ) else call mat_vec_rel_Av_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_Av","tags":"","loc":"proc/mat_vec_rel_av.html"},{"title":"mat_vec_rel_ATv – ForMatmul","text":"private pure subroutine mat_vec_rel_ATv(A, v, w, option) Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option Calls proc~~mat_vec_rel_atv~~CallsGraph proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Called by proc~~mat_vec_rel_atv~~CalledByGraph proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code pure subroutine mat_vec_rel_ATv ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_ATv_opt ( A , v , w , option ) else call mat_vec_rel_ATv_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_ATv","tags":"","loc":"proc/mat_vec_rel_atv.html"},{"title":"matmul – ForMatmul","text":"public interface matmul Calls interface~~matmul~~CallsGraph interface~matmul formatmul::matmul proc~mat_mat_block_rel formatmul::mat_mat_block_rel interface~matmul->proc~mat_mat_block_rel proc~mat_mat_coarray_rel formatmul::mat_mat_coarray_rel interface~matmul->proc~mat_mat_coarray_rel proc~mat_mat_rel formatmul::mat_mat_rel interface~matmul->proc~mat_mat_rel proc~mat_vec_block_rel formatmul::mat_vec_block_rel interface~matmul->proc~mat_vec_block_rel proc~mat_vec_coarray_rel formatmul::mat_vec_coarray_rel interface~matmul->proc~mat_vec_coarray_rel proc~mat_vec_rel formatmul::mat_vec_rel interface~matmul->proc~mat_vec_rel proc~compute_block_ranges formatmul::compute_block_ranges proc~mat_mat_block_rel->proc~compute_block_ranges proc~mat_mat_coarray_rel->proc~compute_block_ranges proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel->proc~mat_mat_rel_atbt proc~mat_vec_block_rel->proc~compute_block_ranges proc~mat_vec_coarray_rel->proc~compute_block_ranges proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel->proc~mat_vec_rel_av proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mm_ab_1 formatmul_opts::mm_AB_1 proc~mat_mat_rel_ab_opt->proc~mm_ab_1 proc~mm_ab_10 formatmul_opts::mm_AB_10 proc~mat_mat_rel_ab_opt->proc~mm_ab_10 proc~mm_ab_11 formatmul_opts::mm_AB_11 proc~mat_mat_rel_ab_opt->proc~mm_ab_11 proc~mm_ab_12 formatmul_opts::mm_AB_12 proc~mat_mat_rel_ab_opt->proc~mm_ab_12 proc~mm_ab_13 formatmul_opts::mm_AB_13 proc~mat_mat_rel_ab_opt->proc~mm_ab_13 proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mm_ab_3 formatmul_opts::mm_AB_3 proc~mat_mat_rel_ab_opt->proc~mm_ab_3 proc~mm_ab_4 formatmul_opts::mm_AB_4 proc~mat_mat_rel_ab_opt->proc~mm_ab_4 proc~mm_ab_5 formatmul_opts::mm_AB_5 proc~mat_mat_rel_ab_opt->proc~mm_ab_5 proc~mm_ab_6 formatmul_opts::mm_AB_6 proc~mat_mat_rel_ab_opt->proc~mm_ab_6 proc~mm_ab_7 formatmul_opts::mm_AB_7 proc~mat_mat_rel_ab_opt->proc~mm_ab_7 proc~mm_ab_8 formatmul_opts::mm_AB_8 proc~mat_mat_rel_ab_opt->proc~mm_ab_8 proc~mm_ab_9 formatmul_opts::mm_AB_9 proc~mat_mat_rel_ab_opt->proc~mm_ab_9 proc~mm_abt_1 formatmul_opts::mm_ABT_1 proc~mat_mat_rel_abt_opt->proc~mm_abt_1 proc~mm_abt_10 formatmul_opts::mm_ABT_10 proc~mat_mat_rel_abt_opt->proc~mm_abt_10 proc~mm_abt_11 formatmul_opts::mm_ABT_11 proc~mat_mat_rel_abt_opt->proc~mm_abt_11 proc~mm_abt_12 formatmul_opts::mm_ABT_12 proc~mat_mat_rel_abt_opt->proc~mm_abt_12 proc~mm_abt_13 formatmul_opts::mm_ABT_13 proc~mat_mat_rel_abt_opt->proc~mm_abt_13 proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mm_abt_3 formatmul_opts::mm_ABT_3 proc~mat_mat_rel_abt_opt->proc~mm_abt_3 proc~mm_abt_4 formatmul_opts::mm_ABT_4 proc~mat_mat_rel_abt_opt->proc~mm_abt_4 proc~mm_abt_5 formatmul_opts::mm_ABT_5 proc~mat_mat_rel_abt_opt->proc~mm_abt_5 proc~mm_abt_6 formatmul_opts::mm_ABT_6 proc~mat_mat_rel_abt_opt->proc~mm_abt_6 proc~mm_abt_7 formatmul_opts::mm_ABT_7 proc~mat_mat_rel_abt_opt->proc~mm_abt_7 proc~mm_abt_8 formatmul_opts::mm_ABT_8 proc~mat_mat_rel_abt_opt->proc~mm_abt_8 proc~mm_abt_9 formatmul_opts::mm_ABT_9 proc~mat_mat_rel_abt_opt->proc~mm_abt_9 proc~mm_atb_1 formatmul_opts::mm_ATB_1 proc~mat_mat_rel_atb_opt->proc~mm_atb_1 proc~mm_atb_10 formatmul_opts::mm_ATB_10 proc~mat_mat_rel_atb_opt->proc~mm_atb_10 proc~mm_atb_11 formatmul_opts::mm_ATB_11 proc~mat_mat_rel_atb_opt->proc~mm_atb_11 proc~mm_atb_12 formatmul_opts::mm_ATB_12 proc~mat_mat_rel_atb_opt->proc~mm_atb_12 proc~mm_atb_13 formatmul_opts::mm_ATB_13 proc~mat_mat_rel_atb_opt->proc~mm_atb_13 proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mm_atb_3 formatmul_opts::mm_ATB_3 proc~mat_mat_rel_atb_opt->proc~mm_atb_3 proc~mm_atb_4 formatmul_opts::mm_ATB_4 proc~mat_mat_rel_atb_opt->proc~mm_atb_4 proc~mm_atb_5 formatmul_opts::mm_ATB_5 proc~mat_mat_rel_atb_opt->proc~mm_atb_5 proc~mm_atb_6 formatmul_opts::mm_ATB_6 proc~mat_mat_rel_atb_opt->proc~mm_atb_6 proc~mm_atb_7 formatmul_opts::mm_ATB_7 proc~mat_mat_rel_atb_opt->proc~mm_atb_7 proc~mm_atb_8 formatmul_opts::mm_ATB_8 proc~mat_mat_rel_atb_opt->proc~mm_atb_8 proc~mm_atb_9 formatmul_opts::mm_ATB_9 proc~mat_mat_rel_atb_opt->proc~mm_atb_9 proc~mm_atbt_1 formatmul_opts::mm_ATBT_1 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_1 proc~mm_atbt_10 formatmul_opts::mm_ATBT_10 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_10 proc~mm_atbt_11 formatmul_opts::mm_ATBT_11 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_11 proc~mm_atbt_12 formatmul_opts::mm_ATBT_12 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_12 proc~mm_atbt_13 formatmul_opts::mm_ATBT_13 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_13 proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mm_atbt_3 formatmul_opts::mm_ATBT_3 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_3 proc~mm_atbt_4 formatmul_opts::mm_ATBT_4 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_4 proc~mm_atbt_5 formatmul_opts::mm_ATBT_5 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_5 proc~mm_atbt_6 formatmul_opts::mm_ATBT_6 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_6 proc~mm_atbt_7 formatmul_opts::mm_ATBT_7 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_7 proc~mm_atbt_8 formatmul_opts::mm_ATBT_8 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_8 proc~mm_atbt_9 formatmul_opts::mm_ATBT_9 proc~mat_mat_rel_atbt_opt->proc~mm_atbt_9 proc~mv_atv_1 formatmul_opts::mv_ATv_1 proc~mat_vec_rel_atv_opt->proc~mv_atv_1 proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mv_atv_3 formatmul_opts::mv_ATv_3 proc~mat_vec_rel_atv_opt->proc~mv_atv_3 proc~mv_atv_4 formatmul_opts::mv_ATv_4 proc~mat_vec_rel_atv_opt->proc~mv_atv_4 proc~mv_atv_5 formatmul_opts::mv_ATv_5 proc~mat_vec_rel_atv_opt->proc~mv_atv_5 proc~mv_atv_6 formatmul_opts::mv_ATv_6 proc~mat_vec_rel_atv_opt->proc~mv_atv_6 proc~mv_atv_7 formatmul_opts::mv_ATv_7 proc~mat_vec_rel_atv_opt->proc~mv_atv_7 proc~mv_atv_8 formatmul_opts::mv_ATv_8 proc~mat_vec_rel_atv_opt->proc~mv_atv_8 proc~mv_av_1 formatmul_opts::mv_Av_1 proc~mat_vec_rel_av_opt->proc~mv_av_1 proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mv_av_3 formatmul_opts::mv_Av_3 proc~mat_vec_rel_av_opt->proc~mv_av_3 proc~mv_av_4 formatmul_opts::mv_Av_4 proc~mat_vec_rel_av_opt->proc~mv_av_4 proc~mv_av_5 formatmul_opts::mv_Av_5 proc~mat_vec_rel_av_opt->proc~mv_av_5 proc~mv_av_6 formatmul_opts::mv_Av_6 proc~mat_vec_rel_av_opt->proc~mv_av_6 proc~mv_av_7 formatmul_opts::mv_Av_7 proc~mat_vec_rel_av_opt->proc~mv_av_7 proc~mv_av_8 formatmul_opts::mv_Av_8 proc~mat_vec_rel_av_opt->proc~mv_av_8 interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2->interface~gemm proc~mm_abt_2->interface~gemm proc~mm_atb_2->interface~gemm proc~mm_atbt_2->interface~gemm interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2->interface~gemv proc~mv_av_2->interface~gemv Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Module Procedures private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:)","tags":"","loc":"interface/matmul.html"},{"title":"gemm – ForMatmul","text":"public interface gemm Called by interface~~gemm~~CalledByGraph interface~gemm external_interfaces_matmul::gemm proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mm_ab_2->interface~gemm proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mm_abt_2->interface~gemm proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mm_atb_2->interface~gemm proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mm_atbt_2->interface~gemm proc~mat_mat_rel_ab_opt formatmul_opts::mat_mat_rel_AB_opt proc~mat_mat_rel_ab_opt->proc~mm_ab_2 proc~mat_mat_rel_abt_opt formatmul_opts::mat_mat_rel_ABT_opt proc~mat_mat_rel_abt_opt->proc~mm_abt_2 proc~mat_mat_rel_atb_opt formatmul_opts::mat_mat_rel_ATB_opt proc~mat_mat_rel_atb_opt->proc~mm_atb_2 proc~mat_mat_rel_atbt_opt formatmul_opts::mat_mat_rel_ATBT_opt proc~mat_mat_rel_atbt_opt->proc~mm_atbt_2 proc~mat_mat_rel_ab formatmul::mat_mat_rel_AB proc~mat_mat_rel_ab->proc~mat_mat_rel_ab_opt proc~mat_mat_rel_abt formatmul::mat_mat_rel_ABT proc~mat_mat_rel_abt->proc~mat_mat_rel_abt_opt proc~mat_mat_rel_atb formatmul::mat_mat_rel_ATB proc~mat_mat_rel_atb->proc~mat_mat_rel_atb_opt proc~mat_mat_rel_atbt formatmul::mat_mat_rel_ATBT proc~mat_mat_rel_atbt->proc~mat_mat_rel_atbt_opt proc~mat_mat_rel formatmul::mat_mat_rel proc~mat_mat_rel->proc~mat_mat_rel_ab proc~mat_mat_rel->proc~mat_mat_rel_abt proc~mat_mat_rel->proc~mat_mat_rel_atb proc~mat_mat_rel->proc~mat_mat_rel_atbt interface~matmul formatmul::matmul interface~matmul->proc~mat_mat_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine sgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc","tags":"","loc":"interface/gemm.html"},{"title":"gemv – ForMatmul","text":"public interface gemv Called by interface~~gemv~~CalledByGraph interface~gemv external_interfaces_matmul::gemv proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mv_atv_2->interface~gemv proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mv_av_2->interface~gemv proc~mat_vec_rel_atv_opt formatmul_opts::mat_vec_rel_ATv_opt proc~mat_vec_rel_atv_opt->proc~mv_atv_2 proc~mat_vec_rel_av_opt formatmul_opts::mat_vec_rel_Av_opt proc~mat_vec_rel_av_opt->proc~mv_av_2 proc~mat_vec_rel_atv formatmul::mat_vec_rel_ATv proc~mat_vec_rel_atv->proc~mat_vec_rel_atv_opt proc~mat_vec_rel_av formatmul::mat_vec_rel_Av proc~mat_vec_rel_av->proc~mat_vec_rel_av_opt proc~mat_vec_rel formatmul::mat_vec_rel proc~mat_vec_rel->proc~mat_vec_rel_atv proc~mat_vec_rel->proc~mat_vec_rel_av interface~matmul formatmul::matmul interface~matmul->proc~mat_vec_rel Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine sgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy","tags":"","loc":"interface/gemv.html"},{"title":"formatmul_opts – ForMatmul","text":"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Uses kinds module~~formatmul_opts~~UsesGraph module~formatmul_opts formatmul_opts kinds kinds module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~formatmul_opts~~UsedByGraph module~formatmul_opts formatmul_opts module~formatmul formatmul module~formatmul->module~formatmul_opts program~test_matmul10 test_matmul10 program~test_matmul10->module~formatmul program~test_matmul11 test_matmul11 program~test_matmul11->module~formatmul program~test_matmul12 test_matmul12 program~test_matmul12->module~formatmul program~test_matmul13 test_matmul13 program~test_matmul13->module~formatmul program~test_matmul14 test_matmul14 program~test_matmul14->module~formatmul program~test_matmul15 test_matmul15 program~test_matmul15->module~formatmul program~test_matmul3 test_matmul3 program~test_matmul3->module~formatmul program~test_matmul4 test_matmul4 program~test_matmul4->module~formatmul program~test_matmul5 test_matmul5 program~test_matmul5->module~formatmul program~test_matmul6 test_matmul6 program~test_matmul6->module~formatmul program~test_matmul7 test_matmul7 program~test_matmul7->module~formatmul program~test_matmul8 test_matmul8 program~test_matmul8->module~formatmul program~test_matmul9 test_matmul9 program~test_matmul9->module~formatmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Subroutines public pure subroutine mat_mat_rel_AB_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ATB_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ABT_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_mat_rel_ATBT_opt (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in) :: option public pure subroutine mat_vec_rel_Av_opt (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option public pure subroutine mat_vec_rel_ATv_opt (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in) :: option private pure subroutine mm_AB_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_AB_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATB_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ABT_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_1 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_2 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_3 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_4 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_5 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_6 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_7 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_8 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_9 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_10 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_11 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_12 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mm_ATBT_13 (A, B, C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) private pure subroutine mv_Av_1 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_2 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_3 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_4 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_5 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_6 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_7 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_Av_8 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_1 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_2 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_3 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_4 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_5 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_6 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_7 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) private pure subroutine mv_ATv_8 (A, v, w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:)","tags":"","loc":"module/formatmul_opts.html"},{"title":"formatmul – ForMatmul","text":"Uses formatmul_opts kinds module~~formatmul~~UsesGraph module~formatmul formatmul kinds kinds module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~formatmul~~UsedByGraph module~formatmul formatmul program~test_matmul10 test_matmul10 program~test_matmul10->module~formatmul program~test_matmul11 test_matmul11 program~test_matmul11->module~formatmul program~test_matmul12 test_matmul12 program~test_matmul12->module~formatmul program~test_matmul13 test_matmul13 program~test_matmul13->module~formatmul program~test_matmul14 test_matmul14 program~test_matmul14->module~formatmul program~test_matmul15 test_matmul15 program~test_matmul15->module~formatmul program~test_matmul3 test_matmul3 program~test_matmul3->module~formatmul program~test_matmul4 test_matmul4 program~test_matmul4->module~formatmul program~test_matmul5 test_matmul5 program~test_matmul5->module~formatmul program~test_matmul6 test_matmul6 program~test_matmul6->module~formatmul program~test_matmul7 test_matmul7 program~test_matmul7->module~formatmul program~test_matmul8 test_matmul8 program~test_matmul8->module~formatmul program~test_matmul9 test_matmul9 program~test_matmul9->module~formatmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Interfaces public interface matmul private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) Functions private impure function mat_mat_coarray_rel (a, b, transA, transB, option, coarray) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:,:) private impure function mat_vec_coarray_rel (A, v, transA, option, coarray) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option logical, intent(in) :: coarray Return Value real(kind=rk), allocatable, (:) private pure function mat_mat_block_rel (a, b, transA, transB, option, nblock) result(c) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: a (:,:) real(kind=rk), intent(in), contiguous :: b (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_block_rel (A, v, transA, option, nblock) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option integer, intent(in) :: nblock Return Value real(kind=rk), allocatable, (:) private pure function mat_mat_rel (A, B, transA, transB, option) result(C) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) logical, intent(in), optional :: transA logical, intent(in), optional :: transB character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:,:) private pure function mat_vec_rel (A, v, transA, option) result(w) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) logical, intent(in), optional :: transA character(len=*), intent(in), optional :: option Return Value real(kind=rk), allocatable, (:) Subroutines private pure subroutine compute_block_ranges (d, nimg, block_size, start_elem, end_elem) Calculate block sizes and ranges.\nauthor: Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name integer, intent(in) :: d integer, intent(in) :: nimg integer, intent(out) :: block_size (nimg) integer, intent(out) :: start_elem (nimg) integer, intent(out) :: end_elem (nimg) private pure subroutine mat_mat_rel_AB (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ATB (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ABT (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_mat_rel_ATBT (A, B, C, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: B (:,:) real(kind=rk), intent(inout), contiguous :: C (:,:) character(len=*), intent(in), optional :: option private pure subroutine mat_vec_rel_Av (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option private pure subroutine mat_vec_rel_ATv (A, v, w, option) Author Seyed Ali Ghasemi Arguments Type Intent Optional Attributes Name real(kind=rk), intent(in), contiguous :: A (:,:) real(kind=rk), intent(in), contiguous :: v (:) real(kind=rk), intent(inout), contiguous :: w (:) character(len=*), intent(in), optional :: option","tags":"","loc":"module/formatmul.html"},{"title":"external_interfaces_matmul – ForMatmul","text":"Uses kinds module~~external_interfaces_matmul~~UsesGraph module~external_interfaces_matmul external_interfaces_matmul kinds kinds module~external_interfaces_matmul->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Used by module~~external_interfaces_matmul~~UsedByGraph module~external_interfaces_matmul external_interfaces_matmul proc~mm_ab_2 formatmul_opts::mm_AB_2 proc~mm_ab_2->module~external_interfaces_matmul proc~mm_abt_2 formatmul_opts::mm_ABT_2 proc~mm_abt_2->module~external_interfaces_matmul proc~mm_atb_2 formatmul_opts::mm_ATB_2 proc~mm_atb_2->module~external_interfaces_matmul proc~mm_atbt_2 formatmul_opts::mm_ATBT_2 proc~mm_atbt_2->module~external_interfaces_matmul proc~mv_atv_2 formatmul_opts::mv_ATv_2 proc~mv_atv_2->module~external_interfaces_matmul proc~mv_av_2 formatmul_opts::mv_Av_2 proc~mv_av_2->module~external_interfaces_matmul Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Interfaces public interface gemm public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine sgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public pure subroutine dgemm(f_transa, f_transb, f_m, f_n, f_k, f_alpha, f_a, f_lda, f_b, f_ldb, f_beta, f_c, f_ldc) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_transa character(len=1), intent(in) :: f_transb integer, intent(in) :: f_m integer, intent(in) :: f_n integer, intent(in) :: f_k real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_b (f_ldb,*) integer, intent(in) :: f_ldb real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_c (f_ldc,*) integer, intent(in) :: f_ldc public interface gemv public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine sgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy public pure subroutine dgemv(f_trans, f_m, f_n, f_alpha, f_a, f_lda, f_x, f_incx, f_beta, f_y, f_incy) Arguments Type Intent Optional Attributes Name character(len=1), intent(in) :: f_trans integer, intent(in) :: f_m integer, intent(in) :: f_n real(kind=rk), intent(in) :: f_alpha real(kind=rk), intent(in) :: f_a (f_lda,*) integer, intent(in) :: f_lda real(kind=rk), intent(in) :: f_x (*) integer, intent(in) :: f_incx real(kind=rk), intent(in) :: f_beta real(kind=rk), intent(inout) :: f_y (*) integer, intent(in) :: f_incy","tags":"","loc":"module/external_interfaces_matmul.html"},{"title":"test_matmul6 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul6~~UsesGraph program~test_matmul6 test_matmul6 forunittest forunittest program~test_matmul6->forunittest kinds kinds program~test_matmul6->kinds module~formatmul formatmul program~test_matmul6->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul6~~CallsGraph program~test_matmul6 test_matmul6 check check program~test_matmul6->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul6 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.14' ) C = matmul ( A , B , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.24' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.25') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.26') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.28' ) end program test_matmul6","tags":"","loc":"program/test_matmul6.html"},{"title":"test_matmul11 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul11~~UsesGraph program~test_matmul11 test_matmul11 forunittest forunittest program~test_matmul11->forunittest kinds kinds program~test_matmul11->kinds module~formatmul formatmul program~test_matmul11->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul11~~CallsGraph program~test_matmul11 test_matmul11 check check program~test_matmul11->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul11 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.10' ) ! C = matmul(A,B, option='m10', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.11') ! C = matmul(A,B, option='m11', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.12') C = matmul ( A , B , option = 'm12' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.14' ) end program test_matmul11","tags":"","loc":"program/test_matmul11.html"},{"title":"test_matmul4 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul4~~UsesGraph program~test_matmul4 test_matmul4 forunittest forunittest program~test_matmul4->forunittest kinds kinds program~test_matmul4->kinds module~formatmul formatmul program~test_matmul4->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul4~~CallsGraph program~test_matmul4 test_matmul4 check check program~test_matmul4->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul4 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.1' ) C = matmul ( A , B , option = 'm1' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.2' ) C = matmul ( A , B , option = 'm2' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.3' ) C = matmul ( A , B , option = 'm3' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.4' ) C = matmul ( A , B , option = 'm4' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.5' ) C = matmul ( A , B , option = 'm5' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.6' ) C = matmul ( A , B , option = 'm6' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.7' ) C = matmul ( A , B , option = 'm7' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.8' ) C = matmul ( A , B , option = 'm8' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.9' ) C = matmul ( A , B , option = 'm9' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.10' ) ! C = matmul(A,B, option='m10', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.11') ! C = matmul(A,B, option='m11', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.12') C = matmul ( A , B , option = 'm12' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.13' ) C = matmul ( A , B , option = 'm13' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.14' ) C = matmul ( A , B , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.24' ) ! C = matmul(A,B, option='m10', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.25') ! C = matmul(A,B, option='m11', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.26') C = matmul ( A , B , option = 'm12' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.28' ) end program test_matmul4","tags":"","loc":"program/test_matmul4.html"},{"title":"test_matmul3 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul3~~UsesGraph program~test_matmul3 test_matmul3 forunittest forunittest program~test_matmul3->forunittest kinds kinds program~test_matmul3->kinds module~formatmul formatmul program~test_matmul3->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul3~~CallsGraph program~test_matmul3 test_matmul3 check check program~test_matmul3->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul3 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.1' ) C = matmul ( A , B , option = 'm1' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.2' ) C = matmul ( A , B , option = 'm2' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.3' ) C = matmul ( A , B , option = 'm3' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.4' ) C = matmul ( A , B , option = 'm4' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.5' ) C = matmul ( A , B , option = 'm5' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.6' ) C = matmul ( A , B , option = 'm6' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.7' ) C = matmul ( A , B , option = 'm7' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.8' ) C = matmul ( A , B , option = 'm8' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.9' ) C = matmul ( A , B , option = 'm9' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.10' ) ! C = matmul(A,B, option='m10') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.11') ! C = matmul(A,B, option='m11') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.12') C = matmul ( A , B , option = 'm12' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.13' ) C = matmul ( A , B , option = 'm13' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.14' ) C = matmul ( A , B , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.15' ) C = matmul ( A , B , option = 'm1' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.16' ) C = matmul ( A , B , option = 'm2' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.17' ) C = matmul ( A , B , option = 'm3' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.18' ) C = matmul ( A , B , option = 'm4' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.19' ) C = matmul ( A , B , option = 'm5' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.20' ) C = matmul ( A , B , option = 'm6' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.21' ) C = matmul ( A , B , option = 'm7' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.22' ) C = matmul ( A , B , option = 'm8' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.23' ) C = matmul ( A , B , option = 'm9' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.24' ) ! C = matmul(A,B, option='m10', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.25') ! C = matmul(A,B, option='m11', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.26') C = matmul ( A , B , option = 'm12' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.27' ) C = matmul ( A , B , option = 'm13' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.28' ) end program test_matmul3","tags":"","loc":"program/test_matmul3.html"},{"title":"test_matmul10 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul10~~UsesGraph program~test_matmul10 test_matmul10 forunittest forunittest program~test_matmul10->forunittest kinds kinds program~test_matmul10->kinds module~formatmul formatmul program~test_matmul10->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul10~~CallsGraph program~test_matmul10 test_matmul10 check check program~test_matmul10->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul10 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.1' ) C = matmul ( A , B , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.2' ) C = matmul ( A , B , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.3' ) C = matmul ( A , B , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.4' ) C = matmul ( A , B , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.5' ) C = matmul ( A , B , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.6' ) C = matmul ( A , B , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.7' ) C = matmul ( A , B , option = 'm7' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.8' ) C = matmul ( A , B , option = 'm8' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.9' ) C = matmul ( A , B , option = 'm9' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.10' ) ! C = matmul(A,B, option='m10', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.11') ! C = matmul(A,B, option='m11', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.12') C = matmul ( A , B , option = 'm12' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.13' ) C = matmul ( A , B , option = 'm13' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.14' ) end program test_matmul10","tags":"","loc":"program/test_matmul10.html"},{"title":"test_matmul14 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul14~~UsesGraph program~test_matmul14 test_matmul14 forunittest forunittest program~test_matmul14->forunittest kinds kinds program~test_matmul14->kinds module~formatmul formatmul program~test_matmul14->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul14~~CallsGraph program~test_matmul14 test_matmul14 check check program~test_matmul14->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n integer :: im type(unit_test) :: ut Source Code program test_matmul14 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(m,n).v(n) m = 500 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.1' ) w = matmul ( A , v , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.2' ) w = matmul ( A , v , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.3' ) w = matmul ( A , v , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.4' ) w = matmul ( A , v , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.5' ) w = matmul ( A , v , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.6' ) w = matmul ( A , v , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.7' ) ! w = matmul(A,v, option='m7', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.8') ! w = matmul(A,v, option='m8', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.9') end program test_matmul14","tags":"","loc":"program/test_matmul14.html"},{"title":"test_matmul8 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul8~~UsesGraph program~test_matmul8 test_matmul8 forunittest forunittest program~test_matmul8->forunittest kinds kinds program~test_matmul8->kinds module~formatmul formatmul program~test_matmul8->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul8~~CallsGraph program~test_matmul8 test_matmul8 check check program~test_matmul8->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul8 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.18') end program test_matmul8","tags":"","loc":"program/test_matmul8.html"},{"title":"test_matmul9 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul9~~UsesGraph program~test_matmul9 test_matmul9 forunittest forunittest program~test_matmul9->forunittest kinds kinds program~test_matmul9->kinds module~formatmul formatmul program~test_matmul9->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul9~~CallsGraph program~test_matmul9 test_matmul9 check check program~test_matmul9->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul9 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(n) = v(m).A(m,n) m = 100 n = 300 allocate ( A ( m , n ), v ( m )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( v , A ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.18') end program test_matmul9","tags":"","loc":"program/test_matmul9.html"},{"title":"test_matmul15 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul15~~UsesGraph program~test_matmul15 test_matmul15 forunittest forunittest program~test_matmul15->forunittest kinds kinds program~test_matmul15->kinds module~formatmul formatmul program~test_matmul15->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul15~~CallsGraph program~test_matmul15 test_matmul15 check check program~test_matmul15->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n integer :: im type(unit_test) :: ut Source Code program test_matmul15 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.1' ) w = matmul ( A , v , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.2' ) w = matmul ( A , v , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.3' ) w = matmul ( A , v , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.4' ) w = matmul ( A , v , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.5' ) w = matmul ( A , v , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.6' ) w = matmul ( A , v , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.7' ) ! w = matmul(A,v, option='m7', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.8') ! w = matmul(A,v, option='m8', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.9') end program test_matmul15","tags":"","loc":"program/test_matmul15.html"},{"title":"test_matmul13 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul13~~UsesGraph program~test_matmul13 test_matmul13 forunittest forunittest program~test_matmul13->forunittest kinds kinds program~test_matmul13->kinds module~formatmul formatmul program~test_matmul13->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul13~~CallsGraph program~test_matmul13 test_matmul13 check check program~test_matmul13->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul13 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.14' ) end program test_matmul13","tags":"","loc":"program/test_matmul13.html"},{"title":"test_matmul7 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul7~~UsesGraph program~test_matmul7 test_matmul7 forunittest forunittest program~test_matmul7->forunittest kinds kinds program~test_matmul7->kinds module~formatmul formatmul program~test_matmul7->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul7~~CallsGraph program~test_matmul7 test_matmul7 check check program~test_matmul7->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: v (:) real(kind=rk), allocatable :: w_ref (:) real(kind=rk), allocatable :: w (:) integer :: m integer :: n type(unit_test) :: ut Source Code program test_matmul7 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(m,n).v(n) m = 100 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.1' ) w = matmul ( A , v , option = 'm1' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.2' ) w = matmul ( A , v , option = 'm2' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.3' ) w = matmul ( A , v , option = 'm3' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.4' ) w = matmul ( A , v , option = 'm4' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.5' ) w = matmul ( A , v , option = 'm5' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.6' ) w = matmul ( A , v , option = 'm6' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.7' ) ! w = matmul(A,v, option='m7') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.8') ! w = matmul(A,v, option='m8') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.9') w = matmul ( A , v , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.10' ) w = matmul ( A , v , option = 'm1' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.11' ) w = matmul ( A , v , option = 'm2' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.12' ) w = matmul ( A , v , option = 'm3' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.13' ) w = matmul ( A , v , option = 'm4' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.14' ) w = matmul ( A , v , option = 'm5' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.15' ) w = matmul ( A , v , option = 'm6' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.16' ) ! w = matmul(A,v, option='m7', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.17') ! w = matmul(A,v, option='m8', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.18') end program test_matmul7","tags":"","loc":"program/test_matmul7.html"},{"title":"test_matmul12 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul12~~UsesGraph program~test_matmul12 test_matmul12 forunittest forunittest program~test_matmul12->forunittest kinds kinds program~test_matmul12->kinds module~formatmul formatmul program~test_matmul12->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul12~~CallsGraph program~test_matmul12 test_matmul12 check check program~test_matmul12->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o integer :: im type(unit_test) :: ut Source Code program test_matmul12 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.1' ) C = matmul ( A , B , option = 'm1' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.2' ) C = matmul ( A , B , option = 'm2' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.3' ) C = matmul ( A , B , option = 'm3' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.4' ) C = matmul ( A , B , option = 'm4' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.5' ) C = matmul ( A , B , option = 'm5' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.6' ) C = matmul ( A , B , option = 'm6' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.7' ) C = matmul ( A , B , option = 'm7' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.8' ) C = matmul ( A , B , option = 'm8' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.9' ) C = matmul ( A , B , option = 'm9' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.10' ) ! C = matmul(A,B, option='m10', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.11') ! C = matmul(A,B, option='m11', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.12') C = matmul ( A , B , option = 'm12' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.13' ) C = matmul ( A , B , option = 'm13' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.14' ) end program test_matmul12","tags":"","loc":"program/test_matmul12.html"},{"title":"test_matmul5 – ForMatmul","text":"Uses formatmul forunittest kinds program~~test_matmul5~~UsesGraph program~test_matmul5 test_matmul5 forunittest forunittest program~test_matmul5->forunittest kinds kinds program~test_matmul5->kinds module~formatmul formatmul program~test_matmul5->module~formatmul module~formatmul->kinds module~formatmul_opts formatmul_opts module~formatmul->module~formatmul_opts module~formatmul_opts->kinds Help Graph Key Nodes of different colours represent the following: Graph Key Module Module Submodule Submodule Subroutine Subroutine Function Function Program Program This Page's Entity This Page's Entity Solid arrows point from a submodule to the (sub)module which it is\ndescended from. Dashed arrows point from a module or program unit to \nmodules which it uses. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Calls program~~test_matmul5~~CallsGraph program~test_matmul5 test_matmul5 check check program~test_matmul5->check Help Graph Key Nodes of different colours represent the following: Graph Key Subroutine Subroutine Function Function Interface Interface Type Bound Procedure Type Bound Procedure Unknown Procedure Type Unknown Procedure Type Program Program This Page's Entity This Page's Entity Solid arrows point from a procedure to one which it calls. Dashed \narrows point from an interface to procedures which implement that interface.\nThis could include the module procedures in a generic interface or the\nimplementation in a submodule of an interface in a parent module. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Variables Type Attributes Name Initial real(kind=rk), allocatable :: A (:,:) real(kind=rk), allocatable :: B (:,:) real(kind=rk), allocatable :: C_ref (:,:) real(kind=rk), allocatable :: C (:,:) integer :: m integer :: n integer :: o type(unit_test) :: ut Source Code program test_matmul5 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.1' ) C = matmul ( A , B , option = 'm1' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.2' ) C = matmul ( A , B , option = 'm2' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.3' ) C = matmul ( A , B , option = 'm3' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.4' ) C = matmul ( A , B , option = 'm4' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.5' ) C = matmul ( A , B , option = 'm5' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.6' ) C = matmul ( A , B , option = 'm6' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.7' ) C = matmul ( A , B , option = 'm7' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.8' ) C = matmul ( A , B , option = 'm8' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.9' ) C = matmul ( A , B , option = 'm9' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.10' ) ! C = matmul(A,B, option='m10', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.11') ! C = matmul(A,B, option='m11', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.12') C = matmul ( A , B , option = 'm12' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.13' ) C = matmul ( A , B , option = 'm13' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.14' ) C = matmul ( A , B , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.15' ) C = matmul ( A , B , option = 'm1' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.16' ) C = matmul ( A , B , option = 'm2' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.17' ) C = matmul ( A , B , option = 'm3' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.18' ) C = matmul ( A , B , option = 'm4' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.19' ) C = matmul ( A , B , option = 'm5' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.20' ) C = matmul ( A , B , option = 'm6' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.21' ) C = matmul ( A , B , option = 'm7' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.22' ) C = matmul ( A , B , option = 'm8' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.23' ) C = matmul ( A , B , option = 'm9' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.24' ) ! C = matmul(A,B, option='m10', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.25') ! C = matmul(A,B, option='m11', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.26') C = matmul ( A , B , option = 'm12' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.27' ) C = matmul ( A , B , option = 'm13' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.28' ) end program test_matmul5","tags":"","loc":"program/test_matmul5.html"},{"title":"test4.f90 – ForMatmul","text":"This file depends on sourcefile~~test4.f90~~EfferentGraph sourcefile~test4.f90 test4.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul6 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.14' ) C = matmul ( A , B , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.24' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.25') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul6.26') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul6.28' ) end program test_matmul6","tags":"","loc":"sourcefile/test4.f90.html"},{"title":"test9.f90 – ForMatmul","text":"This file depends on sourcefile~~test9.f90~~EfferentGraph sourcefile~test9.f90 test9.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul11 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.10' ) ! C = matmul(A,B, option='m10', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.11') ! C = matmul(A,B, option='m11', transA=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul11.12') C = matmul ( A , B , option = 'm12' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul11.14' ) end program test_matmul11","tags":"","loc":"sourcefile/test9.f90.html"},{"title":"test2.f90 – ForMatmul","text":"This file depends on sourcefile~~test2.f90~~EfferentGraph sourcefile~test2.f90 test2.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul4 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(n,m).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( n , m ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), B ) C = matmul ( A , B , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.1' ) C = matmul ( A , B , option = 'm1' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.2' ) C = matmul ( A , B , option = 'm2' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.3' ) C = matmul ( A , B , option = 'm3' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.4' ) C = matmul ( A , B , option = 'm4' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.5' ) C = matmul ( A , B , option = 'm5' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.6' ) C = matmul ( A , B , option = 'm6' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.7' ) C = matmul ( A , B , option = 'm7' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.8' ) C = matmul ( A , B , option = 'm8' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.9' ) C = matmul ( A , B , option = 'm9' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.10' ) ! C = matmul(A,B, option='m10', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.11') ! C = matmul(A,B, option='m11', transA=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.12') C = matmul ( A , B , option = 'm12' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.13' ) C = matmul ( A , B , option = 'm13' , transA = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.14' ) C = matmul ( A , B , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.15' ) C = matmul ( A , B , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.16' ) C = matmul ( A , B , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.17' ) C = matmul ( A , B , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.18' ) C = matmul ( A , B , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.19' ) C = matmul ( A , B , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.20' ) C = matmul ( A , B , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.21' ) C = matmul ( A , B , option = 'm7' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.22' ) C = matmul ( A , B , option = 'm8' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.23' ) C = matmul ( A , B , option = 'm9' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.24' ) ! C = matmul(A,B, option='m10', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.25') ! C = matmul(A,B, option='m11', transA=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul4.26') C = matmul ( A , B , option = 'm12' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.27' ) C = matmul ( A , B , option = 'm13' , transA = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul4.28' ) end program test_matmul4","tags":"","loc":"sourcefile/test2.f90.html"},{"title":"formatmul_opts.f90 – ForMatmul","text":"This file depends on sourcefile~~formatmul_opts.f90~~EfferentGraph sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~formatmul_opts.f90~~AfferentGraph sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module formatmul_opts use kinds implicit none private public & mat_mat_rel_AB_opt , & mat_mat_rel_ATB_opt , & mat_mat_rel_ABT_opt , & mat_mat_rel_ATBT_opt , & mat_vec_rel_Av_opt , & mat_vec_rel_Atv_opt contains !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_AB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_AB_1 ( A , B , C ) case ( 'm2' ) call mm_AB_2 ( A , B , C ) case ( 'm3' ) call mm_AB_3 ( A , B , C ) case ( 'm4' ) call mm_AB_4 ( A , B , C ) case ( 'm5' ) call mm_AB_5 ( A , B , C ) case ( 'm6' ) call mm_AB_6 ( A , B , C ) case ( 'm7' ) call mm_AB_7 ( A , B , C ) case ( 'm8' ) call mm_AB_8 ( A , B , C ) case ( 'm9' ) call mm_AB_9 ( A , B , C ) case ( 'm10' ) call mm_AB_10 ( A , B , C ) case ( 'm11' ) call mm_AB_11 ( A , B , C ) case ( 'm12' ) call mm_AB_12 ( A , B , C ) case ( 'm13' ) call mm_AB_13 ( A , B , C ) end select end subroutine mat_mat_rel_AB_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATB_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATB_1 ( A , B , C ) case ( 'm2' ) call mm_ATB_2 ( A , B , C ) case ( 'm3' ) call mm_ATB_3 ( A , B , C ) case ( 'm4' ) call mm_ATB_4 ( A , B , C ) case ( 'm5' ) call mm_ATB_5 ( A , B , C ) case ( 'm6' ) call mm_ATB_6 ( A , B , C ) case ( 'm7' ) call mm_ATB_7 ( A , B , C ) case ( 'm8' ) call mm_ATB_8 ( A , B , C ) case ( 'm9' ) call mm_ATB_9 ( A , B , C ) case ( 'm10' ) call mm_ATB_10 ( A , B , C ) case ( 'm11' ) call mm_ATB_11 ( A , B , C ) case ( 'm12' ) call mm_ATB_12 ( A , B , C ) case ( 'm13' ) call mm_ATB_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATB_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ABT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ABT_1 ( A , B , C ) case ( 'm2' ) call mm_ABT_2 ( A , B , C ) case ( 'm3' ) call mm_ABT_3 ( A , B , C ) case ( 'm4' ) call mm_ABT_4 ( A , B , C ) case ( 'm5' ) call mm_ABT_5 ( A , B , C ) case ( 'm6' ) call mm_ABT_6 ( A , B , C ) case ( 'm7' ) call mm_ABT_7 ( A , B , C ) case ( 'm8' ) call mm_ABT_8 ( A , B , C ) case ( 'm9' ) call mm_ABT_9 ( A , B , C ) case ( 'm10' ) call mm_ABT_10 ( A , B , C ) case ( 'm11' ) call mm_ABT_11 ( A , B , C ) case ( 'm12' ) call mm_ABT_12 ( A , B , C ) case ( 'm13' ) call mm_ABT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ABT_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATBT_opt ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mm_ATBT_1 ( A , B , C ) case ( 'm2' ) call mm_ATBT_2 ( A , B , C ) case ( 'm3' ) call mm_ATBT_3 ( A , B , C ) case ( 'm4' ) call mm_ATBT_4 ( A , B , C ) case ( 'm5' ) call mm_ATBT_5 ( A , B , C ) case ( 'm6' ) call mm_ATBT_6 ( A , B , C ) case ( 'm7' ) call mm_ATBT_7 ( A , B , C ) case ( 'm8' ) call mm_ATBT_8 ( A , B , C ) case ( 'm9' ) call mm_ATBT_9 ( A , B , C ) case ( 'm10' ) call mm_ATBT_10 ( A , B , C ) case ( 'm11' ) call mm_ATBT_11 ( A , B , C ) case ( 'm12' ) call mm_ATBT_12 ( A , B , C ) case ( 'm13' ) call mm_ATBT_13 ( A , B , C ) end select end subroutine mat_mat_rel_ATBT_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_Av_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_Av_1 ( A , v , w ) case ( 'm2' ) call mv_Av_2 ( A , v , w ) case ( 'm3' ) call mv_Av_3 ( A , v , w ) case ( 'm4' ) call mv_Av_4 ( A , v , w ) case ( 'm5' ) call mv_Av_5 ( A , v , w ) case ( 'm6' ) call mv_Av_6 ( A , v , w ) case ( 'm7' ) call mv_Av_7 ( A , v , w ) case ( 'm8' ) call mv_Av_8 ( A , v , w ) end select end subroutine mat_vec_rel_Av_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_ATv_opt ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ) :: option select case ( option ) case ( 'm1' ) call mv_ATv_1 ( A , v , w ) case ( 'm2' ) call mv_ATv_2 ( A , v , w ) case ( 'm3' ) call mv_ATv_3 ( A , v , w ) case ( 'm4' ) call mv_ATv_4 ( A , v , w ) case ( 'm5' ) call mv_ATv_5 ( A , v , w ) case ( 'm6' ) call mv_ATv_6 ( A , v , w ) case ( 'm7' ) call mv_ATv_7 ( A , v , w ) case ( 'm8' ) call mv_ATv_8 ( A , v , w ) end select end subroutine mat_vec_rel_ATv_opt !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , B ) end subroutine mm_AB_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 1 ) n = size ( A , 2 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , m , B , n , 0.0_rk , C , m ) end subroutine mm_AB_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( j , k ) end do end do end do end subroutine mm_AB_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( k , j ) end do end do end do end subroutine mm_AB_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( i , k ) end do end do end do end subroutine mm_AB_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( i , j ) end do end do end do end subroutine mm_AB_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( k , i ) end do end do end do end subroutine mm_AB_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( j , i ) end do end do end do end subroutine mm_AB_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do end subroutine mm_AB_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_AB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(:,i)) ! end do ! end do end subroutine mm_AB_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_AB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(j,i) ! end do ! end do ! end do end subroutine mm_AB_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_12 end interface call impure_mm_AB_12 ( a , b , c ) end subroutine mm_AB_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_AB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_AB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_AB_13 end interface call impure_mm_AB_13 ( a , b , c ) end subroutine mm_AB_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), B ) end subroutine mm_ATB_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n m = size ( A , 2 ) n = size ( A , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'N' , m , size ( B , 2 ), n , 1.0_rk , A , n , B , n , 0.0_rk , C , m ) end subroutine mm_ATB_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( j , k ) end do end do end do end subroutine mm_ATB_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( k , j ) end do end do end do end subroutine mm_ATB_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( i , k ) end do end do end do end subroutine mm_ATB_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( i , j ) end do end do end do end subroutine mm_ATB_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( k , i ) end do end do end do end subroutine mm_ATB_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( j , i ) end do end do end do end subroutine mm_ATB_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do end subroutine mm_ATB_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(:,i)) ! end do ! end do end subroutine mm_ATB_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(j,i) ! end do ! end do ! end do end subroutine mm_ATB_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_12 end interface call impure_mm_ATB_12 ( a , b , c ) end subroutine mm_ATB_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATB_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATB_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATB_13 end interface call impure_mm_ATB_13 ( a , b , c ) end subroutine mm_ATB_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( A , transpose ( B )) end subroutine mm_ABT_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p m = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'N' , 'T' , m , p , size ( A , 2 ), 1.0_rk , A , m , B , p , 0.0_rk , C , m ) end subroutine mm_ABT_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( i , j ) * b ( k , j ) end do end do end do end subroutine mm_ABT_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( i , k ) * b ( j , k ) end do end do end do end subroutine mm_ABT_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( j , i ) * b ( k , i ) end do end do end do end subroutine mm_ABT_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( k , i ) * b ( j , i ) end do end do end do end subroutine mm_ABT_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( j , k ) * b ( i , k ) end do end do end do end subroutine mm_ABT_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( k , j ) * b ( i , j ) end do end do end do end subroutine mm_ABT_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do end subroutine mm_ABT_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(k,:), b(i,:)) ! end do ! end do end subroutine mm_ABT_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 1 ) n = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(k,j)*b(i,j) ! end do ! end do ! end do end subroutine mm_ABT_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_12 end interface call impure_mm_ABT_12 ( a , b , c ) end subroutine mm_ABT_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ABT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ABT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ABT_13 end interface call impure_mm_ABT_13 ( a , b , c ) end subroutine mm_ABT_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_1 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) C = matmul ( transpose ( A ), transpose ( B )) end subroutine mm_ATBT_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_2 ( A , B , C ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) ! Call BLAS gemm subroutine for matrix-matrix multiplication. call gemm ( 'T' , 'T' , m , p , n , 1.0_rk , A , n , B , p , 0.0_rk , C , m ) end subroutine mm_ATBT_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_3 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , n do k = 1 , p c ( i , k ) = c ( i , k ) + a ( j , i ) * b ( k , j ) end do end do end do end subroutine mm_ATBT_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_4 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , m do j = 1 , p do k = 1 , n c ( i , j ) = c ( i , j ) + a ( k , i ) * b ( j , k ) end do end do end do end subroutine mm_ATBT_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_5 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , m do k = 1 , p c ( j , k ) = c ( j , k ) + a ( i , j ) * b ( k , i ) end do end do end do end subroutine mm_ATBT_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_6 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , n do j = 1 , p do k = 1 , m c ( k , j ) = c ( k , j ) + a ( i , k ) * b ( j , i ) end do end do end do end subroutine mm_ATBT_6 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_7 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , m do k = 1 , n c ( j , i ) = c ( j , i ) + a ( k , j ) * b ( i , k ) end do end do end do end subroutine mm_ATBT_7 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_8 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) do i = 1 , p do j = 1 , n do k = 1 , m c ( k , i ) = c ( k , i ) + a ( j , k ) * b ( i , j ) end do end do end do end subroutine mm_ATBT_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_9 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do end subroutine mm_ATBT_9 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_10 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, p) ! check shared variables ! do k = 1, m ! c(k,i) = dot_product(a(:,k), b(i,:)) ! end do ! end do end subroutine mm_ATBT_10 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_11 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) integer :: m , n , p integer :: i , j , k m = size ( A , 2 ) n = size ( A , 1 ) p = size ( B , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (i = 1: p) shared(m, n, p) ! check shared variables ! do j=1,n ! do k=1,m ! c(k,i) = c(k,i) + a(j,k)*b(i,j) ! end do ! end do ! end do end subroutine mm_ATBT_11 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_12 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_12 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_12 end interface call impure_mm_ATBT_12 ( a , b , c ) end subroutine mm_ATBT_12 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mm_ATBT_13 ( A , B , C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) interface pure subroutine impure_mm_ATBT_13 ( f_a , f_b , f_c ) import rk real ( rk ), intent ( in ) :: f_a (:,:), f_b (:,:) real ( rk ), intent ( inout ) :: f_c (:,:) end subroutine impure_mm_ATBT_13 end interface call impure_mm_ATBT_13 ( a , b , c ) end subroutine mm_ATBT_13 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( A , v ) end subroutine mv_Av_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'N' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_Av_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( i , j ) * v ( j ) end do end do end subroutine mv_Av_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 1 ) do k = 1 , m w ( k ) = dot_product ( a ( k ,:), v (:)) end do end subroutine mv_Av_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_Av_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 2 ) do k = 1 , n w (:) = w (:) + a (:, k ) * v ( k ) end do end subroutine mv_Av_6 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_Av_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(k,:), v(:)) ! end do end subroutine mv_Av_7 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_Av_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 1 ) n = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(i,j)*v(j) ! end do ! end do end subroutine mv_Av_8 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_1 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) w = matmul ( transpose ( A ), v ) end subroutine mv_ATv_1 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_2 ( A , v , w ) use external_interfaces_matmul real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m m = size ( A , 1 ) ! Call BLAS gemv subroutine for matrix-vector multiplication. call gemv ( 'T' , m , size ( A , 2 ), 1.0_rk , A , m , v , 1 , 0.0_rk , w , 1 ) end subroutine mv_ATv_2 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_3 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do i = 1 , m do j = 1 , n w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_3 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_4 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) do j = 1 , n do i = 1 , m w ( i ) = w ( i ) + a ( j , i ) * v ( j ) end do end do end subroutine mv_ATv_4 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_5 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m integer :: k m = size ( A , 2 ) do k = 1 , m w ( k ) = dot_product ( a (:, k ), v (:)) end do end subroutine mv_ATv_5 !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_6 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: n integer :: k n = size ( A , 1 ) do k = 1 , n w (:) = w (:) + a ( k ,:) * v ( k ) end do end subroutine mv_ATv_6 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_7 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: k m = size ( A , 2 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent (k = 1: m) shared(m,a,v) ! check shared variables ! w(k) = dot_product(a(:,k), v(:)) ! end do end subroutine mv_ATv_7 !=============================================================================== !=============================================================================== !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! GFORTRAN DOESNT SUPPORT SHARED ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !> author: Seyed Ali Ghasemi pure subroutine mv_ATv_8 ( A , v , w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) integer :: m , n integer :: i , j m = size ( A , 2 ) n = size ( A , 1 ) error stop 'ForMatMul: shared is not supported in gfortran' ! do concurrent(i=1:m) shared(m, n, a, v) ! check shared variables ! do j=1,n ! w(i) = w(i) + a(j,i)*v(j) ! end do ! end do end subroutine mv_ATv_8 !=============================================================================== end module formatmul_opts !> author: Seyed Ali Ghasemi impure subroutine impure_mm_AB_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_AB_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_AB_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 2 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_AB_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATB_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATB_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATB_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 2 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b (:, i )) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATB_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ABT_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ABT_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ABT_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 1 ) p = size ( B , 1 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a ( k ,:), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ABT_13 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATBT_12 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) !$OMP PARALLEL DO PRIVATE(i, k) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATBT_12 !> author: Seyed Ali Ghasemi impure subroutine impure_mm_ATBT_13 ( a , b , c ) use kinds implicit none real ( rk ), intent ( in ) :: a (:,:), b (:,:) real ( rk ), intent ( inout ) :: c (:,:) integer :: m , p integer :: i , k m = size ( A , 2 ) p = size ( B , 1 ) !$OMP PARALLEL DO DEFAULT(NONE) PRIVATE(i, k) SHARED(m, p, a, b, c) do i = 1 , p do k = 1 , m c ( k , i ) = dot_product ( a (:, k ), b ( i ,:)) end do end do !$OMP END PARALLEL DO end subroutine impure_mm_ATBT_13","tags":"","loc":"sourcefile/formatmul_opts.f90.html"},{"title":"test1.f90 – ForMatmul","text":"This file depends on sourcefile~~test1.f90~~EfferentGraph sourcefile~test1.f90 test1.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul3 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(n,o) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.1' ) C = matmul ( A , B , option = 'm1' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.2' ) C = matmul ( A , B , option = 'm2' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.3' ) C = matmul ( A , B , option = 'm3' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.4' ) C = matmul ( A , B , option = 'm4' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.5' ) C = matmul ( A , B , option = 'm5' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.6' ) C = matmul ( A , B , option = 'm6' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.7' ) C = matmul ( A , B , option = 'm7' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.8' ) C = matmul ( A , B , option = 'm8' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.9' ) C = matmul ( A , B , option = 'm9' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.10' ) ! C = matmul(A,B, option='m10') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.11') ! C = matmul(A,B, option='m11') ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.12') C = matmul ( A , B , option = 'm12' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.13' ) C = matmul ( A , B , option = 'm13' ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.14' ) C = matmul ( A , B , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.15' ) C = matmul ( A , B , option = 'm1' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.16' ) C = matmul ( A , B , option = 'm2' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.17' ) C = matmul ( A , B , option = 'm3' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.18' ) C = matmul ( A , B , option = 'm4' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.19' ) C = matmul ( A , B , option = 'm5' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.20' ) C = matmul ( A , B , option = 'm6' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.21' ) C = matmul ( A , B , option = 'm7' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.22' ) C = matmul ( A , B , option = 'm8' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.23' ) C = matmul ( A , B , option = 'm9' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.24' ) ! C = matmul(A,B, option='m10', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.25') ! C = matmul(A,B, option='m11', nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul3.26') C = matmul ( A , B , option = 'm12' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.27' ) C = matmul ( A , B , option = 'm13' , nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul3.28' ) end program test_matmul3","tags":"","loc":"sourcefile/test1.f90.html"},{"title":"test8.f90 – ForMatmul","text":"This file depends on sourcefile~~test8.f90~~EfferentGraph sourcefile~test8.f90 test8.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul10 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(n,o) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( n , o )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , B ) C = matmul ( A , B , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.1' ) C = matmul ( A , B , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.2' ) C = matmul ( A , B , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.3' ) C = matmul ( A , B , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.4' ) C = matmul ( A , B , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.5' ) C = matmul ( A , B , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.6' ) C = matmul ( A , B , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.7' ) C = matmul ( A , B , option = 'm7' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.8' ) C = matmul ( A , B , option = 'm8' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.9' ) C = matmul ( A , B , option = 'm9' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.10' ) ! C = matmul(A,B, option='m10', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.11') ! C = matmul(A,B, option='m11', coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul10.12') C = matmul ( A , B , option = 'm12' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.13' ) C = matmul ( A , B , option = 'm13' , coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul10.14' ) end program test_matmul10","tags":"","loc":"sourcefile/test8.f90.html"},{"title":"test12.f90 – ForMatmul","text":"This file depends on sourcefile~~test12.f90~~EfferentGraph sourcefile~test12.f90 test12.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul14 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(m,n).v(n) m = 500 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.1' ) w = matmul ( A , v , option = 'm1' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.2' ) w = matmul ( A , v , option = 'm2' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.3' ) w = matmul ( A , v , option = 'm3' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.4' ) w = matmul ( A , v , option = 'm4' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.5' ) w = matmul ( A , v , option = 'm5' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.6' ) w = matmul ( A , v , option = 'm6' , coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul14.7' ) ! w = matmul(A,v, option='m7', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.8') ! w = matmul(A,v, option='m8', coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul14.9') end program test_matmul14","tags":"","loc":"sourcefile/test12.f90.html"},{"title":"formatmul.f90 – ForMatmul","text":"This file depends on sourcefile~~formatmul.f90~~EfferentGraph sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Files dependent on this one sourcefile~~formatmul.f90~~AfferentGraph sourcefile~formatmul.f90 formatmul.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module formatmul use kinds use formatmul_opts implicit none private public matmul interface matmul procedure :: mat_mat_rel procedure :: mat_mat_block_rel procedure :: mat_mat_coarray_rel procedure :: mat_vec_rel procedure :: mat_vec_block_rel procedure :: mat_vec_coarray_rel ! procedure :: vec_mat_rel ! Ambiguous interface end interface matmul contains !=============================================================================== !> author: Seyed Ali Ghasemi impure function mat_mat_coarray_rel ( a , b , transA , transB , option , coarray ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB real ( rk ), allocatable :: c (:,:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: C_block (:,:)[:], B_block (:,:)[:], A_block (:,:)[:] if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B , transA = . true ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], B_block ( size ( B , 1 ), block_size ( im ))[ * ]) allocate ( C_block ( m , size ( B , 1 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:,:)[ im ], B_block (:,:)[ im ], transA = . false ., transB = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, :) = C (:, :) + C_block (:,:)[ i ] end do end if else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( A_block ( m , block_size ( im ))[ * ], C_block ( block_size ( im ), size ( B , 2 ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A_block (:, :)[ im ], B , transA = . true ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C ( start_elem ( i ): end_elem ( i ), :) = C_block (:,:)[ i ] end do end if end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () m = size ( A , 1 ) n = size ( A , 2 ) call compute_block_ranges ( size ( B , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( B_block ( n , block_size ( im ))[ * ], C_block ( m , block_size ( im ))[ * ]) B_block (:,:)[ im ] = B (:, start_elem ( im ): end_elem ( im )) C_block (:,:)[ im ] = matmul ( A , B_block (:,:)[ im ], transA = . false ., transB = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg C (:, start_elem ( i ): end_elem ( i )) = C_block (:,:)[ i ] end do end if end if #else C = matmul ( A , B , transA = transA , transB = transB , option = option ) #endif end function mat_mat_coarray_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi impure function mat_vec_coarray_rel ( A , v , transA , option , coarray ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA real ( rk ), allocatable :: w (:) logical , intent ( in ) :: coarray #if defined (USE_COARRAY) integer :: i , im , nimg , n , m integer :: block_size ( num_images ()), start_elem ( num_images ()), end_elem ( num_images ()) real ( rk ), allocatable :: w_block (:)[:], v_block (:)[:], A_block (:,:)[:] if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:, :)[ im ], v , transA = . true ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w ( start_elem ( i ): end_elem ( i )) = w_block (:)[ i ] end do end if else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) im = this_image () nimg = num_images () call compute_block_ranges ( size ( A , 2 ), nimg , block_size , start_elem , end_elem ) allocate ( w_block ( size ( A , 1 ))[ * ], v_block ( block_size ( im ))[ * ], A_block ( size ( A , 1 ), block_size ( im ))[ * ]) A_block (:,:)[ im ] = A (:, start_elem ( im ): end_elem ( im )) v_block (:)[ im ] = v ( start_elem ( im ): end_elem ( im )) w_block (:)[ im ] = matmul ( A_block (:,:)[ im ], v_block (:)[ im ], transA = . false ., option = option ) sync all if ( im == 1 ) then do i = 1 , nimg w (:) = w (:) + w_block (:)[ i ] end do end if end if #else w = matmul ( A , v , transA = transA , option = option ) #endif end function mat_vec_coarray_rel !=============================================================================== !=============================================================================== !> Calculate block sizes and ranges. !> author: Seyed Ali Ghasemi pure subroutine compute_block_ranges ( d , nimg , block_size , start_elem , end_elem ) integer , intent ( in ) :: d , nimg integer , intent ( out ) :: block_size ( nimg ), start_elem ( nimg ), end_elem ( nimg ) integer :: i , remainder block_size = d / nimg remainder = mod ( d , nimg ) block_size ( 1 : remainder ) = block_size ( 1 : remainder ) + 1 start_elem ( 1 ) = 1 do i = 2 , nimg start_elem ( i ) = start_elem ( i - 1 ) + block_size ( i - 1 ) end do end_elem ( 1 ) = block_size ( 1 ) end_elem ( 2 :) = start_elem ( 2 :) + block_size ( 2 :) - 1 ! Check if the block sizes are valid. if ( minval ( block_size ) <= 0 ) error stop 'ForDot: reduce the number of images of coarray.' end subroutine compute_block_ranges !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_mat_block_rel ( a , b , transA , transB , option , nblock ) result ( c ) real ( rk ), intent ( in ), contiguous :: a (:,:), b (:,:) logical , intent ( in ), optional :: transA , transB character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: c (:,:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . true ., option = option ) end do #endif else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, :) = C (:, :) + & matmul ( A (:, se : ee ), B (:, se : ee ), transA = . false ., transB = . true ., option = option ) end do #endif else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C ( se : ee , :) = & C ( se : ee , :) + matmul ( A (:, se : ee ), B , transA = . true ., transB = . false ., option = option ) end do #endif end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( B , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) C (:, se : ee ) = & C (:, se : ee ) + matmul ( A , B (:, se : ee ), transA = . false ., transB = . false ., option = option ) end do #endif end if end function mat_mat_block_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_vec_block_rel ( A , v , transA , option , nblock ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) logical , intent ( in ), optional :: transA character ( * ), intent ( in ), optional :: option integer , intent ( in ) :: nblock real ( rk ), allocatable :: w (:) integer :: ib , se , ee integer :: block_size ( nblock ), start_elem ( nblock ), end_elem ( nblock ) if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w ( se : ee ) = & w ( se : ee ) + matmul ( A (:, se : ee ), v , transA = . true ., option = option ) end do #endif else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call compute_block_ranges ( size ( A , 2 ), nblock , block_size , start_elem , end_elem ) #if defined(USE_DO_CONCURRENT) do concurrent ( ib = 1 : nblock ) se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #else do ib = 1 , nblock se = start_elem ( ib ) ee = end_elem ( ib ) w (:) = & w (:) + matmul ( A (:, se : ee ), v ( se : ee ), transA = . false ., option = option ) end do #endif end if end function mat_vec_block_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_mat_rel ( A , B , transA , transB , option ) result ( C ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), allocatable :: C (:,:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA , transB if ( present ( transA ) . and . present ( transB )) then if (. not . transA . and . . not . transB ) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) else if ( transA . and . transB ) then ! ATBT allocate ( C ( size ( A , 2 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ATBT ( A , B , C , option ) else if ( transA . and . . not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA . and . transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transA ) . or . present ( transB )) then if ( present ( transA )) then if ( transA ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) else if (. not . transA ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) end if else if ( present ( transB )) then if ( transB ) then ! ABT allocate ( C ( size ( A , 1 ), size ( B , 1 )), source = 0.0_rk ) call mat_mat_rel_ABT ( A , B , C , option ) else if (. not . transB ) then ! ATB allocate ( C ( size ( A , 2 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_ATB ( A , B , C , option ) end if end if else if (. not . present ( transA ) . and . . not . present ( transB )) then ! AB allocate ( C ( size ( A , 1 ), size ( B , 2 )), source = 0.0_rk ) call mat_mat_rel_AB ( A , B , C , option ) end if end function mat_mat_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure function mat_vec_rel ( A , v , transA , option ) result ( w ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), allocatable :: w (:) character ( * ), intent ( in ), optional :: option logical , intent ( in ), optional :: transA if ( present ( transA )) then if ( transA ) then ! ATv allocate ( w ( size ( A , 2 )), source = 0.0_rk ) call mat_vec_rel_ATv ( A , v , w , option ) else if (. not . transA ) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if else if (. not . present ( transA )) then ! Av allocate ( w ( size ( A , 1 )), source = 0.0_rk ) call mat_vec_rel_Av ( A , v , w , option ) end if end function mat_vec_rel !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_AB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_AB_opt ( A , B , C , option ) else call mat_mat_rel_AB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_AB !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATB ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATB_opt ( A , B , C , option ) else call mat_mat_rel_ATB_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATB !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ABT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ABT_opt ( A , B , C , option ) else call mat_mat_rel_ABT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ABT !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_mat_rel_ATBT ( A , B , C , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), B (:,:) real ( rk ), intent ( inout ), contiguous :: C (:,:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_mat_rel_ATBT_opt ( A , B , C , option ) else call mat_mat_rel_ATBT_opt ( A , B , C , 'm2' ) end if end subroutine mat_mat_rel_ATBT !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_Av ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_Av_opt ( A , v , w , option ) else call mat_vec_rel_Av_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_Av !=============================================================================== !=============================================================================== !> author: Seyed Ali Ghasemi pure subroutine mat_vec_rel_ATv ( A , v , w , option ) real ( rk ), intent ( in ), contiguous :: A (:,:), v (:) real ( rk ), intent ( inout ), contiguous :: w (:) character ( * ), intent ( in ), optional :: option if ( present ( option )) then call mat_vec_rel_ATv_opt ( A , v , w , option ) else call mat_vec_rel_ATv_opt ( A , v , w , 'm2' ) end if end subroutine mat_vec_rel_ATv !=============================================================================== ! ! Ambiguous interface ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure function vec_mat_rel(v, A, transA, option) result(w) ! real(rk), intent(in), contiguous :: v(:), A(:,:) ! real(rk), allocatable :: w(:) ! character(*), intent(in), optional :: option ! logical, intent(in), optional :: transA ! if (present(transA)) then ! if (transA) then ! ! ATv ! allocate(w(size(A,1)), source=0.0_rk) ! call vec_mat_rel_ATv(v, A, w, option) ! else if (.not. transA) then ! ! Av ! allocate(w(size(A,2)), source=0.0_rk) ! call vec_mat_rel_Av(v, A, w, option) ! end if ! else if (.not. present(transA)) then ! ! Av ! allocate(w(size(A,2)), source=0.0_rk) ! call vec_mat_rel_Av(v, A, w, option) ! end if ! end function vec_mat_rel ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_Av(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in), optional :: option ! if (present(option)) then ! call vec_mat_rel_Av_opt(v, A, w, option) ! else ! call vec_mat_rel_Av_opt(v, A, w, 'm2') ! end if ! end subroutine vec_mat_rel_Av ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_ATv(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in), optional :: option ! if (present(option)) then ! call vec_mat_rel_ATv_opt(v, A, w, option) ! else ! call vec_mat_rel_ATv_opt(v, A, w, 'm2') ! end if ! end subroutine vec_mat_rel_ATv ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_Av_opt(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in) :: option ! ! select case (option) ! ! case ('m1') ! ! call vm_vA_1(v, A, w) ! ! case ('m2') ! ! call vm_vA_2(v, A, w) ! ! case ('m3') ! ! call vm_vA_3(v, A, w) ! ! case ('m4') ! ! call vm_vA_4(v, A, w) ! ! case ('m5') ! ! call vm_vA_5(v, A, w) ! ! case ('m6') ! ! call vm_vA_6(v, A, w) ! ! case ('m7') ! ! call vm_vA_7(v, A, w) ! ! case ('m8') ! ! call vm_vA_8(v, A, w) ! ! end select ! end subroutine vec_mat_rel_Av_opt ! !=============================================================================== ! !=============================================================================== ! !> author: Seyed Ali Ghasemi ! pure subroutine vec_mat_rel_ATv_opt(v, A, w, option) ! real(rk), intent(in), contiguous :: A(:,:), v(:) ! real(rk), intent(inout), contiguous :: w(:) ! character(*), intent(in) :: option ! ! select case (option) ! ! case ('m1') ! ! call vm_vAT_1(v, A, w) ! ! case ('m2') ! ! call vm_vAT_2(v, A, w) ! ! case ('m3') ! ! call vm_vAT_3(v, A, w) ! ! case ('m4') ! ! call vm_vAT_4(v, A, w) ! ! case ('m5') ! ! call vm_vAT_5(v, A, w) ! ! case ('m6') ! ! call vm_vAT_6(v, A, w) ! ! case ('m7') ! ! call vm_vAT_7(v, A, w) ! ! case ('m8') ! ! call vm_vAT_8(v, A, w) ! ! end select ! end subroutine vec_mat_rel_ATv_opt ! !=============================================================================== end module formatmul","tags":"","loc":"sourcefile/formatmul.f90.html"},{"title":"test6.f90 – ForMatmul","text":"This file depends on sourcefile~~test6.f90~~EfferentGraph sourcefile~test6.f90 test6.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul8 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul8.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul8.18') end program test_matmul8","tags":"","loc":"sourcefile/test6.f90.html"},{"title":"test7.f90 – ForMatmul","text":"This file depends on sourcefile~~test7.f90~~EfferentGraph sourcefile~test7.f90 test7.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul9 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(n) = v(m).A(m,n) m = 100 n = 300 allocate ( A ( m , n ), v ( m )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( v , A ) w = matmul ( A , v , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.1' ) w = matmul ( A , v , option = 'm1' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.2' ) w = matmul ( A , v , option = 'm2' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.3' ) w = matmul ( A , v , option = 'm3' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.4' ) w = matmul ( A , v , option = 'm4' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.5' ) w = matmul ( A , v , option = 'm5' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.6' ) w = matmul ( A , v , option = 'm6' , transA = . true .) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.7' ) ! w = matmul(A,v, option='m7', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.8') ! w = matmul(A,v, option='m8', transA=.true.) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.9') w = matmul ( A , v , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.10' ) w = matmul ( A , v , option = 'm1' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.11' ) w = matmul ( A , v , option = 'm2' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.12' ) w = matmul ( A , v , option = 'm3' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.13' ) w = matmul ( A , v , option = 'm4' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.14' ) w = matmul ( A , v , option = 'm5' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.15' ) w = matmul ( A , v , option = 'm6' , transA = . true ., nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul9.16' ) ! w = matmul(A,v, option='m7', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.17') ! w = matmul(A,v, option='m8', transA=.true., nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul9.18') end program test_matmul9","tags":"","loc":"sourcefile/test7.f90.html"},{"title":"test13.f90 – ForMatmul","text":"This file depends on sourcefile~~test13.f90~~EfferentGraph sourcefile~test13.f90 test13.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul15 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! w(m) = A(n,m).v(n) m = 100 n = 300 allocate ( A ( n , m ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( transpose ( A ), v ) w = matmul ( A , v , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.1' ) w = matmul ( A , v , option = 'm1' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.2' ) w = matmul ( A , v , option = 'm2' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.3' ) w = matmul ( A , v , option = 'm3' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.4' ) w = matmul ( A , v , option = 'm4' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.5' ) w = matmul ( A , v , option = 'm5' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.6' ) w = matmul ( A , v , option = 'm6' , transA = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul15.7' ) ! w = matmul(A,v, option='m7', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.8') ! w = matmul(A,v, option='m8', transA=.true., coarray=.true.) ! if (im==1) call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul15.9') end program test_matmul15","tags":"","loc":"sourcefile/test13.f90.html"},{"title":"external_interfaces.f90 – ForMatmul","text":"Files dependent on this one sourcefile~~external_interfaces.f90~~AfferentGraph sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~test1.f90 test1.f90 sourcefile~test1.f90->sourcefile~formatmul.f90 sourcefile~test10.f90 test10.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~test11.f90 test11.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~test12.f90 test12.f90 sourcefile~test12.f90->sourcefile~formatmul.f90 sourcefile~test13.f90 test13.f90 sourcefile~test13.f90->sourcefile~formatmul.f90 sourcefile~test2.f90 test2.f90 sourcefile~test2.f90->sourcefile~formatmul.f90 sourcefile~test3.f90 test3.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~test4.f90 test4.f90 sourcefile~test4.f90->sourcefile~formatmul.f90 sourcefile~test5.f90 test5.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~test6.f90 test6.f90 sourcefile~test6.f90->sourcefile~formatmul.f90 sourcefile~test7.f90 test7.f90 sourcefile~test7.f90->sourcefile~formatmul.f90 sourcefile~test8.f90 test8.f90 sourcefile~test8.f90->sourcefile~formatmul.f90 sourcefile~test9.f90 test9.f90 sourcefile~test9.f90->sourcefile~formatmul.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code module external_interfaces_matmul use kinds implicit none interface gemm #if defined(REAL64) pure subroutine dgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine dgemm #elif defined(REAL32) pure subroutine sgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine sgemm #else pure subroutine dgemm ( f_transa , f_transb , f_m , f_n , f_k , f_alpha , f_a , f_lda , f_b , f_ldb , f_beta , f_c , f_ldc ) import rk integer , intent ( in ) :: f_ldc integer , intent ( in ) :: f_ldb integer , intent ( in ) :: f_lda character , intent ( in ) :: f_transa character , intent ( in ) :: f_transb integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_k real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_b ( f_ldb , * ) real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_c ( f_ldc , * ) end subroutine dgemm #endif end interface interface gemv #if defined(REAL64) pure subroutine dgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine dgemv #elif defined(REAL32) pure subroutine sgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine sgemv #else pure subroutine dgemv ( f_trans , f_m , f_n , f_alpha , f_a , f_lda , f_x , f_incx , f_beta , f_y , f_incy ) import rk integer , intent ( in ) :: f_m integer , intent ( in ) :: f_n integer , intent ( in ) :: f_lda character , intent ( in ) :: f_trans real ( rk ), intent ( in ) :: f_alpha real ( rk ), intent ( in ) :: f_a ( f_lda , * ) real ( rk ), intent ( in ) :: f_x ( * ) integer , intent ( in ) :: f_incx real ( rk ), intent ( in ) :: f_beta real ( rk ), intent ( inout ) :: f_y ( * ) integer , intent ( in ) :: f_incy end subroutine dgemv #endif end interface end module external_interfaces_matmul","tags":"","loc":"sourcefile/external_interfaces.f90.html"},{"title":"test11.f90 – ForMatmul","text":"This file depends on sourcefile~~test11.f90~~EfferentGraph sourcefile~test11.f90 test11.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test11.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul13 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(n,m).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( n , m ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( transpose ( A ), transpose ( B )) C = matmul ( A , B , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.1' ) C = matmul ( A , B , option = 'm1' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.2' ) C = matmul ( A , B , option = 'm2' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.3' ) C = matmul ( A , B , option = 'm3' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.4' ) C = matmul ( A , B , option = 'm4' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.5' ) C = matmul ( A , B , option = 'm5' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.6' ) C = matmul ( A , B , option = 'm6' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.7' ) C = matmul ( A , B , option = 'm7' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.8' ) C = matmul ( A , B , option = 'm8' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.9' ) C = matmul ( A , B , option = 'm9' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.10' ) ! C = matmul(A,B, option='m10', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.11') ! C = matmul(A,B, option='m11', transA=.true., transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul13.12') C = matmul ( A , B , option = 'm12' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.13' ) C = matmul ( A , B , option = 'm13' , transA = . true ., transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul13.14' ) end program test_matmul13","tags":"","loc":"sourcefile/test11.f90.html"},{"title":"test5.f90 – ForMatmul","text":"This file depends on sourcefile~~test5.f90~~EfferentGraph sourcefile~test5.f90 test5.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test5.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul7 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), v (:) real ( rk ), allocatable :: w_ref (:), w (:) integer :: m , n type ( unit_test ) :: ut ! w(m) = A(m,n).v(n) m = 100 n = 300 allocate ( A ( m , n ), v ( n )) call random_number ( A ) call random_number ( v ) A = A * 10 0.0_rk v = v * 10 0.0_rk w_ref = matmul ( A , v ) w = matmul ( A , v ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.1' ) w = matmul ( A , v , option = 'm1' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.2' ) w = matmul ( A , v , option = 'm2' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.3' ) w = matmul ( A , v , option = 'm3' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.4' ) w = matmul ( A , v , option = 'm4' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.5' ) w = matmul ( A , v , option = 'm5' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.6' ) w = matmul ( A , v , option = 'm6' ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.7' ) ! w = matmul(A,v, option='m7') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.8') ! w = matmul(A,v, option='m8') ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.9') w = matmul ( A , v , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.10' ) w = matmul ( A , v , option = 'm1' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.11' ) w = matmul ( A , v , option = 'm2' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.12' ) w = matmul ( A , v , option = 'm3' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.13' ) w = matmul ( A , v , option = 'm4' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.14' ) w = matmul ( A , v , option = 'm5' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.15' ) w = matmul ( A , v , option = 'm6' , nblock = 4 ) call ut % check ( w , w_ref , tol = 1e-5_rk , msg = 'test_matmul7.16' ) ! w = matmul(A,v, option='m7', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.17') ! w = matmul(A,v, option='m8', nblock=4) ! call ut%check(w, w_ref, tol=1e-5_rk, msg='test_matmul7.18') end program test_matmul7","tags":"","loc":"sourcefile/test5.f90.html"},{"title":"test10.f90 – ForMatmul","text":"This file depends on sourcefile~~test10.f90~~EfferentGraph sourcefile~test10.f90 test10.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test10.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul12 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o , im type ( unit_test ) :: ut #if defined(USE_COARRAY) im = this_image () #else im = 1 #endif ! C(m,o) = A(m,n).B(o,n) m = 500 n = 400 o = 300 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.1' ) C = matmul ( A , B , option = 'm1' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.2' ) C = matmul ( A , B , option = 'm2' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.3' ) C = matmul ( A , B , option = 'm3' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.4' ) C = matmul ( A , B , option = 'm4' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.5' ) C = matmul ( A , B , option = 'm5' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.6' ) C = matmul ( A , B , option = 'm6' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.7' ) C = matmul ( A , B , option = 'm7' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.8' ) C = matmul ( A , B , option = 'm8' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.9' ) C = matmul ( A , B , option = 'm9' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.10' ) ! C = matmul(A,B, option='m10', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.11') ! C = matmul(A,B, option='m11', transB=.true., coarray=.true.) ! if (im==1) call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul12.12') C = matmul ( A , B , option = 'm12' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.13' ) C = matmul ( A , B , option = 'm13' , transB = . true ., coarray = . true .) if ( im == 1 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul12.14' ) end program test_matmul12","tags":"","loc":"sourcefile/test10.f90.html"},{"title":"test3.f90 – ForMatmul","text":"This file depends on sourcefile~~test3.f90~~EfferentGraph sourcefile~test3.f90 test3.f90 sourcefile~formatmul.f90 formatmul.f90 sourcefile~test3.f90->sourcefile~formatmul.f90 sourcefile~formatmul_opts.f90 formatmul_opts.f90 sourcefile~formatmul.f90->sourcefile~formatmul_opts.f90 sourcefile~external_interfaces.f90 external_interfaces.f90 sourcefile~formatmul_opts.f90->sourcefile~external_interfaces.f90 Help Graph Key Nodes of different colours represent the following: Graph Key Source File Source File This Page's Entity This Page's Entity Solid arrows point from a file to a file which it depends on. A file\nis dependent upon another if the latter must be compiled before the former\ncan be. Where possible, edges connecting nodes are\ngiven different colours to make them easier to distinguish in\nlarge graphs. Source Code program test_matmul5 use kinds use formatmul use forunittest implicit none real ( rk ), allocatable :: A (:,:), B (:,:) real ( rk ), allocatable :: C_ref (:,:), C (:,:) integer :: m , n , o type ( unit_test ) :: ut ! C(m,o) = A(m,n).B(o,n) m = 300 n = 200 o = 100 allocate ( A ( m , n ), B ( o , n )) call random_number ( A ) call random_number ( B ) A = A * 10 0.0_rk B = B * 10 0.0_rk C_ref = matmul ( A , transpose ( B )) C = matmul ( A , B , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.1' ) C = matmul ( A , B , option = 'm1' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.2' ) C = matmul ( A , B , option = 'm2' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.3' ) C = matmul ( A , B , option = 'm3' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.4' ) C = matmul ( A , B , option = 'm4' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.5' ) C = matmul ( A , B , option = 'm5' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.6' ) C = matmul ( A , B , option = 'm6' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.7' ) C = matmul ( A , B , option = 'm7' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.8' ) C = matmul ( A , B , option = 'm8' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.9' ) C = matmul ( A , B , option = 'm9' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.10' ) ! C = matmul(A,B, option='m10', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.11') ! C = matmul(A,B, option='m11', transB=.true.) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.12') C = matmul ( A , B , option = 'm12' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.13' ) C = matmul ( A , B , option = 'm13' , transB = . true .) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.14' ) C = matmul ( A , B , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.15' ) C = matmul ( A , B , option = 'm1' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.16' ) C = matmul ( A , B , option = 'm2' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.17' ) C = matmul ( A , B , option = 'm3' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.18' ) C = matmul ( A , B , option = 'm4' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.19' ) C = matmul ( A , B , option = 'm5' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.20' ) C = matmul ( A , B , option = 'm6' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.21' ) C = matmul ( A , B , option = 'm7' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.22' ) C = matmul ( A , B , option = 'm8' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.23' ) C = matmul ( A , B , option = 'm9' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.24' ) ! C = matmul(A,B, option='m10', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.25') ! C = matmul(A,B, option='m11', transB=.true., nblock=4) ! call ut%check(C, C_ref, tol=1e-5_rk, msg='test_matmul5.26') C = matmul ( A , B , option = 'm12' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.27' ) C = matmul ( A , B , option = 'm13' , transB = . true ., nblock = 4 ) call ut % check ( C , C_ref , tol = 1e-5_rk , msg = 'test_matmul5.28' ) end program test_matmul5","tags":"","loc":"sourcefile/test3.f90.html"}]} \ No newline at end of file