"""This implements support for 4th-order accurate finite-volume databy adding support for converting between cell averages and centers."""importnumpyasnpfrompyro.mesh.patchimportCellCenterData2d
[docs]classFV2d(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]defto_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.ngc[:,:]=a[:,:]c.v(buf=ng-1)[:,:]=a.v(buf=ng-1)-self.grid.dx**2*a.lap(buf=ng-1)/24.0ifis_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))returnc
[docs]deffrom_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