Source code for pyro.mesh.fv

"""This implements support for 4th-order accurate finite-volume data
by adding support for converting between cell averages and centers.

"""

import numpy as np

from pyro.mesh.patch import CellCenterData2d


[docs] class FV2d(CellCenterData2d): """this is a finite-volume grid. We expect the data to represent cell-averages, and do operations to 4th order. This assumes dx = dy """
[docs] def to_centers(self, name, is_positive=False): """ convert variable name from an average to cell-centers """ a = self.get_var(name) c = self.grid.scratch_array() ng = self.grid.ng c[:, :] = a[:, :] c.v(buf=ng-1)[:, :] = a.v(buf=ng-1) - self.grid.dx**2*a.lap(buf=ng-1)/24.0 if is_positive: c.v(buf=ng-1)[:, :] = np.where(c.v(buf=ng-1) >= 0.0, c.v(buf=ng-1), a.v(buf=ng-1)) return c
[docs] def from_centers(self, name): """treat the stored data as if it lives at cell-centers and convert it to an average """ self.fill_BC(name) a = self.get_var(name) a.v()[:, :] = a.v() + self.grid.dx**2*a.lap()/24.0