mirror of
https://github.com/smyalygames/FiniteVolumeGPU.git
synced 2025-11-27 22:51:47 +01:00
41 lines
1.3 KiB
Python
41 lines
1.3 KiB
Python
import logging
|
|
|
|
import numpy as np
|
|
|
|
|
|
class BaseArray3D(object):
|
|
"""
|
|
A base class that holds 3D data. To be used depending on the GPGPU language.
|
|
"""
|
|
def __init__(self, nx, ny, nz, x_halo, y_halo, z_halo, cpu_data=None):
|
|
"""
|
|
Uploads initial data to the CL device
|
|
"""
|
|
|
|
self.logger = logging.getLogger(__name__)
|
|
self.nx = nx
|
|
self.ny = ny
|
|
self.nz = nz
|
|
self.x_halo = x_halo
|
|
self.y_halo = y_halo
|
|
self.z_halo = z_halo
|
|
|
|
self.nx_halo = nx + 2 * x_halo
|
|
self.ny_halo = ny + 2 * y_halo
|
|
self.nz_halo = nz + 2 * z_halo
|
|
|
|
# If we don't have any data, just allocate and return
|
|
if cpu_data is None:
|
|
return
|
|
|
|
# Make sure data is in proper format
|
|
if (cpu_data.shape != (self.nz_halo, self.ny_halo, self.nx_halo)
|
|
and cpu_data.shape != (self.nz, self.ny, self.nx)):
|
|
raise ValueError(f"Wrong shape of data {str(cpu_data.shape)} vs {str((self.nz, self.ny, self.nx))} / "
|
|
+ f"{str((self.nz_halo, self.ny_halo, self.nx_halo))}")
|
|
|
|
if cpu_data.itemsize != 4:
|
|
raise ValueError("Wrong size of data type")
|
|
|
|
if np.isfortran(cpu_data):
|
|
raise TypeError("Wrong datatype (Fortran, expected C)") |