Hello, I try to use MPI for solving the Fourier equation in 3D. In the code, I have the following parameters :
number of domains on Ox : x_domains number of domains on Oy : y_domains number of domains on Oz : z_domains size of grid on Ox: size_x size of grid on Oy: size_y size of grid on Oz: size_z elements per Ox domain : xcell=(size_x/x_domains) elements per Oy domain : ycell=(size_y/y_domains) elements per Oz domain : zcell=(size_z/z_domains) Total sizes of the 3D grid (including the ghost cells) : size_tot_x=size_x+2*x_domains+2 size_tot_y=size_y+2*y_domains+2 size_tot_z=size_z+2*z_domains+2 ------------------------------------------------------------ I have determined the coordinates of corners of each box as function of the rank process "me" : I have "xs(me)" (x start), "xe(me)" (x end), "ys(me)", "ye(me)", "zs(me)" and "ze(me)". Moreover, I have defined 3 types of matrix ( Oxz plan, Oxy and 0yz ) for the intercommunication between the processes. I am not sure about *the distance between two elements* in the following definition of the *matrix type* : ---------------------------------------------------------------------------------------------------------------------- ! Creation of "Matrix" type : call MPI_TYPE_VECTOR (nb_columns, nb_rows,* step_between_two_elements* , MPI_DOUBLE_PRECISION ,* matrix_type *,code) ----------------------------------------------------------------------------------------------------------------------- Here are the part of the code where I have defined the 3 types of Matrix : ----------------------------------------------------------------------------------------------------------------------- ! Create matrix data type to communicate on horizontal Oxz plan CALL MPI_TYPE_VECTOR( xcell, zcell, *size_tot_y*, MPI_DOUBLE_PRECISION & , matrix_type_oxz, infompi) CALL MPI_TYPE_COMMIT(matrix_type_oxz, infompi) ----------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------- ! Create matrix data type to communicate on vertical Oxy plan CALL MPI_TYPE_VECTOR( xcell, ycell, *size_tot_z*, MPI_DOUBLE_PRECISION & , matrix_type_oxy, infompi) CALL MPI_TYPE_COMMIT(matrix_type_oxy, infompi) ----------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------- ! Create matrix data type to communicate on vertical Oyz plan CALL MPI_TYPE_VECTOR( zcell, ycell, *size_tot_x*, MPI_DOUBLE_PRECISION & , matrix_type_oyz, infompi) CALL MPI_TYPE_COMMIT(matrix_type_oyz, infompi) ----------------------------------------------------------------------------------------------------------------------- As you can see, I have doubts about the contiguous distance (*size_tot_x, size_tot_y, size_tot_z*) for the 3 types above. For the 2D case, I use the row_type and the contiguous distance is "size_tot_y" but for 3D, I don't know . Could you help me please ? Thanks.