Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Added our tweaked version of NAS benchmarks.
[simgrid.git] / examples / smpi / NAS / LU / exchange_1.f
diff --git a/examples/smpi/NAS/LU/exchange_1.f b/examples/smpi/NAS/LU/exchange_1.f
new file mode 100644 (file)
index 0000000..2bf7d28
--- /dev/null
@@ -0,0 +1,180 @@
+
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+
+      subroutine exchange_1( g,k,iex )
+
+c---------------------------------------------------------------------
+c---------------------------------------------------------------------
+
+
+      implicit none
+
+      include 'mpinpb.h'
+      include 'applu.incl'
+
+      double precision  g(5,-1:isiz1+2,-1:isiz2+2,isiz3)
+      integer k
+      integer iex
+      integer i, j
+      double precision dum(5,isiz1+isiz2), dum1(5,isiz1+isiz2)
+
+      integer STATUS(MPI_STATUS_SIZE)
+      integer IERROR
+
+
+
+      if( iex .eq. 0 ) then
+
+          if( north .ne. -1 ) then
+              call MPI_RECV( dum1(1,jst),
+     >                       5*(jend-jst+1),
+     >                       dp_type,
+     >                       north,
+     >                       from_n,
+     >                       MPI_COMM_WORLD,
+     >                       status,
+     >                       IERROR )
+              do j=jst,jend
+                  g(1,0,j,k) = dum1(1,j)
+                  g(2,0,j,k) = dum1(2,j)
+                  g(3,0,j,k) = dum1(3,j)
+                  g(4,0,j,k) = dum1(4,j)
+                  g(5,0,j,k) = dum1(5,j)
+              enddo
+          endif
+
+          if( west .ne. -1 ) then
+              call MPI_RECV( dum1(1,ist),
+     >                       5*(iend-ist+1),
+     >                       dp_type,
+     >                       west,
+     >                       from_w,
+     >                       MPI_COMM_WORLD,
+     >                       status,
+     >                       IERROR )
+              do i=ist,iend
+                  g(1,i,0,k) = dum1(1,i)
+                  g(2,i,0,k) = dum1(2,i)
+                  g(3,i,0,k) = dum1(3,i)
+                  g(4,i,0,k) = dum1(4,i)
+                  g(5,i,0,k) = dum1(5,i)
+              enddo
+          endif
+
+      else if( iex .eq. 1 ) then
+
+          if( south .ne. -1 ) then
+              call MPI_RECV( dum1(1,jst),
+     >                       5*(jend-jst+1),
+     >                       dp_type,
+     >                       south,
+     >                       from_s,
+     >                       MPI_COMM_WORLD,
+     >                       status,
+     >                       IERROR )
+              do j=jst,jend
+                  g(1,nx+1,j,k) = dum1(1,j)
+                  g(2,nx+1,j,k) = dum1(2,j)
+                  g(3,nx+1,j,k) = dum1(3,j)
+                  g(4,nx+1,j,k) = dum1(4,j)
+                  g(5,nx+1,j,k) = dum1(5,j)
+              enddo
+          endif
+
+          if( east .ne. -1 ) then
+              call MPI_RECV( dum1(1,ist),
+     >                       5*(iend-ist+1),
+     >                       dp_type,
+     >                       east,
+     >                       from_e,
+     >                       MPI_COMM_WORLD,
+     >                       status,
+     >                       IERROR )
+              do i=ist,iend
+                  g(1,i,ny+1,k) = dum1(1,i)
+                  g(2,i,ny+1,k) = dum1(2,i)
+                  g(3,i,ny+1,k) = dum1(3,i)
+                  g(4,i,ny+1,k) = dum1(4,i)
+                  g(5,i,ny+1,k) = dum1(5,i)
+              enddo
+          endif
+
+      else if( iex .eq. 2 ) then
+
+          if( south .ne. -1 ) then
+              do j=jst,jend
+                  dum(1,j) = g(1,nx,j,k) 
+                  dum(2,j) = g(2,nx,j,k) 
+                  dum(3,j) = g(3,nx,j,k) 
+                  dum(4,j) = g(4,nx,j,k) 
+                  dum(5,j) = g(5,nx,j,k) 
+              enddo
+              call MPI_SEND( dum(1,jst), 
+     >                       5*(jend-jst+1), 
+     >                       dp_type, 
+     >                       south, 
+     >                       from_n, 
+     >                       MPI_COMM_WORLD, 
+     >                       IERROR )
+          endif
+
+          if( east .ne. -1 ) then
+              do i=ist,iend
+                  dum(1,i) = g(1,i,ny,k)
+                  dum(2,i) = g(2,i,ny,k)
+                  dum(3,i) = g(3,i,ny,k)
+                  dum(4,i) = g(4,i,ny,k)
+                  dum(5,i) = g(5,i,ny,k)
+              enddo
+              call MPI_SEND( dum(1,ist), 
+     >                       5*(iend-ist+1), 
+     >                       dp_type, 
+     >                       east, 
+     >                       from_w, 
+     >                       MPI_COMM_WORLD, 
+     >                       IERROR )
+          endif
+
+      else
+
+          if( north .ne. -1 ) then
+              do j=jst,jend
+                  dum(1,j) = g(1,1,j,k)
+                  dum(2,j) = g(2,1,j,k)
+                  dum(3,j) = g(3,1,j,k)
+                  dum(4,j) = g(4,1,j,k)
+                  dum(5,j) = g(5,1,j,k)
+              enddo
+              call MPI_SEND( dum(1,jst), 
+     >                       5*(jend-jst+1), 
+     >                       dp_type, 
+     >                       north, 
+     >                       from_s, 
+     >                       MPI_COMM_WORLD, 
+     >                       IERROR )
+          endif
+
+          if( west .ne. -1 ) then
+              do i=ist,iend
+                  dum(1,i) = g(1,i,1,k)
+                  dum(2,i) = g(2,i,1,k)
+                  dum(3,i) = g(3,i,1,k)
+                  dum(4,i) = g(4,i,1,k)
+                  dum(5,i) = g(5,i,1,k)
+              enddo
+              call MPI_SEND( dum(1,ist), 
+     >                       5*(iend-ist+1), 
+     >                       dp_type, 
+     >                       west, 
+     >                       from_e, 
+     >                       MPI_COMM_WORLD, 
+     >                       IERROR )
+          endif
+
+      endif
+
+      end
+
+
+