你已经派生过 gprMax
镜像自地址
https://gitee.com/sunhf/gprMax.git
已同步 2025-08-08 07:24:19 +08:00
Begin moving subgrids into Model class
这个提交包含在:
@@ -89,7 +89,6 @@ class FDTDGrid:
|
||||
self.srcsteps: List[int] = [0, 0, 0]
|
||||
self.rxsteps: List[int] = [0, 0, 0]
|
||||
self.snapshots = []
|
||||
self.subgrids = []
|
||||
|
||||
@property
|
||||
def dx(self) -> float:
|
||||
|
@@ -17,10 +17,9 @@
|
||||
# along with gprMax. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import datetime
|
||||
import itertools
|
||||
import logging
|
||||
import sys
|
||||
from typing import Any, Tuple
|
||||
from typing import List
|
||||
|
||||
import humanize
|
||||
import numpy as np
|
||||
@@ -29,22 +28,19 @@ from colorama import Fore, Style, init
|
||||
|
||||
from gprMax.grid.cuda_grid import CUDAGrid
|
||||
from gprMax.grid.opencl_grid import OpenCLGrid
|
||||
from gprMax.subgrids.grid import SubGridBaseGrid
|
||||
|
||||
init()
|
||||
|
||||
from terminaltables import SingleTable
|
||||
from tqdm import tqdm
|
||||
|
||||
import gprMax.config as config
|
||||
|
||||
from .cython.yee_cell_build import build_electric_components, build_magnetic_components
|
||||
from .fields_outputs import write_hdf5_outputfile
|
||||
from .geometry_outputs import save_geometry_views
|
||||
from .grid.fdtd_grid import FDTDGrid, dispersion_analysis
|
||||
from .materials import process_materials
|
||||
from .pml import CFS, build_pml, print_pml_info
|
||||
from .grid.fdtd_grid import FDTDGrid
|
||||
from .snapshots import save_snapshots
|
||||
from .utilities.host_info import mem_check_build_all, mem_check_run_all, set_omp_threads
|
||||
from .utilities.host_info import set_omp_threads
|
||||
from .utilities.utilities import get_terminal_width
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -67,6 +63,8 @@ class Model:
|
||||
self.timewindow = 0.0
|
||||
|
||||
self.G = self._create_grid()
|
||||
self.subgrids: List[SubGridBaseGrid] = []
|
||||
|
||||
# Monitor memory usage
|
||||
self.p = None
|
||||
|
||||
|
@@ -36,6 +36,8 @@ class SubGridBaseGrid(FDTDGrid, ABC):
|
||||
|
||||
# Name of the grid
|
||||
self.name = kwargs["id"]
|
||||
self.parent_grid: FDTDGrid
|
||||
self.iterations = 0
|
||||
|
||||
self.filter = kwargs["filter"]
|
||||
|
||||
|
@@ -23,6 +23,7 @@ from typing import List, Tuple, Union
|
||||
import numpy as np
|
||||
|
||||
from gprMax.grid.fdtd_grid import FDTDGrid
|
||||
from gprMax.model import Model
|
||||
from gprMax.subgrids.grid import SubGridBaseGrid
|
||||
from gprMax.user_inputs import MainGridUserInput
|
||||
|
||||
@@ -85,24 +86,24 @@ class SubGridBase(UserObjectMulti):
|
||||
sg.ny = 2 * sg.n_boundary_cells_y + sg.nwy
|
||||
sg.nz = 2 * sg.n_boundary_cells_z + sg.nwz
|
||||
|
||||
def set_iterations(self, sg: SubGridBaseGrid, main: FDTDGrid):
|
||||
def set_iterations(self, sg: SubGridBaseGrid, model: Model):
|
||||
"""Sets number of iterations that will take place in the subgrid."""
|
||||
sg.iterations = main.iterations * sg.ratio
|
||||
sg.iterations = model.iterations * sg.ratio
|
||||
|
||||
def setup(self, sg: SubGridBaseGrid, grid: FDTDGrid, uip: MainGridUserInput):
|
||||
def setup(self, sg: SubGridBaseGrid, model: Model, uip: MainGridUserInput):
|
||||
""" "Common setup to both all subgrid types."""
|
||||
p1 = self.kwargs["p1"]
|
||||
p2 = self.kwargs["p2"]
|
||||
|
||||
p1, p2 = uip.check_box_points(p1, p2, self.__str__())
|
||||
|
||||
self.set_discretisation(sg, grid)
|
||||
self.set_discretisation(sg, model.G)
|
||||
|
||||
# Set temporal discretisation including any inherited time step
|
||||
# stability factor from the main grid
|
||||
sg.calculate_dt()
|
||||
if grid.dt_mod:
|
||||
sg.dt = sg.dt * grid.dt_mod
|
||||
if model.dt_mod:
|
||||
sg.dt = sg.dt * model.dt_mod
|
||||
|
||||
# Set the indices related to the subgrids main grid placement
|
||||
self.set_main_grid_indices(sg, uip, p1, p2)
|
||||
@@ -120,29 +121,27 @@ class SubGridBase(UserObjectMulti):
|
||||
|
||||
self.set_working_region_cells(sg)
|
||||
self.set_total_cells(sg)
|
||||
self.set_iterations(sg, grid)
|
||||
self.set_iterations(sg, model)
|
||||
self.set_name(sg)
|
||||
|
||||
# Copy a reference for the main grid to the sub grid
|
||||
sg.parent_grid = grid
|
||||
|
||||
sg.timewindow = grid.timewindow
|
||||
sg.parent_grid = model.G
|
||||
|
||||
# Copy a subgrid reference to self so that children.build(grid, uip)
|
||||
# can access the correct grid.
|
||||
self.subgrid = sg
|
||||
|
||||
# Copy over built in materials
|
||||
sg.materials = [copy(m) for m in grid.materials if m.type == "builtin"]
|
||||
sg.materials = [copy(m) for m in model.G.materials if m.type == "builtin"]
|
||||
|
||||
# Don't mix and match different subgrid types
|
||||
for sg_made in grid.subgrids:
|
||||
for sg_made in model.subgrids:
|
||||
if type(sg) != type(sg_made):
|
||||
logger.exception(f"{self.__str__()} please only use one type of subgrid")
|
||||
raise ValueError
|
||||
|
||||
# Reference the subgrid under the main grid to which it belongs
|
||||
grid.subgrids.append(sg)
|
||||
model.subgrids.append(sg)
|
||||
|
||||
|
||||
class SubGridHSG(SubGridBase):
|
||||
@@ -199,7 +198,7 @@ class SubGridHSG(SubGridBase):
|
||||
self.order = 18
|
||||
self.hash = "#subgrid_hsg"
|
||||
|
||||
def build(self, grid: FDTDGrid, uip: MainGridUserInput) -> SubGridHSGUser:
|
||||
def build(self, model: Model, uip: MainGridUserInput) -> SubGridHSGUser:
|
||||
sg = SubGridHSGUser(**self.kwargs)
|
||||
self.setup(sg, grid, uip)
|
||||
self.setup(sg, model, uip)
|
||||
return sg
|
||||
|
在新工单中引用
屏蔽一个用户