refactor: enforce ISP and LSP compliance (Phase 2)
All checks were successful
CI Test Suite / run-tests (push) Successful in 1m11s
Deploy Documentation / build-and-deploy (push) Successful in 54s

This commit is contained in:
ignis 2026-06-04 01:57:27 +00:00
parent 56996691d8
commit eef9f59a56

View file

@ -765,42 +765,29 @@ def make_allocate(name, shape, init_zero=True):
return alloc_str
class FieldBase (object):
"""모든 물리 필드 객체의 최상위 기본 클래스로서 공통 데이터 구조 및 선언/할당 문자열 작성을 담당합니다."""
class DependencyNode(object):
"""의존성 관계 분석을 담당하는 추상 인터페이스 및 노드 클래스입니다."""
def __init__(self, name, fdict):
self.name = name
self.array = name # 실제 메모리 버퍼 상의 지칭 배열 명칭
self.fdict = fdict
self.dep = set([]) # 종속된(의존 중인) 하위 필드 리스트
self.fluc = False # 변동량 편차 계산 대상인지 여부
self.prime = False # 기본 데이터 파일로부터 읽어 들이는 원본 필드인지 여부
self.fdict = fdict
self.shape = "nxp,nyp,nzp" # 3차원 그리드 구조
self.dim = ":,:,:"
def depends_on(self, a):
return (a in self.dep)
return a in self.dep
def is_fluctuation(self):
return self.fluc
def export_on (self):
return False
def __repr__ (self):
return self.name
def checkFluctuation(self):
"""본 변수 혹은 의존하고 있는 하위 기호들 중에 변동량(Fluctuation) 관련 계산이 개입되어 있는지
상향식으로 전파 추적하는 재귀 메서드입니다.
"""
fset = set([])
for d in map(self.fdict.get, self.dep):
fset.update(d.checkFluctuation())
if self.is_fluctuation() or len(fset) > 0:
fset.add(self.name)
return fset
def depClosure(self):
@ -808,13 +795,16 @@ class FieldBase (object):
재귀적으로 타고 내려가 총합 폐쇄 집합(Closure Set)으로 묶어 반환합니다.
"""
fset = set(self.dep)
for d in self.dep:
fset.update(self.fdict[d].depClosure())
return fset
class Generatable(object):
"""Fortran 소스코드 생성이 가능한 필드에 대한 인터페이스입니다."""
def code(self, alloc=None):
raise NotImplementedError
def code_decl(self):
real_array_decl = "real(real64), allocatable, dimension({1}) :: {0}"
return real_array_decl.format(self.name, self.dim)
@ -827,7 +817,23 @@ class FieldBase (object):
return real_array_free.format(self.name)
class FieldExporter (object):
class FieldBase (DependencyNode):
"""모든 물리 필드 객체의 최상위 기본 클래스로서 공통 데이터 구조를 정의합니다."""
def __init__ (self, name, fdict):
super(FieldBase, self).__init__(name, fdict)
self.array = name # 실제 메모리 버퍼 상의 지칭 배열 명칭
self.prime = False # 기본 데이터 파일로부터 읽어 들이는 원본 필드인지 여부
self.shape = "nxp,nyp,nzp" # 3차원 그리드 구조
self.dim = ":,:,:"
def export_on (self):
return False
def __repr__ (self):
return self.name
class FieldExporter (Generatable):
"""물리 필드 데이터를 병렬 분산 디스크 시스템으로 직접 추출(Export)하는 고성능 MPI-IO 서브루틴 블록을
생성하는 템플릿 처리 클래스입니다.
@ -1001,7 +1007,7 @@ end do
class Field (FieldBase):
class Field (FieldBase, Generatable):
"""일반 대입 계산 변수를 관리하며, 3차원 격자점 루프 코드 생성을 담당하는 핵심 클래스입니다.
SymPy 최적화 CSE 적용 코드를 루프 본문에 결합합니다.
"""
@ -1077,7 +1083,7 @@ end block
return calculation_code + export_code
class FluctuationField (FieldBase):
class FluctuationField (FieldBase, Generatable):
"""물리 필드의 난류 변동 성분(Fluctuation, u' = u - <u_w>)을 계산하기 위한 변수 클래스입니다.
수식 내의 u' 기호를 평균량과의 차이 수식으로 팽창하여 할당합니다.
"""
@ -1149,20 +1155,8 @@ class PrimaryField (FieldBase):
self.latex = name
self.latex_given = None
def code (self, alloc=None):
return "! {} is read from file".format(self.name)
def code_decl (self):
return "! {} is read from file".format(self.name)
def code_alloc (self):
return "! {} is read from file".format(self.name)
def code_free (self):
return "! {} is read from file".format(self.name)
class DerivedField (FieldBase):
class DerivedField (FieldBase, Generatable):
"""수치 공간 미분(ddx, d2dy 등)을 수행하여 계산되는 유도 필드 클래스입니다.
Fortran 수치 차분 패키지 서브루틴(Compact.f90 구현된 dfnonp, dfp )
동적 호출 코드를 출력합니다.
@ -1185,7 +1179,7 @@ class DerivedField (FieldBase):
return "call {0} ( {2}, {1} )".format(self.op, varray, self.array)
class AveragedField (FieldBase):
class AveragedField (FieldBase, Generatable):
"""특정 물리 필드를 격자의 동질 차원(예: X 방향 1D선상 평균)에 대해
공간 통계 평균(Average) 연산을 수행하는 1차원 필드 클래스입니다.
"""