示例#1
0
 def sample(value, domain, batch_size=None, name=None):
     assert isinstance(domain, Domain)
     if isinstance(value, Field):
         assert_same_rank(
             value.rank, domain.rank,
             'rank of value (%s) does not match domain (%s)' %
             (value.rank, domain.rank))
         if isinstance(value,
                       CenteredGrid) and value.box == domain.box and np.all(
                           value.resolution == domain.resolution):
             data = value.data
         else:
             point_field = CenteredGrid.getpoints(domain.box,
                                                  domain.resolution)
             point_field._batch_size = batch_size
             data = value.at(point_field).data
     else:  # value is constant
         if callable(value):
             x = CenteredGrid.getpoints(
                 domain.box, domain.resolution).copied_with(
                     extrapolation=Material.extrapolation_mode(
                         domain.boundaries),
                     name=name)
             value = value(x)
             return value
         components = math.staticshape(
             value)[-1] if math.ndims(value) > 0 else 1
         data = math.add(
             math.zeros((batch_size, ) + tuple(domain.resolution) +
                        (components, )), value)
     return CenteredGrid(data,
                         box=domain.box,
                         extrapolation=Material.extrapolation_mode(
                             domain.boundaries),
                         name=name)
示例#2
0
def _determine_rank(fields):
    rank = None
    for field in fields:
        if rank is None:
            rank = field.rank
        else:
            assert_same_rank(rank, field.rank, 'All fields must have the same rank')
    return rank
示例#3
0
 def _centered_grid(self,
                    data,
                    components=1,
                    dtype=None,
                    name=None,
                    batch_size=None,
                    extrapolation=None):
     warnings.warn(
         "Domain.centered_shape and Domain.centered_grid are deprecated. Use CenteredGrid.sample() instead.",
         DeprecationWarning)
     from phi.physics.field import CenteredGrid
     if extrapolation is None:
         extrapolation = Material.extrapolation_mode(self.boundaries)
     if callable(data):  # data is an initializer
         shape = self.centered_shape(components,
                                     batch_size=batch_size,
                                     name=name,
                                     extrapolation=extrapolation,
                                     age=())
         try:
             data = data(shape, dtype=dtype)
         except TypeError:
             data = data(shape)
         if data.age == ():
             data._age = 0.0
     from phi.physics.field import Field
     if isinstance(data, Field):
         assert_same_rank(data.rank, self.rank,
                          'data does not match Domain')
         data = data.at(CenteredGrid.getpoints(self.box, self.resolution))
         if name is not None:
             data = data.copied_with(name=name, extrapolation=extrapolation)
             data._batch_size = batch_size
         grid = data
     elif isinstance(data, (int, float)):
         shape = self.centered_shape(components,
                                     batch_size=batch_size,
                                     name=name,
                                     extrapolation=extrapolation,
                                     age=0.0)
         grid = math.zeros(shape, dtype=dtype) + data
     else:
         grid = CenteredGrid(data,
                             box=self.box,
                             extrapolation=extrapolation,
                             name=name)
     return grid
示例#4
0
 def sample(value, domain, batch_size=None):
     assert isinstance(domain, Domain)
     if isinstance(value, Field):
         assert_same_rank(
             value.rank, domain.rank,
             'rank of value (%s) does not match domain (%s)' %
             (value.rank, domain.rank))
         if isinstance(value,
                       CenteredGrid) and value.box == domain.box and np.all(
                           value.resolution == domain.resolution):
             data = value.data
         else:
             data = value.sample_at(
                 CenteredGrid.getpoints(domain.box, domain.resolution).data)
     else:  # value is constant
         components = math.staticshape(
             value)[-1] if math.ndims(value) > 0 else 1
         data = math.zeros((batch_size, ) + tuple(domain.resolution) +
                           (components, )) + value
     return CenteredGrid(data,
                         box=domain.box,
                         extrapolation=Material.extrapolation_mode(
                             domain.boundaries))
示例#5
0
 def centered_grid(self, data, components=1, dtype=np.float32, name=None, batch_size=None, extrapolation=None):
     if extrapolation is None:
         extrapolation = Material.extrapolation_mode(self.boundaries)
     if callable(data):  # data is an initializer
         shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=())
         try:
             data = data(shape, dtype=dtype)
         except TypeError:
             data = data(shape)
         if data.age == ():
             data._age = 0.0
     if isinstance(data, Field):
         assert_same_rank(data.rank, self.rank, 'data does not match Domain')
         data = data.at(CenteredGrid.getpoints(self.box, self.resolution))
         if name is not None:
             data = data.copied_with(name=name, extrapolation=extrapolation)
             data._batch_size = batch_size
         grid = data
     elif isinstance(data, (int, float)):
         shape = self.centered_shape(components, batch_size=batch_size, name=name, extrapolation=extrapolation, age=0.0)
         grid = math.zeros(shape, dtype=dtype) + data
     else:
         grid = CenteredGrid(data, box=self.box, extrapolation=extrapolation, name=name)
     return grid
示例#6
0
 def box(self, box):
     box = AABox.to_box(box, resolution_hint=self.resolution)
     assert_same_rank(len(self.data), self.box,
                      'StaggeredGrid.data does not match box.')
     return box