Resolve [2-6] printer indexing, [1-8] MPI abort in Compact.f90, and [1-5] safe unit file opens in post.f90
This commit is contained in:
parent
fc1231eeab
commit
09e52eeee6
3 changed files with 32 additions and 24 deletions
|
|
@ -57,9 +57,11 @@
|
|||
!! @param yp Periodic flag for y-direction (0 = periodic, other = non-periodic).
|
||||
!! @param zp Periodic flag for z-direction (0 = periodic, other = non-periodic).
|
||||
SUBROUTINE ludcmp_allocate(nx,ny,nz,xp,yp,zp)
|
||||
include 'mpif.h'
|
||||
INTEGER, INTENT(IN) :: nx,ny,nz
|
||||
INTEGER, INTENT(IN) :: xp,yp,zp
|
||||
INTEGER :: ierr
|
||||
INTEGER :: mpi_err_abort
|
||||
|
||||
nxc=nx
|
||||
nyc=ny
|
||||
|
|
@ -71,64 +73,64 @@
|
|||
ALLOCATE(lxf(nxc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(lxs(nxc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
IF(xp.eq.0) THEN
|
||||
ALLOCATE(wxf(nxc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(wxs(nxc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ALLOCATE(lyf(nyc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(lys(nyc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
IF(yp.eq.0) THEN
|
||||
ALLOCATE(wyf(nyc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(wys(nyc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ENDIF
|
||||
|
||||
ALLOCATE(lzf(nzc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(lzs(nzc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
IF(zp.eq.0) THEN
|
||||
ALLOCATE(wzf(nzc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
PRINT*, 'work array for lud allocation failed'
|
||||
STOP 1
|
||||
CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpi_err_abort)
|
||||
ENDIF
|
||||
ALLOCATE(wzs(nzc),STAT=ierr)
|
||||
IF(ierr /= 0) THEN
|
||||
|
|
|
|||
|
|
@ -149,13 +149,13 @@ class ArrayFCodePrinter(FCodePrinter):
|
|||
# 2. X방향(i) 1차원 평균화 변수인 경우 (i) 인덱스 부착
|
||||
if name in self.avg_symbols:
|
||||
return f"{self.avg_symbols[name]}(i)"
|
||||
if name.startswith("avg_") or "_avg_" in name or name.endswith("_avg"):
|
||||
return f"{name}(i)"
|
||||
# 3. 변동량 변수(u__prime)인 경우, 원본 격자점 값과 1차원 평균값의 편차식인 '(u(i,j,k) - avg_u(i))'로 자동 인라인 전개
|
||||
if name.endswith("__prime"):
|
||||
base = name[:-7]
|
||||
arr = self.array_symbols.get(base, base)
|
||||
return f"({arr}(i,j,k) - {{0}}avg_{base}(i))"
|
||||
avg_name = f"avg_{base}"
|
||||
printed_avg = f"{self.avg_symbols.get(avg_name, avg_name)}(i)"
|
||||
return f"({arr}(i,j,k) - {printed_avg})"
|
||||
return name
|
||||
|
||||
def _print_Function(self, expr):
|
||||
|
|
@ -193,10 +193,12 @@ class SympyOptimizer:
|
|||
if hasattr(f, 'attr') and f.attr.get('export')
|
||||
) # 디스크로 파일 출력이 설정된 최종 목표 변수 집합
|
||||
self.averaged_targets = set()
|
||||
self.avg_names = set()
|
||||
|
||||
def set_averaged(self, averaged_dict):
|
||||
# 평균화 대상이 되는 변수 집합을 수집
|
||||
self.averaged_targets = {a.target for a in averaged_dict.values()}
|
||||
self.avg_names = set(averaged_dict.keys())
|
||||
|
||||
def get_sympy_expr(self, name):
|
||||
"""특정 변수 명칭에 대해 기호적으로 완전히 확장 대입된 SymPy Expression 객체를 빌드하여 캐싱합니다.
|
||||
|
|
@ -351,7 +353,8 @@ class SympyOptimizer:
|
|||
else:
|
||||
array_symbols[k] = k
|
||||
|
||||
printer = ArrayFCodePrinter(array_symbols=array_symbols)
|
||||
avg_symbols = {k: k for k in getattr(self, 'avg_names', [])}
|
||||
printer = ArrayFCodePrinter(array_symbols=array_symbols, avg_symbols=avg_symbols)
|
||||
|
||||
# 2차: 공통 부분식 제거(CSE) 알고리즘 가동
|
||||
# 복잡하게 중복 사용되는 수식 구조를 서브 트리로 분리하여 임시 기호(x0, x1 등)와 최종 축소 식으로 분할
|
||||
|
|
|
|||
|
|
@ -171,38 +171,41 @@ MODULE post
|
|||
real(real64) :: tmp1,tmp2
|
||||
real(real64) :: dt,dummyu
|
||||
INTEGER :: ncyc
|
||||
INTEGER :: u_num
|
||||
CHARACTER(len=64) :: filename
|
||||
|
||||
character(len=30) :: date
|
||||
integer :: date_values(8)
|
||||
|
||||
OPEN(num,FORM='unformatted',STATUS='unknown')
|
||||
WRITE(filename, '(A,I0)') 'fort.', num
|
||||
OPEN(newunit=u_num, FILE=trim(filename), FORM='unformatted', STATUS='unknown')
|
||||
|
||||
READ (num) tnow,nx,ny,nz,tmp1,tmp2
|
||||
READ (u_num) tnow,nx,ny,nz,tmp1,tmp2
|
||||
|
||||
IF ((nx .ne. nxp) .or. (ny .ne. nyp) .or. (nz .ne. nzp)) THEN
|
||||
WRITE(0,*) "Array dimension mismatch", nx, ny, nz, " != ", nxp, nyp, nzp
|
||||
STOP -1
|
||||
ENDIF
|
||||
|
||||
READ (num) ncyc,dt,dummyu
|
||||
READ (num) tmpr(1:2)
|
||||
READ (num) tmpr(1:2)
|
||||
READ (num) tmpr(1:2)
|
||||
READ (u_num) ncyc,dt,dummyu
|
||||
READ (u_num) tmpr(1:2)
|
||||
READ (u_num) tmpr(1:2)
|
||||
READ (u_num) tmpr(1:2)
|
||||
|
||||
num_=num
|
||||
|
||||
IF(num.le.shiftnum) THEN
|
||||
! WRITE(*,*) ' with an old fort data from Nueman-0X'
|
||||
READ (num) u,v,w,old_scalar
|
||||
READ (u_num) u,v,w,old_scalar
|
||||
y(:,:,:) = old_scalar(2,:,:,:)
|
||||
ELSE
|
||||
! WRITE(*,*) ' with a new fort data from Comb-Cluster'
|
||||
READ (num) u,v,w,new_scalar
|
||||
READ (u_num) u,v,w,new_scalar
|
||||
u = u + dummyu
|
||||
y = new_scalar(:,:,:,2)
|
||||
ENDIF
|
||||
|
||||
CLOSE (num)
|
||||
CLOSE (u_num)
|
||||
|
||||
call date_and_time(values=date_values)
|
||||
write(date, '(I4.4,"-",I2.2,"-",I2.2," ",I2.2,":",I2.2,":",I2.2)') &
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue