From 82ed9b5ae27a2721b3938900b54c8f72a0399282 Mon Sep 17 00:00:00 2001
From: David Goz <david.goz@inaf.it>
Date: Sat, 22 Jun 2024 16:23:40 +0200
Subject: [PATCH] mpi/comp_comm_io MPI I/O added

---
 .../comp_comm/src/jacobi_2D_mpi_comp_comm.c   |  37 +-
 jacobi/mpi/comp_comm_io/Makefile              |  61 ++
 jacobi/mpi/comp_comm_io/include/allvars.h     |  20 +
 jacobi/mpi/comp_comm_io/include/tools.h       |  18 +
 jacobi/mpi/comp_comm_io/make.def              |  45 ++
 jacobi/mpi/comp_comm_io/make_mpi_path         |  10 +
 .../mpi/comp_comm_io/script/input_parameters  |  10 +
 jacobi/mpi/comp_comm_io/script/run_pleiadi.sh |  53 ++
 .../src/jacobi_2D_mpi_comp_comm_io.c          | 597 ++++++++++++++++++
 jacobi/mpi/comp_comm_io/src/tools.c           |  59 ++
 jacobi/mpi/miscellaneous/cartesian            | Bin 0 -> 78664 bytes
 .../{cartesian.cpp => cartesian.c}            |  26 +-
 jacobi/mpi/miscellaneous/subarray             | Bin 0 -> 80392 bytes
 jacobi/mpi/miscellaneous/subarray.c           | 114 ++++
 14 files changed, 1027 insertions(+), 23 deletions(-)
 create mode 100644 jacobi/mpi/comp_comm_io/Makefile
 create mode 100644 jacobi/mpi/comp_comm_io/include/allvars.h
 create mode 100644 jacobi/mpi/comp_comm_io/include/tools.h
 create mode 100644 jacobi/mpi/comp_comm_io/make.def
 create mode 100644 jacobi/mpi/comp_comm_io/make_mpi_path
 create mode 100644 jacobi/mpi/comp_comm_io/script/input_parameters
 create mode 100755 jacobi/mpi/comp_comm_io/script/run_pleiadi.sh
 create mode 100644 jacobi/mpi/comp_comm_io/src/jacobi_2D_mpi_comp_comm_io.c
 create mode 100644 jacobi/mpi/comp_comm_io/src/tools.c
 create mode 100755 jacobi/mpi/miscellaneous/cartesian
 rename jacobi/mpi/miscellaneous/{cartesian.cpp => cartesian.c} (64%)
 create mode 100755 jacobi/mpi/miscellaneous/subarray
 create mode 100644 jacobi/mpi/miscellaneous/subarray.c

diff --git a/jacobi/mpi/comp_comm/src/jacobi_2D_mpi_comp_comm.c b/jacobi/mpi/comp_comm/src/jacobi_2D_mpi_comp_comm.c
index d4de3f4..0d97871 100644
--- a/jacobi/mpi/comp_comm/src/jacobi_2D_mpi_comp_comm.c
+++ b/jacobi/mpi/comp_comm/src/jacobi_2D_mpi_comp_comm.c
@@ -136,7 +136,7 @@ int main(int argc, char **argv)
   
   /************************************************************************************************************/
   /* 2D MPI-cartesian decomposition:
-     the grids are distributed across the MPI processes.
+     the grids are distributed across the MPI processes. */
 
   /* get the reminder, i.e. take into account uneven
      decomposition of points among the processes    */
