Пример #1
0
    def add_data(self,
                 silo,
                 variables=[],
                 scalars=[],
                 vectors=[],
                 expressions=[],
                 time=None,
                 step=None,
                 scale_factor=1):
        if scalars or vectors:
            import warnings
            warnings.warn("`scalars' and `vectors' arguments are deprecated",
                          DeprecationWarning)
            variables = scalars + vectors

        from pyvisfile.silo import DB_NODECENT, DBOPT_DTIME, DBOPT_CYCLE

        # put mesh coordinates
        mesh_opts = {}
        if time is not None:
            mesh_opts[DBOPT_DTIME] = float(time)
        if step is not None:
            mesh_opts[DBOPT_CYCLE] = int(step)

        if self.dim == 1:
            for name, field in variables:
                from hedge.tools import is_obj_array
                if is_obj_array(field):
                    AXES = ["x", "y", "z", "w"]
                    for i, f_i in enumerate(field):
                        silo.put_curve(name + AXES[i], self.xvals,
                                       scale_factor * f_i, mesh_opts)
                else:
                    silo.put_curve(name, self.xvals, scale_factor * field,
                                   mesh_opts)
        else:
            self.fine_mesh.put_mesh(silo, "finezonelist", "finemesh",
                                    mesh_opts)
            self.coarse_mesh.put_mesh(silo, "coarsezonelist", "mesh",
                                      mesh_opts)

            from hedge.tools import log_shape

            # put data
            for name, field in variables:
                ls = log_shape(field)
                if ls != () and ls[0] > 1:
                    assert len(ls) == 1
                    silo.put_ucdvar(
                        name, "finemesh",
                        ["%s_comp%d" % (name, i) for i in range(ls[0])],
                        scale_factor * field, DB_NODECENT)
                else:
                    if ls != ():
                        field = field[0]
                    silo.put_ucdvar1(name, "finemesh", scale_factor * field,
                                     DB_NODECENT)

        if expressions:
            silo.put_defvars("defvars", expressions)
Пример #2
0
Файл: log.py Проект: gimac/hedge
    def __call__(self):
        var = self.getter()

        from hedge.tools import log_shape

        if len(log_shape(var)) == 1:
            return sum(self.discr.integral(np.abs(v)) for v in var)
        else:
            return self.discr.integral(var)
Пример #3
0
    def apply_mask(field):
        from hedge.tools import log_shape
        ls = log_shape(field)
        result = discr.volume_empty(ls)
        from pytools import indices_in_shape
        for i in indices_in_shape(ls):
            result[i] = mask * field[i]

        return result
Пример #4
0
    def apply_mask(field):
        from hedge.tools import log_shape
        ls = log_shape(field)
        result = discr.volume_empty(ls)
        from pytools import indices_in_shape
        for i in indices_in_shape(ls):
            result[i] = mask * field[i]

        return result
Пример #5
0
    def add_data(self, silo, variables=[], scalars=[], vectors=[], expressions=[],
            time=None, step=None, scale_factor=1):
        if scalars or vectors:
            import warnings
            warnings.warn("`scalars' and `vectors' arguments are deprecated",
                    DeprecationWarning)
            variables = scalars + vectors

        from pyvisfile.silo import DB_NODECENT, DBOPT_DTIME, DBOPT_CYCLE

        # put mesh coordinates
        mesh_opts = {}
        if time is not None:
            mesh_opts[DBOPT_DTIME] = float(time)
        if step is not None:
            mesh_opts[DBOPT_CYCLE] = int(step)

        if self.dim == 1:
            for name, field in variables:
                from hedge.tools import is_obj_array
                if is_obj_array(field):
                    AXES = ["x", "y", "z", "w"]
                    for i, f_i in enumerate(field):
                        silo.put_curve(name+AXES[i], self.xvals,
                                scale_factor*f_i, mesh_opts)
                else:
                    silo.put_curve(name, self.xvals,
                            scale_factor*field, mesh_opts)
        else:
            self.fine_mesh.put_mesh(silo, "finezonelist", "finemesh", mesh_opts)
            self.coarse_mesh.put_mesh(silo, "coarsezonelist", "mesh", mesh_opts)

            from hedge.tools import log_shape

            # put data
            for name, field in variables:
                ls = log_shape(field)
                if ls != () and ls[0] > 1:
                    assert len(ls) == 1
                    silo.put_ucdvar(name, "finemesh",
                            ["%s_comp%d" % (name, i)
                                for i in range(ls[0])],
                            scale_factor*field, DB_NODECENT)
                else:
                    if ls != ():
                        field = field[0]
                    silo.put_ucdvar1(
                            name, "finemesh", scale_factor*field, DB_NODECENT)

        if expressions:
            silo.put_defvars("defvars", expressions)
Пример #6
0
    def split(self, whole_vol_vector):
        from pytools import indices_in_shape
        from hedge.tools import log_shape

        ls = log_shape(whole_vol_vector)

        if ls != ():
            result = [numpy.zeros(ls, dtype=object)
                    for part_emb in self._embeddings()]
            for p, part_emb in enumerate(self._embeddings()):
                for i in indices_in_shape(ls):
                    result[p][i] = whole_vol_vector[part_emb]
            return result
        else:
            return [whole_vol_vector[part_emb]
                    for part_emb in self._embeddings()]
Пример #7
0
    def split(self, whole_vol_vector):
        from pytools import indices_in_shape
        from hedge.tools import log_shape

        ls = log_shape(whole_vol_vector)

        if ls != ():
            result = [
                numpy.zeros(ls, dtype=object)
                for part_emb in self._embeddings()
            ]
            for p, part_emb in enumerate(self._embeddings()):
                for i in indices_in_shape(ls):
                    result[p][i] = whole_vol_vector[part_emb]
            return result
        else:
            return [
                whole_vol_vector[part_emb] for part_emb in self._embeddings()
            ]
Пример #8
0
    def reassemble(self, parts_vol_vectors):
        from pytools import single_valued, indices_in_shape
        from hedge.tools import log_shape
        ls = single_valued(log_shape(pvv) for pvv in parts_vol_vectors)

        def remap_scalar_field(idx):
            result = self.whole_discr.volume_zeros()
            for part_emb, part_vol_vector in zip(self._embeddings(),
                                                 parts_vol_vectors):
                result[part_emb] = part_vol_vector[idx]

            return result

        if ls != ():
            result = numpy.zeros(ls, dtype=object)
            for i in indices_in_shape(ls):
                result[i] = remap_scalar_field(i)
            return result
        else:
            return remap_scalar_field(())
Пример #9
0
    def reassemble(self, parts_vol_vectors):
        from pytools import single_valued, indices_in_shape
        from hedge.tools import log_shape
        ls = single_valued(log_shape(pvv) for pvv in parts_vol_vectors)

        def remap_scalar_field(idx):
            result = self.whole_discr.volume_zeros()
            for part_emb, part_vol_vector in zip(
                    self._embeddings(), parts_vol_vectors):
                result[part_emb] = part_vol_vector[idx]

            return result

        if ls != ():
            result = numpy.zeros(ls, dtype=object)
            for i in indices_in_shape(ls):
                result[i] = remap_scalar_field(i)
            return result
        else:
            return remap_scalar_field(())