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