def arguments(self, **kwargs): mapper = {i.name: i for i in self.parameters} local_grids_mapper = { namespace['code-grid-name'](k): v for k, v in self.yk_soln.local_grids.items() } # The user has the illusion to provide plain data objects to the # generated kernels, but what we actually need and thus going to # provide are pointers to the wrapped YASK grids. for i in self.parameters: grid_arg = mapper.get(namespace['code-grid-name'](i.name)) if grid_arg is not None: assert i.provider.from_YASK is True obj = kwargs.get(i.name, i.provider) # Get the associated YaskGrid wrapper (scalars are a special case) wrapper = obj.data if not np.isscalar(obj) else YaskGridConst( obj) # Setup YASK grids ("sharing" user-provided or default data) target = self.yk_soln.grids.get(i.name) if target is not None: wrapper.give_storage(target) # Add C-level pointer to the YASK grids assert grid_arg.verify(wrapper.rawpointer) elif i.name in local_grids_mapper: # Add C-level pointer to the temporary YASK grids assert i.verify(rawpointer(local_grids_mapper[i.name])) return super(Operator, self).arguments(**kwargs)
def arguments(self, **kwargs): mapper = {i.name: i for i in self.parameters} local_grids_mapper = { namespace['code-grid-name'](k): v for k, v in self.yk_soln.local_grids.items() } # The user has the illusion to provide plain data objects to the # generated kernels, but what we actually need and thus going to # provide are pointers to the wrapped YASK grids. toshare = {} more_args = {} for i in self.parameters: grid_arg = mapper.get(namespace['code-grid-name'](i.name)) if grid_arg is not None: assert i.provider.from_YASK is True obj = kwargs.get(i.name, i.provider) # Get the associated Data wrapper (scalars are a special case) if np.isscalar(obj): wrapper = DataScalar(obj) toshare[i.provider] = wrapper else: wrapper = obj.data toshare[obj] = wrapper # Add C-level pointer to the YASK grids more_args[grid_arg.name] = wrapper.rawpointer elif i.name in local_grids_mapper: # Add C-level pointer to the temporary YASK grids more_args[i.name] = rawpointer(local_grids_mapper[i.name]) kwargs.update(more_args) return super(Operator, self).arguments(**kwargs), toshare
def arguments(self, **kwargs): args = {} # Add in solution pointer args[namespace['code-soln-name']] = self.yk_soln.rawpointer # Add in local grids pointers for k, v in self.yk_soln.local_grids.items(): args[namespace['code-grid-name'](k)] = rawpointer(v) return super(Operator, self).arguments(backend=args, **kwargs)
def _argument_defaults(self, arguments): default_args = super(Operator, self)._argument_defaults(arguments) # Add in solution pointer default_args[namespace['code-soln-name']] = self.yk_soln.rawpointer # Add in local grids pointers for k, v in self.yk_soln.local_grids.items(): default_args[namespace['code-grid-name'](k)] = rawpointer(v) return default_args
def arguments(self, **kwargs): args = {} # Add in solution pointers args.update( {cname: v.rawpointer for (_, cname), v in self.yk_solns.items()}) # Add in local grids pointers for k, v in self._local_grids.items(): args[namespace['code-grid-name'](k)] = rawpointer(v) return super(Operator, self).arguments(backend=args, **kwargs)
def rawpointer(self): return rawpointer(self.soln)
def rawpointer(self): return rawpointer(self.grid)