Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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()