Advertisement
autid

AoC 2019 Day9 FORTRAN

Dec 9th, 2019
1,735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. PROGRAM DAY9  
  2.   USE MPI
  3.  
  4.   INTEGER :: I,IERR,A,B,C,D,E,N
  5.   INTEGER(8) :: PART1,PART2
  6.   CHARACTER(LEN=1) CHAR
  7.   INTEGER, ALLOCATABLE :: PROG(:)
  8.   INTEGER :: IERROR, NPROC, ICOMM, IRANK ,INTERCOMM ,ERRCODES(1)
  9.   LOGICAL :: AMROOT,RUNNING,SETUP,FIRST
  10.   INTEGER :: STATUS(MPI_STATUS_SIZE)
  11.  
  12.   CALL MPI_INIT(IERROR)
  13.   ICOMM = MPI_COMM_WORLD
  14.   CALL MPI_COMM_SIZE(ICOMM,NPROC,IERROR)
  15.   CALL MPI_COMM_RANK(ICOMM, IRANK, IERROR)
  16.   CALL MPI_COMM_SPAWN("./intcode",MPI_ARGV_NULL,1,MPI_INFO_NULL,0,ICOMM,INTERCOMM,ERRCODES,IERROR)
  17.  
  18.   OPEN(1,FILE="input.txt")
  19.   N=1
  20.   DO
  21.      READ(1,'(A1)',IOSTAT=IERR,ADVANCE="NO")CHAR
  22.      IF(IERR.NE.0)EXIT
  23.      IF(CHAR.EQ.",")N=N+1
  24.   END DO
  25.   REWIND(1)
  26.   ALLOCATE(PROG(0:N-1))
  27.   READ(1,*)PROG
  28.  
  29.  
  30.   CALL MPI_SEND(N,1,MPI_INTEGER,I,0,INTERCOMM,IERROR)
  31.   CALL MPI_SEND(PROG,N,MPI_INTEGER,I,1,INTERCOMM,IERROR)
  32.  
  33.  
  34.   CALL MPI_SEND(1_8,1,MPI_DOUBLE_PRECISION,0,2,INTERCOMM,IERROR)
  35.   CALL MPI_RECV(PART1,1,MPI_DOUBLE_PRECISION,0,999,INTERCOMM,STATUS,IERROR)
  36.   WRITE(*,'("Part 1: ",I0)') PART1
  37.   CALL MPI_SEND(2_8,1,MPI_DOUBLE_PRECISION,0,2,INTERCOMM,IERROR)
  38.   CALL MPI_RECV(PART2,1,MPI_DOUBLE_PRECISION,0,999,INTERCOMM,STATUS,IERROR)
  39.   WRITE(*,'("Part 2: ",I0)') PART2
  40.   CALL MPI_SEND(-1_8,1,MPI_DOUBLE_PRECISION,0,2,INTERCOMM,IERROR)
  41.   CALL MPI_FINALIZE(IERROR)
  42.  
  43. END PROGRAM DAY9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement