Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 def rawpointer(self):
     return rawpointer(self.soln)
 def rawpointer(self):
     return rawpointer(self.grid)