1#!/usr/bin/python3 2 3import pickle, numpy 4import dune.generator 5import ufl 6from dune.grid import structuredGrid, gridFunction 7from dune.fem.space import lagrange 8 9class CheckPointer: 10 def __init__(self,fileName,hgrid=None): 11 if hgrid is None: 12 self.file = open(fileName,'rb') 13 self.hgrid = pickle.load(self.file) 14 else: 15 self.file = open(fileName,'wb') 16 self.hgrid = hgrid 17 pickle.dump(self.hgrid,self.file) 18 self.items = [] 19 20 def hierarchicalGrid(self): 21 return self.hgrid 22 23 def add(self,item): 24 self.items += [item] 25 26 def backup(self): 27 for i in self.items: 28 if hasattr(i,"read"): 29 pickle.dump(i.write(),self.file) 30 else: 31 pickle.dump(i,self.file) 32 def restore(self): 33 for i in self.items: 34 if hasattr(i,"read"): 35 i.read( pickle.load(self.file) ) 36 else: 37 i = pickle.load( self.file ) # this doesn't work 38 39def run(restore=False): 40 if not restore: 41 grid = structuredGrid([0,0],[1,1],[2,2]) 42 grid.hierarchicalGrid.globalRefine(2) 43 checkPointer = CheckPointer("dumpA", grid.hierarchicalGrid) 44 else: 45 checkPointer = CheckPointer("dumpA") 46 grid = checkPointer.hierarchicalGrid().leafView 47 48 space = lagrange(grid) 49 df = space.interpolate([0],name="test") 50 checkPointer.add(df) 51 52 spc = lagrange(grid, storage='istl') 53 df_istl = spc.interpolate([0],name="test_istl") 54 55 # test discrete function assignment 56 df.assign( df_istl ) 57 df_istl.assign( df ) 58 59 if not restore: 60 print("interpolating grid function") 61 @gridFunction(grid) 62 def gf(x): return x[0]*x[1]*(1-x[0])*(1-x[1]) 63 df.interpolate( gf ) 64 else: 65 print("restoring discrete function") 66 checkPointer.restore() 67 68 # df.plot() 69 if not restore: 70 checkPointer.backup() 71 72 73if __name__ == "__main__": 74 run(False) 75 run(True) 76