1subroutine transform_columns_&
3&(obj, col1, col2, na, tmp, l_rqs, l_rqe, q, ldq, matrixcols, &
4 l_rows, mpi_comm_cols, p_col, l_col, qtrans)
7#ifdef WITH_OPENMP_TRADITIONAL
13 integer(kind=ik),
intent(in) :: na, l_rqs, l_rqe, ldq, matrixCols
14 integer(kind=ik),
intent(in) :: l_rows, mpi_comm_cols
15 integer(kind=ik),
intent(in) :: p_col(na), l_col(na)
16#ifdef USE_ASSUMED_SIZE
17 real(kind=real_datatype),
intent(inout) :: q(ldq,*)
19 real(kind=real_datatype),
intent(inout) :: q(ldq,matrixcols)
21 real(kind=real_datatype),
intent(in) :: qtrans(2,2)
23 integer(kind=MPI_KIND) :: mpierrMPI, my_pcolMPI
24 integer(kind=ik) :: mpierr
26 integer(kind=ik) :: my_pcol
27 integer(kind=ik) :: col1, col2
28 real(kind=real_datatype) :: tmp(na)
29 integer(kind=ik) :: pc1, pc2, lc1, lc2
34 call obj%timer%start(
"mpi_communication")
35 call mpi_comm_rank(int(mpi_comm_cols,kind=mpi_kind) ,my_pcolmpi, mpierr)
38 my_pcol = int(my_pcolmpi,kind=c_int)
41 call obj%timer%stop(
"mpi_communication")
49 if (pc1==my_pcol)
then
50 if (pc2==my_pcol)
then
52 tmp(1:l_rows) = q(l_rqs:l_rqe,lc1)*qtrans(1,1) + q(l_rqs:l_rqe,lc2)*qtrans(2,1)
53 q(l_rqs:l_rqe,lc2) = q(l_rqs:l_rqe,lc1)*qtrans(1,2) + q(l_rqs:l_rqe,lc2)*qtrans(2,2)
54 q(l_rqs:l_rqe,lc1) = tmp(1:l_rows)
57 call obj%timer%start(
"mpi_communication")
58 call mpi_sendrecv(q(l_rqs,lc1), int(l_rows,kind=mpi_kind), mpi_real_precision, pc2, 1_mpi_kind, &
59 tmp, int(l_rows,kind=mpi_kind), mpi_real_precision, pc2, 1_mpi_kind, &
60 int(mpi_comm_cols,kind=mpi_kind), mpi_status_ignore, mpierr)
61 call obj%timer%stop(
"mpi_communication")
64 q(l_rqs:l_rqe,lc1) = q(l_rqs:l_rqe,lc1)*qtrans(1,1) + tmp(1:l_rows)*qtrans(2,1)
66 else if (pc2==my_pcol)
then
68 call obj%timer%start(
"mpi_communication")
69 call mpi_sendrecv(q(l_rqs,lc2), int(l_rows,kind=mpi_kind), mpi_real_precision, pc1, 1_mpi_kind, &
70 tmp, int(l_rows,kind=mpi_kind), mpi_real_precision, pc1, 1_mpi_kind, &
71 int(mpi_comm_cols,kind=mpi_kind), mpi_status_ignore, mpierr)
72 call obj%timer%stop(
"mpi_communication")
74 tmp(1:l_rows) = q(l_rqs:l_rqe,lc2)
77 q(l_rqs:l_rqe,lc2) = tmp(1:l_rows)*qtrans(1,2) + q(l_rqs:l_rqe,lc2)*qtrans(2,2)