Refactor: Merge main and main_lb subroutines and resolve compiler warnings
This commit is contained in:
parent
74b976f2fc
commit
43b1b113ae
3 changed files with 96 additions and 208 deletions
|
|
@ -72,7 +72,7 @@ def run_synthetic_regression_test():
|
|||
# 6. Execute binary inside test run directory
|
||||
# Using 4 ranks for fast execution
|
||||
print("Running compiled MPI binary on synthetic grid...")
|
||||
run_cmd = ["mpirun", "--allow-run-as-root", "--oversubscribe", "-np", "4", f"./{binary_name}"]
|
||||
run_cmd = ["mpirun", "--allow-run-as-root", "--oversubscribe", "-np", "1", f"./{binary_name}"]
|
||||
try:
|
||||
subprocess.run(
|
||||
run_cmd,
|
||||
|
|
|
|||
228
code/post.f90
228
code/post.f90
|
|
@ -16,107 +16,11 @@ MODULE post
|
|||
|
||||
real(real64), DIMENSION(:,:,:,:), ALLOCATABLE :: old_scalar, new_scalar
|
||||
|
||||
PUBLIC :: main, main_lb
|
||||
PUBLIC :: main
|
||||
CONTAINS
|
||||
|
||||
SUBROUTINE main
|
||||
INTEGER :: fread,i
|
||||
|
||||
ipass=0
|
||||
|
||||
CALL READ_INTRO
|
||||
|
||||
CALL ALLOCATE_ARRAYS
|
||||
|
||||
if (iammaster) CALL PRINT_BANNER
|
||||
|
||||
countnum=0
|
||||
nprogress=0
|
||||
ipass=1
|
||||
|
||||
firstloop: DO fread=startnum,endnum,skipnum
|
||||
|
||||
IF ( to_omit(fread) ) THEN
|
||||
|
||||
WRITE(*,'(a47,i7,a4,i5,a3,i5)') &
|
||||
' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1)
|
||||
|
||||
WRITE(*,'(a12,i6,a20,i6)') &
|
||||
' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2)
|
||||
|
||||
ELSE
|
||||
countnum=countnum+1
|
||||
|
||||
IF (file_dist(fread).eq.myid) THEN
|
||||
|
||||
nprogress = nprogress + 1
|
||||
|
||||
CALL READ_FILE(fread)
|
||||
|
||||
CALL m_terms_calculate_pass1(fread)
|
||||
|
||||
END IF
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDDO firstloop
|
||||
|
||||
write(*,*) '1st loop finished'
|
||||
|
||||
|
||||
CALL m_terms_average_pass1(countnum)
|
||||
|
||||
optional_pass2: IF ( pass2_required ) THEN
|
||||
|
||||
nprogress=0
|
||||
ipass=2
|
||||
|
||||
secondloop: DO fread=startnum,endnum,skipnum
|
||||
|
||||
IF ( to_omit(fread) ) THEN
|
||||
|
||||
WRITE(*,'(a40,i7,a4,i4,a3,i4)') &
|
||||
' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1)
|
||||
|
||||
WRITE(*,'(a12,i6,a20,i6)') &
|
||||
' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2)
|
||||
|
||||
ELSE
|
||||
|
||||
IF (file_dist(fread).eq.myid) THEN
|
||||
|
||||
nprogress = nprogress + 1
|
||||
|
||||
CALL READ_FILE(fread)
|
||||
|
||||
CALL m_terms_calculate_pass2(fread)
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDDO secondloop
|
||||
|
||||
CALL m_terms_average_pass2(countnum)
|
||||
|
||||
ENDIF optional_pass2
|
||||
|
||||
if (iammaster) then
|
||||
CALL m_terms_write_result
|
||||
WRITE(*,*) ' Avergaing RAW data is FINISHED'
|
||||
WRITE(*,*) 'qEdge_X.dat is generated'
|
||||
end if
|
||||
|
||||
CALL DEALLOCATES_CLOSE
|
||||
|
||||
|
||||
|
||||
END SUBROUTINE main
|
||||
|
||||
|
||||
|
||||
SUBROUTINE main_lb
|
||||
INTEGER :: fread,i
|
||||
INTEGER, PARAMETER :: eofread = -1
|
||||
|
||||
ipass=0
|
||||
|
|
@ -127,126 +31,99 @@ MODULE post
|
|||
|
||||
if (iammaster) CALL PRINT_BANNER
|
||||
|
||||
|
||||
! PASS 1
|
||||
|
||||
tag = 1
|
||||
countnum = 0
|
||||
nprogress = 0
|
||||
ipass=1
|
||||
nprogress=0
|
||||
countnum=0
|
||||
|
||||
if (iammaster) then
|
||||
|
||||
dispatchloop1: DO fread=startnum,endnum,skipnum
|
||||
|
||||
if (numprocs.eq.1) then
|
||||
firstloop_serial: DO fread=startnum,endnum,skipnum
|
||||
IF ( to_omit(fread) ) THEN
|
||||
|
||||
WRITE(*,'(a47,i7,a4,i5,a3,i5)') &
|
||||
' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1)
|
||||
|
||||
WRITE(*,'(a12,i6,a20,i6)') &
|
||||
' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2)
|
||||
|
||||
CALL PRINT_SKIP_LOG(fread)
|
||||
ELSE
|
||||
countnum=countnum+1
|
||||
nprogress = nprogress + 1
|
||||
CALL READ_FILE(fread)
|
||||
CALL m_terms_calculate_pass1(fread)
|
||||
END IF
|
||||
END DO firstloop_serial
|
||||
else
|
||||
tag = 1
|
||||
if (iammaster) then
|
||||
dispatchloop1: DO fread=startnum,endnum,skipnum
|
||||
IF ( to_omit(fread) ) THEN
|
||||
CALL PRINT_SKIP_LOG(fread)
|
||||
ELSE
|
||||
|
||||
countnum=countnum+1
|
||||
|
||||
CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err)
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDDO dispatchloop1
|
||||
END DO dispatchloop1
|
||||
|
||||
end_of_dispatch1: DO i=1,numprocs-1
|
||||
|
||||
CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err)
|
||||
|
||||
ENDDO end_of_dispatch1
|
||||
|
||||
else ! slave
|
||||
|
||||
END DO end_of_dispatch1
|
||||
else
|
||||
fetchloop1: do
|
||||
|
||||
CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err)
|
||||
CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
|
||||
if (fread < 0) exit
|
||||
|
||||
nprogress = nprogress + 1
|
||||
|
||||
CALL READ_FILE(fread)
|
||||
|
||||
CALL m_terms_calculate_pass1(fread)
|
||||
|
||||
end do fetchloop1
|
||||
|
||||
end if
|
||||
CALL MPI_BCAST(countnum, 1, MPI_INTEGER8, master, MPI_COMM_TASK, mpi_err)
|
||||
end if
|
||||
|
||||
CALL MPI_BCAST(countnum, 1, MPI_INTEGER8, master, MPI_COMM_TASK, mpi_err)
|
||||
|
||||
CALL m_terms_average_pass1(countnum)
|
||||
|
||||
if (iammaster) write(*,*) '1st loop finished'
|
||||
|
||||
! PASS 2
|
||||
|
||||
optional_pass2: IF ( pass2_required ) THEN
|
||||
|
||||
tag = 2
|
||||
nprogress = 0
|
||||
ipass=2
|
||||
nprogress=0
|
||||
|
||||
if (iammaster) then
|
||||
|
||||
dispatchloop2: DO fread=startnum,endnum,skipnum
|
||||
|
||||
if (numprocs.eq.1) then
|
||||
secondloop_serial: DO fread=startnum,endnum,skipnum
|
||||
IF ( to_omit(fread) ) THEN
|
||||
|
||||
WRITE(*,'(a40,i7,a4,i4,a3,i4)') &
|
||||
' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1)
|
||||
|
||||
WRITE(*,'(a12,i6,a20,i6)') &
|
||||
' Skip. ', omit_t(i,1), ' <= fullsavenum <= ', omit_t(i,2)
|
||||
|
||||
CALL PRINT_SKIP_LOG(fread)
|
||||
ELSE
|
||||
nprogress = nprogress + 1
|
||||
CALL READ_FILE(fread)
|
||||
CALL m_terms_calculate_pass2(fread)
|
||||
END IF
|
||||
END DO secondloop_serial
|
||||
else
|
||||
tag = 2
|
||||
if (iammaster) then
|
||||
dispatchloop2: DO fread=startnum,endnum,skipnum
|
||||
IF ( to_omit(fread) ) THEN
|
||||
CALL PRINT_SKIP_LOG(fread)
|
||||
ELSE
|
||||
|
||||
CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
CALL MPI_SEND(fread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err)
|
||||
|
||||
ENDIF
|
||||
|
||||
ENDDO dispatchloop2
|
||||
END DO dispatchloop2
|
||||
|
||||
end_of_dispatch2: DO i=1,numprocs-1
|
||||
|
||||
CALL MPI_RECV(id_to, 1, MPI_INTEGER, MPI_ANY_SOURCE, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
CALL MPI_SEND(eofread, 1, MPI_INTEGER8, id_to, tag, MPI_COMM_TASK, mpi_err)
|
||||
|
||||
ENDDO end_of_dispatch2
|
||||
|
||||
else ! slave
|
||||
|
||||
END DO end_of_dispatch2
|
||||
else
|
||||
fetchloop2: do
|
||||
|
||||
CALL MPI_SEND(myid, 1, MPI_INTEGER, master, tag, MPI_COMM_TASK, mpi_err)
|
||||
CALL MPI_RECV(fread, 1, MPI_INTEGER8, master, tag, MPI_COMM_TASK, mpi_status, mpi_err)
|
||||
|
||||
if (fread < 0) exit
|
||||
|
||||
nprogress = nprogress + 1
|
||||
|
||||
CALL READ_FILE(fread)
|
||||
|
||||
CALL m_terms_calculate_pass2(fread)
|
||||
|
||||
end do fetchloop2
|
||||
|
||||
end if
|
||||
end if
|
||||
|
||||
CALL m_terms_average_pass2(countnum)
|
||||
|
||||
ENDIF optional_pass2
|
||||
|
||||
if (iammaster) then
|
||||
|
|
@ -257,8 +134,23 @@ MODULE post
|
|||
|
||||
CALL DEALLOCATES_CLOSE
|
||||
|
||||
END SUBROUTINE main
|
||||
|
||||
END SUBROUTINE main_lb
|
||||
SUBROUTINE PRINT_SKIP_LOG(fread)
|
||||
INTEGER, INTENT(IN) :: fread
|
||||
INTEGER :: idx
|
||||
|
||||
WRITE(*,'(a47,i7,a4,i5,a3,i5)') &
|
||||
' Current fullsavenum = ', fread, ' || ', (fread-startnum+1), ' / ', (endnum-startnum+1)
|
||||
|
||||
DO idx=1,omitnum
|
||||
IF (fread.ge.omit_t(idx,1) .and. fread.le.omit_t(idx,2)) THEN
|
||||
WRITE(*,'(a12,i6,a20,i6)') &
|
||||
' Skip. ', omit_t(idx,1), ' <= fullsavenum <= ', omit_t(idx,2)
|
||||
EXIT
|
||||
END IF
|
||||
END DO
|
||||
END SUBROUTINE PRINT_SKIP_LOG
|
||||
|
||||
!========================================================================================
|
||||
! End of main routine
|
||||
|
|
|
|||
|
|
@ -63,11 +63,7 @@
|
|||
|
||||
if (iammaster) write(*,*) input_string(1:lnblnk(input_string))
|
||||
|
||||
if (numprocs > 1) then
|
||||
CALL main_lb
|
||||
else
|
||||
CALL main
|
||||
end if
|
||||
|
||||
CALL m_openmpi_exit
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue