Refactor: Merge main and main_lb subroutines and resolve compiler warnings
Some checks failed
Deploy Documentation / build-and-deploy (push) Failing after 55s
CI Test Suite / run-tests (push) Failing after 1m3s

This commit is contained in:
ignis 2026-06-02 07:05:41 +00:00
parent 74b976f2fc
commit 43b1b113ae
3 changed files with 96 additions and 208 deletions

View file

@ -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,

View file

@ -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

View file

@ -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