def __init__(self, *args, **kwargs): template_dir = path.join(get_package_dir(), "templates") staggered_dir = path.join(get_package_dir(), "templates/staggered") self.lookup = TemplateLookup(directories=[template_dir, staggered_dir]) super(Field, self).__init__() # Pass additional arguments to self.set() if len(kwargs) > 0: self.set(**kwargs)
def __init__(self, dimension, domain_size=None, grid_size=None, time_step=None, stress_fields=None, velocity_fields=None, omp=True, ivdep=True, simd=False, double=False, io=False, expand=True, eval_const=True, output_vts=False, converge=False): self.dimension = dimension template_dir = path.join(get_package_dir(), "templates") staggered_dir = path.join(get_package_dir(), "templates/staggered") self.lookup = TemplateLookup(directories=[template_dir, staggered_dir]) # List of associated fields self.sfields = [] self.vfields = [] # Switches self.omp = omp self.ivdep = ivdep self.simd = simd self.double = double self.expand = expand self.eval_const = eval_const self.real_t = 'double' if self.double else 'float' self.output_vts = output_vts self.converge = converge # number of ghost cells for boundary self.margin = Variable('margin', 2, 'int', True) self.size = [1.0] * dimension # default domain size # grid size symbols, dim1, dim2, ... self.dim = [Variable('dim'+str(k+1), 10+1+self.margin.value*2, 'int', True) for k in range(self.dimension)] # spacing symbols, dx1, dx2, ... self.spacing = [Variable('dx'+str(k+1), int(self.size[k] / (self.dim[k].value-1-self.margin.value*2)), self.real_t, True) for k in range(self.dimension)] # indices symbols, x1, x2 ... self.index = [Symbol('x'+str(k+1)) for k in range(dimension)] # default 2nd order in time, 4th order in space, i.e. (2,4) scheme default_accuracy = [1] + [2]*self.dimension self.set_accuracy(default_accuracy) # Optional further grid settings if stress_fields: self.set_stress_fields(stress_fields) if velocity_fields: self.set_velocity_fields(velocity_fields) if domain_size: self.set_domain_size(domain_size) if grid_size: self.set_grid_size(grid_size) self.t = Symbol('t') self.dt = Variable('dt', 0.01, self.real_t, True) self.ntsteps = Variable('ntsteps', 100, 'int', True) self.alignment = mmap.PAGESIZE # default alignment for malloc # user defined variables # use dictionary because of potential duplication self.defined_variable = {} self._update_spacing()