@@ -593,7 +593,6 @@ void get_domains(MyData  **const buffer,
   int *recvcounts = NULL;
   int *displs = NULL;
   MyData *recvbuf = NULL;
-  MyData *sendbuf = NULL;
   
   if (ThisTask->rank == MASTERTASK)
     {
@@ -618,19 +617,37 @@ void get_domains(MyData  **const buffer,
       assert(recvbuf != NULL);
     } /* MASTERTASK */
 
-  /* every process sets up the sendbuf */
-  sendbuf = (MyData *)malloc(ThisTask->domain.dim[X] * ThisTask->domain.dim[Y] * sizeof(*sendbuf));
-  assert(sendbuf != NULL);
-  /* store the actual grid owned by each process into sendbuf */
-  for (int row=0 ; row<ThisTask->domain.dim[X] ; row++)
-    memcpy(&sendbuf[row * ThisTask->domain.dim[Y]], &buffer[ThisTask->domain.local_start[X] + row][ThisTask->domain.local_start[Y]], (ThisTask->domain.dim[Y] * sizeof(MyData)));
+  /*************************************** CUSTOM subarray ******************************************************************************/
+  /* Do not do that !!!                                                                                                                 */
+  /* Use instead MPI_Type_create_subarray                                                                                               */
+  /*                                                                                                                                    */
+  /* MyData *subarray = (MyData *)malloc(ThisTask->domain.dim[X] * ThisTask->domain.dim[Y] * sizeof(*subarray));                        */
+  /* for (int row=0 ; row<ThisTask->domain.dim[X] ; row++)                                                                              */
+  /*   memcpy(&sendbuf[row * ThisTask->domain.dim[Y]], &buffer[ThisTask->domain.local_start[X] + row][ThisTask->domain.local_start[Y]], */
+  /*            (ThisTask->domain.dim[Y] * sizeof(MyData)));                                                                            */
+  /*                                                                                                                                    */
+  /* Perform MPI_Gatherv collective...                                                                                                  */
+  /*                                                                                                                                    */
+  /* MPI_Gatherv(sendbuf, (ThisTask->domain.dim[X] * ThisTask->domain.dim[Y]), MPI_MyDatatype,                                          */
+  /*             recvbuf, recvcounts, displs, MPI_MyDatatype,                                                                           */
+  /*             MASTERTASK, ThisTask->comm2d);                                                                                         */
+  /**************************************************************************************************************************************/
+  
+  /* every process sets up the subarray */
+  MPI_Datatype subarray;
+  const int subsize[NDIM] = {ThisTask->domain.dim[X], ThisTask->domain.dim[Y]};
+  const int bigsize[NDIM] = {subsize[X] + 2 *NGHOST, subsize[Y] + 2 *NGHOST};
+  const int start[NDIM] = {NGHOST, NGHOST};
+  MPI_Type_create_subarray(NDIM, bigsize, subsize, start, MPI_ORDER_C, MPI_MyDatatype, &subarray);
+  MPI_Type_commit(&subarray);
   
   /* perform the MPI collective */
-  MPI_Gatherv(sendbuf, (ThisTask->domain.dim[X] * ThisTask->domain.dim[Y]), MPI_MyDatatype,
+  MPI_Gatherv(&buffer[0][0], 1, subarray,
 	      recvbuf, recvcounts, displs, MPI_MyDatatype,
 	      MASTERTASK, ThisTask->comm2d);
 
-  free(sendbuf);
+  MPI_Type_free(&subarray);
+
   if (ThisTask->rank == MASTERTASK)
     {
       free(recvcounts);
diff --git a/jacobi/mpi/comp_comm_io/Makefile b/jacobi/mpi/comp_comm_io/Makefile
new file mode 100644
index 0000000..f83868e
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/Makefile
@@ -0,0 +1,61 @@
+#######################################################################
+# Author: David Goz (david.goz@inaf.it)                               #
+# June  2024                                                          #
+#######################################################################
+#
+# To see all the compilation options
+# $ make info
+#######################################################################
+
+# make.def defines how the application is compiled
+include make.def
+include make_mpi_path
+#######################################################################
+
+.PHONY: info mpi valgrind_memcheck valgrind_callgrind valgrind_cachegrind clean
+
+info:
+	@echo ' '
+	@echo '-----------------------------------------------------------------------------------------'
+	@echo '$$ make mpi                 ---> compile the mpi application                             '
+	@echo '$$ make debug               ---> compile the mpi application for debugging               '
+	@echo '$$ make valgrind_memcheck   ---> run the mpi application using Valgrind under Memcheck   '
+	@echo '$$ make valgrind_callgrind  ---> run the mpi application using Valgrind under Callgrind  '
+	@echo '$$ make valgrind_cachegrind ---> run the mpi application using Valgrind under Cachegrind '
+	@echo '$$ make clean               ---> clean up all                                            '
+	@echo '$$ make info                ---> get make info                                           '
+	@echo '-----------------------------------------------------------------------------------------'
+	@echo ' '
+
+mpi: $(PROG)
+
+debug: $(PROG_DEBUG)
+
+valgrind_memcheck: $(PROG_MEMCHECK)
+	@echo 'oooOOO... valgrind_memcheck ...OOOooo'
+	mpirun -n 4 valgrind --tool=memcheck -s --default-suppressions=yes --log-file=valgrind_memcheck_log_%p.txt ./$< 9 2
+	@echo 'oooOOO... valgrind_memcheck ...OOOooo'
+
+valgrind_callgrind: $(PROG_CALLGRIND)
+	@echo 'oooOOO... valgrind_callgrind ...OOOooo'
+	mpirun -n 4 valgrind --tool=callgrind --dump-instr=yes --collect-jumps=yes --log-file=valgrind_callgrind_log_.%p.txt ./$< 9 2
+	@echo ' '
+	@echo 'To generate a function-by-function summary from the profile data file:'
+	@echo '$$ callgrind_annotate --auto=yes callgrind.out.<pid> | less'
+	@echo '(kcachegrind is required in order to visualize the output using the GUI)'
+
+valgrind_cachegrind: $(PROG_CACHEGRIND)
+	@echo 'oooOOO... valgrind_cachegrind ...OOOooo'
+	mpirun -n 4 valgrind --tool=cachegrind --log-file=valgrind_cachegrind_log_.%p.txt ./$< 9 2
+	@echo '$$ cg_annotate --auto=yes cachegrind.out.<pid> | less'
+	@echo '(kcachegrind is required in order to visualize the output using the GUI)'
+	@echo 'oooOOO... valgrind_cachegrind ...OOOooo'
+
+clean:
+	rm -f *~ .*~ ./src/*~ ./src/*# ./include/*~ ./include/*# *~
+	rm -f $(PROG) $(PROG_DEBUG) $(PROG_MEMCHECK) $(PROG_CALLGRIND) $(PROG_CACHEGRIND)
+	rm -f valgrind_*.txt
+	rm -f cachegrind.out.*
+	rm -f callgrind.*
+	rm -f *bin
+	rm -f jacobi_mpi_comp_comm_*
diff --git a/jacobi/mpi/comp_comm_io/include/allvars.h b/jacobi/mpi/comp_comm_io/include/allvars.h
new file mode 100644
index 0000000..c065228
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/include/allvars.h
@@ -0,0 +1,20 @@
+#pragma once
+
+#define NGHOST   1
+#define NDIM     2 /* 2D */
+#define X        0
+#define Y        1
+#define TOL      1.e-5
+
+#include <mpi.h>
+
+#define MASTERTASK 0
+
+#if defined(SINGLE_PRECISION)
+typedef float MyData;
+#define MPI_MyDatatype MPI_FLOAT_PRECISION
+#else
+/* double precision is assumed by default */
+typedef double MyData;
+#define MPI_MyDatatype     MPI_DOUBLE_PRECISION
+#endif /* SINGLE_PRECISION */
diff --git a/jacobi/mpi/comp_comm_io/include/tools.h b/jacobi/mpi/comp_comm_io/include/tools.h
new file mode 100644
index 0000000..0167c89
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/include/tools.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "allvars.h"
+#include <assert.h>
+#include <sys/time.h>
+#include <time.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+/* function prototypes */
+MyData **Allocate_2DdblArray(const int nx, const int ny);
+void Show_2DdblArray(      MyData **const A,
+                     const int            nx,
+                     const int            ny,
+                     const char *const    string);
+
+double seconds(void);
diff --git a/jacobi/mpi/comp_comm_io/make.def b/jacobi/mpi/comp_comm_io/make.def
new file mode 100644
index 0000000..911e341
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/make.def
@@ -0,0 +1,45 @@
+CC     = mpicc
+CFLAGS = -Wall -Wextra -march=native
+LIBS   = -lm -lmpi
+
+SYSTYPE = $(strip $(shell uname -n))
+
+PROG            = jacobi_mpi_comp_comm_$(SYSTYPE)
+PROG_DEBUG      = $(PROG)_DEBUG
+PROG_MEMCHECK   = $(PROG)_MEMCHECK
+PROG_CALLGRIND  = $(PROG)_CALLGRIND
+PROG_CACHEGRIND = $(PROG)_CACHEGRIND
+
+HEADERS       = $(wildcard ./include/*.h)
+SOURCES       = $(wildcard ./src/*.c)
+DEPENDENCIES  = $(SOURCES) $(HEADERS) Makefile
+
+$(PROG): $(DEPENDENCIES)
+	$(CC) $(CFLAGS) -O3 -I./include -I$(MPI_INC) $(SOURCES) -o $@ -L$(MPI_LIB) $(LIBS)
+	@echo ' '
+	@echo 'Program' $(PROG) 'compiled for' $(SYSTYPE) 'machine'
+	@echo ' '
+
+$(PROG_DEBUG): $(DEPENDENCIES)
+	$(CC) $(CFLAGS) -Og -ggdb3 -DDEBUG -fno-omit-frame-pointer -I./include -I$(MPI_INC) $(SOURCES) -o $@ -L$(MPI_LIB) $(LIBS)
+	@echo ' '
+	@echo 'Program' $(PROG_DEBUG) 'compiled for' $(SYSTYPE) 'machine'
+	@echo ' '
+
+$(PROG_MEMCHECK): $(DEPENDENCIES)
+	$(CC) $(CFLAGS) -Og -I./include -I$(MPI_INC) $(SOURCES) -o $@ -L$(MPI_LIB) $(LIBS)
+	@echo ' '
+	@echo 'Program' $(PROG_MEMCHECK) 'compiled for' $(SYSTYPE) 'machine'
+	@echo ' '
+
+$(PROG_CALLGRIND): $(DEPENDENCIES)
+	$(CC) $(CFLAGS) -g -O3 -I./include -I$(MPI_INC) $(SOURCES) -o $@ -L$(MPI_LIB) $(LIBS)
+	@echo ' '
+	@echo 'Program' $(PROG_CALLGRIND) 'compiled for' $(SYSTYPE) 'machine'
+	@echo ' '
+
+$(PROG_CACHEGRIND): $(DEPENDENCIES)
+	$(CC) $(CFLAGS) -g -O3 -I./include -I$(MPI_INC) $(SOURCES) -o $@ -L$(MPI_LIB) $(LIBS)
+	@echo ' '
+	@echo 'Program' $(PROG_CACHEGRIND) 'compiled for' $(SYSTYPE) 'machine'
+	@echo ' '
diff --git a/jacobi/mpi/comp_comm_io/make_mpi_path b/jacobi/mpi/comp_comm_io/make_mpi_path
new file mode 100644
index 0000000..3fdf888
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/make_mpi_path
@@ -0,0 +1,10 @@
+# set the MPI install path
+
+# pleiadi
+MPI_INSTALL_PATH = /opt/cluster/spack/opt/spack/linux-centos7-broadwell/gcc-11.2.0/openmpi-4.1.3-djxjqlmzbqwq76bhh3wvgxaefnoczleg
+
+
+
+MPI        = $(MPI_INSTALL_PATH)
+MPI_INC    = $(MPI)/include
+MPI_LIB    = $(MPI)/lib
\ No newline at end of file
diff --git a/jacobi/mpi/comp_comm_io/script/input_parameters b/jacobi/mpi/comp_comm_io/script/input_parameters
new file mode 100644
index 0000000..53a1b43
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/script/input_parameters
@@ -0,0 +1,10 @@
+##########################################################################
+
+# set the grid size
+
+GRID_SIZE_X=128
+GRID_SIZE_Y=128
+
+TASKS=(2 4 8 16)
+
+##########################################################################
diff --git a/jacobi/mpi/comp_comm_io/script/run_pleiadi.sh b/jacobi/mpi/comp_comm_io/script/run_pleiadi.sh
new file mode 100755
index 0000000..225dedb
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/script/run_pleiadi.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+######################### RESOURSE ALLOCATION #####################################
+##SBATCH --account=????????
+
+#SBATCH --partition=pleiadi
+#SBATCH --job-name="Jacobi"
+#SBATCH --nodes=1
+#SBATCH --exclusive
+#SBATCH --output=Jacobi-mpi-comp-comm-%j.out
+#SBATCH --error=Jacobi-mpi-comp-comm.%j.err
+#SBATCH --time=00:05:00
+###################################################################################
+
+################################## MODULES ########################################
+export MODULE_VERSION=5.0.1
+source /opt/cluster/spack/share/spack/setup-env.sh
+
+# module purge
+module purge
+# load GCC
+module load default-gcc-11.2.0
+###################################################################################
+
+# input parameters
+source input_parameters
+
+WORKDIR=${PWD}
+# compile the application
+cd .. && make clean && make mpi
+if [[ "$?" != "0" ]]
+then
+    echo "Cannot compile the application ...aborting..."
+    exit 1
+fi
+
+# get the executable
+EXEC=$(find $(realpath ./) -maxdepth 1 -executable -name "jacobi_*" -type f -print)
+if [[ "$?" != "0" ]]
+then
+    echo "Cannot find the executable ...aborting..."
+    exit 2
+fi
+
+for TASK in ${TASKS[@]}
+do
+    # run the application
+    time mpirun -n ${TASK} ${EXEC} ${GRID_SIZE_X} ${GRID_SIZE_Y} |& tee ${EXEC}_TASK_${TASK}_output.txt
+done
+
+cd ${WORKDIR}
+
+exit 0
diff --git a/jacobi/mpi/comp_comm_io/src/jacobi_2D_mpi_comp_comm_io.c b/jacobi/mpi/comp_comm_io/src/jacobi_2D_mpi_comp_comm_io.c
new file mode 100644
index 0000000..9522d6c
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/src/jacobi_2D_mpi_comp_comm_io.c
@@ -0,0 +1,597 @@
+/* ///////////////////////////////////////////////////////////////////// */
+/* Authors:  A. Mignone (mignone@to.infn.it)                             */
+/*           V. Cesare  (valentina.cesare@inaf.it)                       */
+/*           D. Goz     (david.goz@inaf.it)                              */
+/*                                                                       */
+/* Date   : June 2024                                                    */
+/*                                                                       */
+/* ///////////////////////////////////////////////////////////////////// */
+
+#include "allvars.h"
+#include "tools.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <string.h>
+
+static int NX_GLOB, NY_GLOB;
+
+typedef struct MyGrid
+{
+  int local_start[NDIM];  /* Local start index in each dimension  */   
+  int local_end[NDIM];    /* Local end index in each dimension    */ 
+  int global_start[NDIM]; /* Global start index in each dimension */
+  int global_end[NDIM];   /* Global end index in each dimension   */
+  int dim[NDIM];          /* Local domain size (no ghosts)        */
+} myDomain;
+
+
+typedef struct Task_2D_Cartesian
+{
+  int rank;              /* Local process rank                            */
+  int nranks;            /* Communicator size                             */
+  int coords[NDIM];      /* Cartesian topology coordinate                 */
+  myDomain domain;       /* MyGrid structure (defined above)              */
+  int nbrtop;            /* Top neighbor process in cartesian topology    */
+  int nbrbottom;         /* Bottom neighbor process in cartesian topology */
+  int nbrleft;           /* Left neighbor process in cartesian topology   */
+  int nbrright;          /* Right neighbor process in cartesian topology  */
+  MPI_Comm comm2d;       /* Cartesian communicator                        */
+} Task;
+
+/* function prototypes */
+void BoundaryConditions(MyData **const restrict,
+			MyData  *const restrict,
+			MyData  *const restrict,
+			Task    *const restrict);
+
+void JacobiAlgorithm(MyData **const restrict, MyData **const restrict, const MyData *restrict,
+		     const int, const int, const int, const int, MyData *const restrict);
+
+void Jacobi_Communication(MyData      **const restrict Phi,
+			  MyData      **const restrict Phi0,
+			  MyData   *const restrict error,
+			  const MyData *      restrict delta,
+			  Task         *const restrict ThisTask);
+
+/* void WriteSolution(MyData **const phi, const int nx, const int ny); */
+void WriteSolutionParallel(MyData **const phi, Task *const ThisTask);
+
+int main(int argc, char **argv)
+{
+  int rank, Nranks;
+  const MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Init(&argc, &argv);
+  MPI_Comm_rank(comm, &rank);
+  MPI_Comm_size(comm, &Nranks);
+
+  if ((argc <= 2) && (!rank))
+    {
+      printf("\n\t Usage: <executable> <grid_size> <cartesian communicator size_X>\n\n");
+      MPI_Abort(comm, EXIT_FAILURE);
+      exit(EXIT_FAILURE);
+    }
+
+  /* global X and Y grid size (square matrix supposed) */
+  NX_GLOB = (int) strtol(argv[1], NULL, 10);
+  NY_GLOB = NX_GLOB;
+
+  /********************************** Cartesin topology *******************************************************/
+  const int cartesian_grid_x = (int)strtol(argv[2], NULL, 10);
+  const int cartesian_grid_y = ((Nranks % cartesian_grid_x == 0) ? (Nranks / cartesian_grid_x) : -1);
+  if (cartesian_grid_y == -1)
+    {
+      if (!rank)
+        {
+          printf("\n\t Nranks mod cartesian_grid_x != 0 ... aborting ...\n");
+          MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
+          exit(EXIT_FAILURE);
+        }
+    }
+  
+  const int dims[NDIM] = {cartesian_grid_x, cartesian_grid_y};
+  const int periods[NDIM] = {0 ,0}; /* not periodic */
+  const int reorder = 0;            /* setting the logical value reorder to TRUE allows MPI    */
+                                    /* to reorder the rank of the processes figuring out the   */
+                                    /* neighbors in the actual hardware for better performance */
+
+  /* make a new communicator to which topology information has been attached */
+  Task ThisTask;
+  ThisTask.comm2d = MPI_COMM_NULL;
+  MPI_Cart_create(MPI_COMM_WORLD, NDIM, dims, periods, reorder, &ThisTask.comm2d);
+  if (ThisTask.comm2d == MPI_COMM_NULL)
+    {
+      printf("\n\t Process %d is not part of the new communicator \n", rank);
+      fflush(stdout);
+      MPI_Abort(comm, EXIT_FAILURE);
+      exit(EXIT_FAILURE);
+    }
+
+  /* get the comm size */
+  MPI_Comm_size(ThisTask.comm2d, &ThisTask.nranks);
+  
+  /* determine the process coords in cartesian topology given rank in group */
+  MPI_Cart_coords(ThisTask.comm2d, rank, NDIM, ThisTask.coords);
+
+  /* determines process rank in communicator given Cartesian location */
+  MPI_Cart_rank(ThisTask.comm2d, ThisTask.coords, &ThisTask.rank);
+  
+  /* get bottom and top neighbors (X direction) */
+  MPI_Cart_shift(ThisTask.comm2d, X, 1, &ThisTask.nbrbottom, &ThisTask.nbrtop);
+
+  /* get left and right neighbors (Y direction) */
+  MPI_Cart_shift(ThisTask.comm2d, Y, 1, &ThisTask.nbrleft, &ThisTask.nbrright);
+  
+  /************************************************************************************************************/
+  /* 2D MPI-cartesian decomposition:
+     the grids are distributed across the MPI processes. */
+
+  /* get the reminder, i.e. take into account uneven
+     decomposition of points among the processes    */
+  const int rem[NDIM] = {(NX_GLOB + 2) % dims[X],
+                         (NY_GLOB + 2) % dims[Y]};
+
+  /* get the amount of data for each MPI process:
+     - chunk is supposed to be >= 1 */
+  const int chunk[NDIM] = {(NX_GLOB + 2 - rem[X]) / dims[X],
+                           (NY_GLOB + 2 - rem[Y]) / dims[Y]};
+  if ((chunk[X] < 1) || (chunk[Y] < 1))
+    {
+      printf("\n\t chunk[X] < 1 || chunk[Y] < 1 ... aborting ...[rank: %d]\n", rank);
+      MPI_Comm_free(&ThisTask.comm2d);
+      MPI_Abort(comm, EXIT_FAILURE);
+      exit(EXIT_FAILURE);
+    }
+  
+  /* get the subgrid dimension along X and Y directions: */
+  int incr[NDIM], offset[NDIM];
+  for (int dim=0 ; dim<NDIM ; dim++)
+    {
+      if (ThisTask.coords[dim] < rem[dim])
+	{
+	  incr[dim] = chunk[dim] + 1;
+	  offset[dim] = 0;
+	}
+      else
+	{
+	  incr[dim] = chunk[dim];
+	  offset[dim] = rem[dim];
+	}
+    }
+
+  /* subdomain managed by the task */
+  for (int dim=0 ; dim<NDIM ; dim++)
+    {
+      ThisTask.domain.global_start[dim] = ((ThisTask.coords[dim] * incr[dim]) + offset[dim]);
+      ThisTask.domain.global_end[dim]   = (ThisTask.domain.global_start[dim] + incr[dim]) - 1;
+
+      /* boundaries */
+      ThisTask.domain.global_start[dim] = ((ThisTask.domain.global_start[dim] == 0)         ? NGHOST  : ThisTask.domain.global_start[dim]);
+      ThisTask.domain.global_end[dim]   = ((ThisTask.domain.global_end[dim] == NX_GLOB + 1) ? NX_GLOB : ThisTask.domain.global_end[dim]);
+
+      ThisTask.domain.dim[X] = (ThisTask.domain.global_end[X] - ThisTask.domain.global_start[X] + 1);
+      ThisTask.domain.dim[Y] = (ThisTask.domain.global_end[Y] - ThisTask.domain.global_start[Y] + 1);
+
+      /* local index */
+      ThisTask.domain.local_start[X] = ThisTask.domain.local_start[Y] = 1;
+      ThisTask.domain.local_end[X]   = ThisTask.domain.dim[X];
+      ThisTask.domain.local_end[Y]   = ThisTask.domain.dim[Y];
+    }
+
+#if defined(DEBUG)
+  for (int task=0 ; task<ThisTask.nranks ; task++)
+    {
+      if (ThisTask.rank == task)
+	{
+	  printf("\n\t rank: %d", task);
+	  printf("\n\t\t coords = [%d, %d]", ThisTask.coords[X], ThisTask.coords[Y]);
+	  printf("\n\t\t domain.global_start[X] = %d - domain.global_end[X] = %d", ThisTask.domain.global_start[X], ThisTask.domain.global_end[X]);
+	  printf("\n\t\t domain.global_start[Y] = %d - domain.global_end[Y] = %d", ThisTask.domain.global_start[Y], ThisTask.domain.global_end[Y]);
+	  printf("\n\t\t domain.local_start[X]  = %d - domain.local_end[X]  = %d", ThisTask.domain.local_start[X],  ThisTask.domain.local_end[X]);
+	  printf("\n\t\t domain.local_start[Y]  = %d - domain.local_end[Y]  = %d", ThisTask.domain.local_start[Y],  ThisTask.domain.local_end[Y]);
+	  printf("\n\t\t domain.dim[X]          = %d - domain.dim[Y] = %d", ThisTask.domain.dim[X], ThisTask.domain.dim[Y]);
+	  printf("\n\t\t nbrtop  = %d - nbrbottom = %d",  ThisTask.nbrtop,  ThisTask.nbrbottom);
+	  printf("\n\t\t nbrleft = %d - nbrright  = %d\n", ThisTask.nbrleft, ThisTask.nbrright);
+	  fflush(stdout);
+	}
+      MPI_Barrier(ThisTask.comm2d);
+    }
+#endif /* DEBUG */
+  
+  /******************************************************************************************************/
+  
+  const MyData xbeg = 0.0;
+  const MyData xend = 1.0;
+  const MyData ybeg = 0.0;
+  const MyData yend = 1.0;
+
+  const MyData delta[NDIM] = {(xend - xbeg)/(NX_GLOB + 1),
+			      (yend - ybeg)/(NY_GLOB + 1)};
+
+  /* --------------------------------------------------------
+     1. Set grid indices
+     -------------------------------------------------------- */
+    
+  const int ibeg = NGHOST;
+  const int jbeg = NGHOST;
+  
+  /* --------------------------------------------------------
+     2. Generate grids, allocate memory
+        distributed across MPI processes
+     -------------------------------------------------------- */
+
+  /* memory allocation */
+  MyData *xg = (MyData *) malloc((NX_GLOB + 2*NGHOST) * sizeof(MyData));
+  MyData *yg = (MyData *) malloc((NY_GLOB + 2*NGHOST) * sizeof(MyData));
+  assert((xg != NULL) && (yg != NULL));
+
+  /* initial conditions */
+  for (int i=0 ; i<(NX_GLOB + 2*NGHOST) ; i++) xg[i] = xbeg + (i - ibeg + 1) * delta[X];
+  for (int j=0 ; j<(NY_GLOB + 2*NGHOST) ; j++) yg[j] = ybeg + (j - jbeg + 1) * delta[Y];
+
+  /* grids memory allocation distributed across MPI processes */
+  MyData **phi  = Allocate_2DdblArray(ThisTask.domain.dim[X] + 2, ThisTask.domain.dim[Y] + 2);
+  MyData **phi0 = Allocate_2DdblArray(ThisTask.domain.dim[X] + 2, ThisTask.domain.dim[Y] + 2);
+
+  /* --------------------------------------------------------
+     3. Set boundary conditions
+     -------------------------------------------------------- */
+  BoundaryConditions(phi0, xg, yg, &ThisTask);
+  BoundaryConditions(phi,  xg, yg, &ThisTask);
+  free(yg);
+  free(xg);
+  
+  /* --------------------------------------------------------
+     4. Main iteration cycle
+     -------------------------------------------------------- */
+
+  const double time_start = MPI_Wtime();
+  
+  /* iterations */
+  int k = 0;
+  while (1)
+    {
+      /* -- 4a. Jacobi algorithm overlapping computation and communication */
+      MyData err;
+      Jacobi_Communication(phi, phi0, &err, delta, &ThisTask);
+
+      /* -- 4b. Get the total error                                                                 */
+      /*        combines values from all processes and distributes the result back to all processes */
+      MyData toterr;
+      MPI_Allreduce(&err, &toterr, 1, MPI_MyDatatype, MPI_SUM, ThisTask.comm2d);
+      
+      if (ThisTask.rank == MASTERTASK)
+	printf("\n\t Iteration = %d - err = %lg\n",k, toterr);
+
+      /* increase the counter of loop iterations */
+      k++;
+      
+      /* check convergence */
+      if (toterr <= TOL)
+	{
+	  break;
+	}
+
+      /* swap the pointers */
+      MyData **tmp = phi;
+      phi = phi0;
+      phi0 = tmp;
+    }
+
+  /* ranks write the solution in parallel */
+  WriteSolutionParallel(phi, &ThisTask);
+
+  if (ThisTask.rank == MASTERTASK)
+    {      
+      printf("\n\t NX_GLOB x NY_GLOB = %d x %d\n", NX_GLOB, NY_GLOB);
+      printf("\n\t Time = %lf [s]\n\n", MPI_Wtime() - time_start);
+    }
+
+  // free memory
+  if (phi0)
+    {
+      free(phi0[0]);
+      free(phi0);
+    }
+
+  if (phi)
+    {
+      free(phi[0]);
+      free(phi);
+    }
+
+  MPI_Comm_free(&ThisTask.comm2d);
+  
+  MPI_Finalize();
+  
+  return 0;
+}
+
+/* ********************************************************************* */
+void BoundaryConditions(MyData **const restrict phi,
+			MyData  *const restrict x,
+			MyData  *const restrict y,
+			Task    *const restrict ThisTask)
+/*************************************************************************/
+{
+  /* left */
+  if (ThisTask->nbrleft == MPI_PROC_NULL) /* no left neighbor */
+    {
+      const int global_start_j = ThisTask->domain.global_start[X];
+      for (int j=ThisTask->domain.local_start[X] ; j<=ThisTask->domain.local_end[X] ; j++)
+	phi[j][0] = (1.0 - y[global_start_j + j - 1]);
+    }
+
+  /* right */
+  if (ThisTask->nbrright == MPI_PROC_NULL) /* no right neighbor */
+    {
+      const int global_start_j = ThisTask->domain.global_start[X];
+      for (int j=ThisTask->domain.local_start[X] ; j<=ThisTask->domain.local_end[X] ; j++)
+	phi[j][ThisTask->domain.local_end[Y] + 1] = (y[global_start_j + j - 1] * y[global_start_j + j - 1]);
+    }
+  
+  /* bottom */
+  if (ThisTask->nbrbottom == MPI_PROC_NULL) /* no bottom neighbor */
+    {
+      const int global_start_i = ThisTask->domain.global_start[Y];
+      for (int i=ThisTask->domain.local_start[Y] ; i<=ThisTask->domain.local_end[Y] ; i++)
+	phi[0][i] = (1.0 - x[global_start_i + i - 1]);
+    }
+  
+  /* top */
+  if (ThisTask->nbrtop == MPI_PROC_NULL) /* no top neighbor */
+    {
+      const int global_start_i = ThisTask->domain.global_start[Y];
+      for (int i=ThisTask->domain.local_start[Y] ; i<=ThisTask->domain.local_end[Y] ; i++)
+	phi[ThisTask->domain.local_end[X] + 1][i] = x[global_start_i + i - 1];
+    }
+
+#if defined(DEBUG)
+
+  if (ThisTask->rank == MASTERTASK)
+    {
+      printf("\n");
+      for (int i=0 ; i<NX_GLOB+2*NGHOST ; i++)
+	printf("\n\t x[%d] = %8.2f", i, x[i]);
+  
+      printf("\n");
+      for (int i=0 ; i<NX_GLOB+2*NGHOST ; i++)
+	printf("\n\t y[%d] = %8.2f", i, y[i]);
+
+      printf("\n");
+      fflush(stdout);
+    }
+
+  MPI_Barrier(ThisTask->comm2d);
+
+  for (int task=0 ; task<ThisTask->nranks ; task++)
+    {
+      if (task == ThisTask->rank)
+	{
+	  char string[128];
+	  sprintf(string, "Task %d - Phi", task);
+	  
+	  Show_2DdblArray(phi, ThisTask->domain.dim[X] + 2, ThisTask->domain.dim[Y] + 2, string);
+	}
+      
+      MPI_Barrier(ThisTask->comm2d);
+    }
+  
+#endif /* DEBUG */  
+  
+  return;
+}
+
+/* ********************************************************************* */
+
+void JacobiAlgorithm(MyData **const restrict Phi,
+		     MyData **const restrict Phi0,
+		     const MyData  *restrict delta,
+                     const int               jbeg,
+		     const int               jend,
+		     const int               ibeg,
+		     const int               iend,
+		     MyData *const restrict  error)
+{
+  for (int j=jbeg ; j<=jend ; j++)
+    {
+      for (int i=ibeg ; i<=iend ; i++)
+	{
+	  Phi[j][i] = 0.25 * (Phi0[j][i-1] + Phi0[j][i+1] +
+			      Phi0[j-1][i] + Phi0[j+1][i]);
+
+	  *error += (delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]));
+	} /* loop over columns */
+    } /* loop over rows */
+
+  return;
+}
+
+void get_error(MyData **const restrict Phi,
+	       MyData **const restrict Phi0,
+	       const MyData  *restrict delta,
+	       const int               jbeg,
+	       const int               jend,
+	       const int               ibeg,
+	       const int               iend,
+	       MyData *const restrict  error)
+{
+  *error = 0.0;
+  for (int j=jbeg ; j<=jend ; j++)
+    {
+      for (int i=ibeg ; i<=iend ; i++)
+	{
+	  *error += (delta[X] * delta[Y] * fabs(Phi[j][i] - Phi0[j][i]));
+	} /* loop over columns */
+    } /* loop over rows */
+    
+  return;
+}
+
+void Jacobi_Communication(MyData      **const restrict Phi,
+			  MyData      **const restrict Phi0,
+			  MyData       *const restrict error,
+			  const MyData *      restrict delta,
+			  Task         *const restrict ThisTask)
+{
+  /* custom datatype */
+  MPI_Datatype column;
+  MPI_Type_vector(ThisTask->domain.dim[X], 1, ThisTask->domain.dim[Y] + 2, MPI_MyDatatype, &column);
+  /* commits the datatype */
+  MPI_Type_commit(&column);
+
+  const int data_row_size = ThisTask->domain.dim[Y];
+  
+  /* First task: issue the communication */
+
+  MyData **const restrict buffer = Phi0;
+
+#if MPI_VERSION > 4  
+
+  MPI_Request request[4];
+
+  MPI_Isendrecv(&buffer[ThisTask->domain.local_end[X]      ][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrtop,    0,
+  		&buffer[ThisTask->domain.local_start[X] - 1][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrbottom, 0,
+  		ThisTask->comm2d, &request[0]);
+
+  MPI_Isendrecv(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrbottom, 1,
+  		&buffer[ThisTask->domain.local_end[X]   + 1][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrtop,    1,
+  		ThisTask->comm2d, &request[1]);
+
+  MPI_Isendrecv(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_end[Y]      ], 1,             column,         ThisTask->nbrright,  2,
+  		&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y] - 1], 1,             column,         ThisTask->nbrleft,   2,
+  		ThisTask->comm2d, &request[2]);
+  
+  MPI_Isendrecv(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y]    ], 1,             column,         ThisTask->nbrleft,   3,
+  		&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_end[Y]   + 1], 1,             column,         ThisTask->nbrright,  3,
+  		ThisTask->comm2d, &request[3]);
+
+#else
+  
+  MPI_Request request[8];
+
+  MPI_Irecv(&buffer[ThisTask->domain.local_start[X] - 1][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrbottom, 0, ThisTask->comm2d, &request[0]);
+  MPI_Irecv(&buffer[ThisTask->domain.local_end[X]   + 1][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrtop   , 1, ThisTask->comm2d, &request[1]);
+  MPI_Irecv(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y] - 1], 1,             column,         ThisTask->nbrleft,   2, ThisTask->comm2d, &request[2]);
+  MPI_Irecv(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_end[Y]   + 1], 1,             column,         ThisTask->nbrright,  3, ThisTask->comm2d, &request[3]);
+  
+  MPI_Isend(&buffer[ThisTask->domain.local_end[X]      ][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrtop,    0, ThisTask->comm2d, &request[4]);
+  MPI_Isend(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y]    ], data_row_size, MPI_MyDatatype, ThisTask->nbrbottom, 1, ThisTask->comm2d, &request[5]);
+  MPI_Isend(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_end[Y]      ], 1,             column,         ThisTask->nbrright,  2, ThisTask->comm2d, &request[6]);
+  MPI_Isend(&buffer[ThisTask->domain.local_start[X]    ][ThisTask->domain.local_start[Y]    ], 1,             column,         ThisTask->nbrleft,   3, ThisTask->comm2d, &request[7]);
+
+#endif
+
+  /**************************************** computation ****************************************/
+  /* perform the computation with the local data, (i.e. ghost cells are not required) */
+  /* so overlapping computation and communication */
+
+  const int jbeg = ThisTask->domain.local_start[X] + 1;
+  const int jend = ThisTask->domain.local_end[X]   - 1;
+  const int ibeg = ThisTask->domain.local_start[Y] + 1;
+  const int iend = ThisTask->domain.local_end[Y]   - 1;
+  
+  *error = 0.0;
+  JacobiAlgorithm(Phi, Phi0, delta, jbeg, jend, ibeg, iend, error);
+
+  /*********************************************************************************************/
+
+#if MPI_VERSION > 4  
+  /* wait the data on the boundaries */
+  MPI_Waitall(4, request, MPI_STATUSES_IGNORE);
+#else
+  MPI_Waitall(8, request, MPI_STATUSES_IGNORE);
+#endif
+  
+  /*  nbrbottom */
+  JacobiAlgorithm(Phi, Phi0, delta,
+		  ThisTask->domain.local_start[X], ThisTask->domain.local_start[X],
+		  ThisTask->domain.local_start[Y], ThisTask->domain.local_end[Y],
+		  error);
+
+  /* nbrtop */
+  JacobiAlgorithm(Phi, Phi0, delta,
+		  ThisTask->domain.local_end[X],   ThisTask->domain.local_end[X],
+		  ThisTask->domain.local_start[Y], ThisTask->domain.local_end[Y],
+		  error);
+
+  /* nbrleft */
+  JacobiAlgorithm(Phi, Phi0, delta,
+		  ThisTask->domain.local_start[X], ThisTask->domain.local_end[X],
+		  ThisTask->domain.local_start[Y], ThisTask->domain.local_start[Y],
+		  error);
+
+  /* nbrright */
+  JacobiAlgorithm(Phi, Phi0, delta,
+		  ThisTask->domain.local_start[X], ThisTask->domain.local_end[X],
+		  ThisTask->domain.local_end[Y],   ThisTask->domain.local_end[Y],
+		  error);
+
+  /* Round-off error fixing ??? */
+  {
+    *error = 0.0;
+    get_error(Phi, Phi0, delta,
+	      ThisTask->domain.local_start[X], ThisTask->domain.local_end[X],
+	      ThisTask->domain.local_start[Y], ThisTask->domain.local_end[Y],
+	      error);
+  }
+  
+  MPI_Type_free(&column);
+
+  return;
+}
+
+void WriteSolutionParallel(MyData **const phi, Task *const ThisTask)
+{
+  /* 1. Every process sets up the subarray                     */
+  /*    (i.e. its own domain whithout ghost cells)             */
+  /*    We will use this as arguments to MPI_File_write(),     */
+  /*    which allows the program to write the file in parallel */
+  MPI_Datatype subDomain;
+  /* (local) sub-domain size */
+  const int lsize[NDIM]  = {ThisTask->domain.dim[X], ThisTask->domain.dim[Y]};
+  /* entire domain (i.e. with ghost cells) */
+  const int domain[NDIM] = {lsize[X] + 2 * NGHOST, lsize[Y] + 2 * NGHOST};
+  /* (local) starting coordinates of the subDomain in each dimension */
+  const int lstart[NDIM] = {ThisTask->domain.local_start[X], ThisTask->domain.local_start[Y]};
+  MPI_Type_create_subarray(NDIM, domain, lsize, lstart, MPI_ORDER_C, MPI_MyDatatype, &subDomain);
+  MPI_Type_commit(&subDomain);
+
+  /* 2. The file view must be set by creating a second subarray datatype, */
+  /*    defining the process' view on the file.                           */  
+  MPI_Datatype ProcessDomain;
+  /* (global) domain size */
+  const int gsize[NDIM] = {NX_GLOB, NY_GLOB};
+  /* (global) starting coordinates of the subDomain in each dimension */
+  const int gstart[NDIM] = {ThisTask->domain.global_start[X] - 1, ThisTask->domain.global_start[Y] - 1};
+  MPI_Type_create_subarray(NDIM, gsize, lsize, gstart, MPI_ORDER_C, MPI_MyDatatype, &ProcessDomain);
+  MPI_Type_commit(&ProcessDomain);
+
+  /* 3.a Open file for writing */
+  static int nfile = 0;
+  char fname[128];
+  sprintf(fname,"jacobi_2D_mpi_comp_comm_io_%02d.bin", nfile);
+  /* delete the file if already exists */
+  /* MPI_File_delete(fname, MPI_INFO_NULL); */
+  MPI_File fh;
+  MPI_File_open(ThisTask->comm2d, fname,
+		MPI_MODE_CREATE | MPI_MODE_WRONLY,
+		MPI_INFO_NULL, &fh);
+
+  
+  /* 3.b Set the process’s view of the data in the file */
+  MPI_File_set_view(fh, 0, MPI_MyDatatype, ProcessDomain, "native", MPI_INFO_NULL);
+
+  /* 3.c Writes a file starting at the locations specified by individual file pointers */
+  /*      (blocking collective)                                                        */
+  MPI_File_write_all(fh, phi[0], 1, subDomain, MPI_STATUS_IGNORE);
+
+  /* 3.d Close a file (collective). */
+  MPI_File_close(&fh);
+  
+  /* free the MPI_Datatype */
+  MPI_Type_free(&subDomain);
+  MPI_Type_free(&ProcessDomain);
+  
+  return;
+}
diff --git a/jacobi/mpi/comp_comm_io/src/tools.c b/jacobi/mpi/comp_comm_io/src/tools.c
new file mode 100644
index 0000000..0e282ee
--- /dev/null
+++ b/jacobi/mpi/comp_comm_io/src/tools.c
@@ -0,0 +1,59 @@
+/* ///////////////////////////////////////////////////////////////////// */
+/* Authors:  A. Mignone (mignone@to.infn.it)                             */
+/*           V. Cesare  (valentina.cesare@inaf.it)                       */
+/*           D. Goz     (david.goz@inaf.it)                              */
+/*                                                                       */
+/* Date   : June 2024                                                    */
+/*                                                                       */
+/* ///////////////////////////////////////////////////////////////////// */
+
+#include "tools.h"
+
+/* ********************************************************************* */
+MyData **Allocate_2DdblArray(const int nx, const int ny)
+/*
+ * Allocate contiguous memory for a MyData array with
+ * nx rows and ny columns
+ *********************************************************************** */
+{
+  MyData **buf = calloc(nx, sizeof(MyData *));
+  assert(buf != NULL);
+
+ buf[0] = (MyData *) calloc(nx * ny,  sizeof(MyData));
+  assert(buf[0] != NULL);
+  
+  for (int j=1 ; j<nx ; j++)
+    buf[j] = buf[j-1] + ny;
+    
+  return buf;
+}
+
+/* ********************************************************************* */
+void Show_2DdblArray(      MyData **const A,
+		     const int            nx,
+		     const int            ny,
+		     const char *const    string)
+/* *********************************************************************** */
+{
+  printf ("%s\n",string);
+  printf ("------------------------------\n");
+  for (int i=0 ; i<nx ; i++)
+    {
+      for (int j=0 ; j<ny ; j++)
+	{
+	  printf ("%8.2f  ", A[i][j]);
+	}
+      printf ("\n");
+    }
+  printf ("------------------------------\n");
+}
+/* ********************************************************************* */
+
+double seconds()
+{
+  struct timeval tmp;
+  gettimeofday(&tmp, (struct timezone *)0);
+  double sec = tmp.tv_sec + ((double)tmp.tv_usec)/1000000.0;
+
+  return sec;
+}
diff --git a/jacobi/mpi/miscellaneous/cartesian b/jacobi/mpi/miscellaneous/cartesian
new file mode 100755
index 0000000000000000000000000000000000000000..cef6cb6704f8709644945aeb816d610ad2814635
GIT binary patch
literal 78664
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
M2nALPBG9-D0I`nGZ2$lO

literal 0
HcmV?d00001

diff --git a/jacobi/mpi/miscellaneous/cartesian.cpp b/jacobi/mpi/miscellaneous/cartesian.c
similarity index 64%
rename from jacobi/mpi/miscellaneous/cartesian.cpp
rename to jacobi/mpi/miscellaneous/cartesian.c
index 7b5a7e5..8778f58 100644
--- a/jacobi/mpi/miscellaneous/cartesian.cpp
+++ b/jacobi/mpi/miscellaneous/cartesian.c
@@ -1,5 +1,6 @@
 #include <mpi.h>
-#include <iostream>
+#include <stdio.h>
+#include <stdlib.h>
 
 #define SIZE 2
 #define X    0
@@ -7,8 +8,6 @@
 
 int main(int argc, char **argv)
 {
-  using namespace std;
-  
   int task, ntasks;
   MPI_Init(&argc, &argv);
   MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
@@ -18,7 +17,7 @@ int main(int argc, char **argv)
     {
       if (!task)
 	{
-	  cout << "\n\t Usage: <executable> <number processes along X> \n" << endl;
+	  printf("\n\t Usage: <executable> <number processes along X> \n");
 	  MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
 	  exit(EXIT_FAILURE);
 	}
@@ -30,15 +29,16 @@ int main(int argc, char **argv)
     {
       if (!task)
 	{
-	  cout << "\n\t ntasks % cartesian_grid_x != 0 ... aborting ...\n" << endl;
+	  printf("\n\t ntasks % cartesian_grid_x != 0 ... aborting ...\n");
+	  fflush(stdout);
 	  MPI_Abort(MPI_COMM_WORLD, EXIT_FAILURE);
 	  exit(EXIT_FAILURE);
 	}
     }
   
-  static int dims[SIZE] = {cartesian_grid_x, cartesian_grid_y};
-  static int periods[SIZE] = {0, 0};
-  static int reorder = 0;
+  const int dims[SIZE] = {cartesian_grid_x, cartesian_grid_y};
+  const int periods[SIZE] = {0, 0};
+  const int reorder = 0;
   MPI_Comm comm2d;
   MPI_Cart_create(MPI_COMM_WORLD, SIZE, dims, periods, reorder, &comm2d);
 
@@ -56,11 +56,11 @@ int main(int argc, char **argv)
       MPI_Barrier(MPI_COMM_WORLD);
       if (rank == task)
 	{
-	  cout << "\n\t Task: " << task << endl;
-	  cout << "\t\t coords[" << coords[X] << "," << coords[Y] << "]" << endl;
-	  cout << "\t\t nbrright: " << nbrright << " - nbrleft  : " << nbrleft << endl;
-	  cout << "\t\t nbrtop  : " << nbrtop   << " - nbrbottom: " << nbrbottom << endl;
-	  cout << endl;
+	  printf("\n\t Task: %d\n", task);
+	  printf("\t\t coords[%d, %d]", coords[X], coords[Y]);
+	  printf("\n\t\t nbrright: %d - nbrleft  : %d", nbrright, nbrleft);
+	  printf("\n\t\t nbrtop  : %d - nbrbottom: %d \n\n", nbrtop, nbrbottom);
+	  fflush(stdout);
 	}
     }
 
diff --git a/jacobi/mpi/miscellaneous/subarray b/jacobi/mpi/miscellaneous/subarray
new file mode 100755
index 0000000000000000000000000000000000000000..5295b41860fe0dfe7b99d8b60a0c49a893e90303
GIT binary patch
literal 80392
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
OD$5}hSPVp<aTx$JCfHm6

literal 0
HcmV?d00001

diff --git a/jacobi/mpi/miscellaneous/subarray.c b/jacobi/mpi/miscellaneous/subarray.c
new file mode 100644
index 0000000..254b3d4
--- /dev/null
+++ b/jacobi/mpi/miscellaneous/subarray.c
@@ -0,0 +1,114 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <mpi.h>
+#include <assert.h>
+
+void printarr(int **data, int n, char *str);
+int **allocarray(const int n);
+void deallocarray(int **);
+
+int main(int argc, char **argv)
+{
+  /* array sizes */
+  const int bigsize = 10;
+  const int subsize = 5;
+
+  /* communications parameters */
+  const int sender   = 0;
+  const int receiver = 1;
+  const int ourtag   = 2;
+
+  int rank, size;
+  MPI_Init(&argc, &argv);
+  MPI_Comm_rank(MPI_COMM_WORLD, &rank);
+  MPI_Comm_size(MPI_COMM_WORLD, &size);
+
+  if (size < (receiver + 1))
+    {
+      if (rank == 0)
+	fprintf(stderr,"\nt %s: Needs at least %d  processors.\n", argv[0], receiver+1);
+
+      MPI_Finalize();
+      return 1;
+    }
+
+  if (rank == sender)
+    {
+      int **bigarray = allocarray(bigsize);
+      for (int i=0 ; i<bigsize ; i++)
+	for (int j=0 ; j<bigsize ; j++)
+	  bigarray[i][j] = (i * bigsize + j);
+
+      printarr(bigarray, bigsize, "\n Sender: Big array \n");
+
+      MPI_Datatype mysubarray;
+      int starts[2]   = {5,3};
+      int subsizes[2] = {subsize,subsize};
+      int bigsizes[2] = {bigsize, bigsize};
+      MPI_Type_create_subarray(2, bigsizes, subsizes, starts,
+			       MPI_ORDER_C, MPI_INT, &mysubarray);
+      MPI_Type_commit(&mysubarray);
+
+      MPI_Send(&(bigarray[0][0]), 1, mysubarray, receiver, ourtag, MPI_COMM_WORLD);
+      MPI_Type_free(&mysubarray);
+
+      deallocarray(bigarray);
+    }
+  else if (rank == receiver)
+    {
+      int **subarray = allocarray(subsize);
+
+      for (int i=0; i<subsize; i++)
+	for (int j=0; j<subsize; j++)
+	  subarray[i][j] = 0;
+
+      MPI_Recv(&(subarray[0][0]), subsize * subsize, MPI_INT, sender, ourtag, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
+
+      printarr(subarray, subsize, " Receiver: Subarray -- after receive");
+
+      deallocarray(subarray);
+    }
+
+  MPI_Finalize();
+  return 0;
+}
+
+void printarr(int **data,
+	      int   n,
+	      char *str)
+{
+  printf("-- %s --\n", str);
+  for (int i=0; i<n; i++)
+    {
+      for (int j=0; j<n; j++)
+	{
+	  printf("%3d ", data[i][j]);
+	}
+      printf("\n");
+    }
+}
+
+int **allocarray(const int n)
+{
+  int *data = malloc(n * n * sizeof(int));
+  assert(data != NULL);
+
+  int **arr = malloc(n * sizeof(int *));
+  assert(arr != NULL);
+  
+  for (int i=0 ; i<n ; i++)
+    arr[i] = &(data[i * n]);
+
+  return arr;
+}
+
+void deallocarray(int **array)
+{
+  if (array[0])
+    free(array[0]);
+
+  if (array)
+    free(array);
+
+  return;
+}
-- 
GitLab