diff --git a/pydemo/euler/euler.py b/pydemo/euler/euler.py index 93be7d81c6264bd923f389cb761c37fc6190227b..b70c3376ebc2a4bc98735822840803d4f06e2561 100644 --- a/pydemo/euler/euler.py +++ b/pydemo/euler/euler.py @@ -1,5 +1,6 @@ from ufl import * from dune.common import FieldVector +from dune.grid import reader from dune.ufl import Space, GridFunction from dune.fem.function import gridFunction import numpy @@ -128,7 +129,8 @@ def sod(dim=2,gamma=1.4): #Model.domain=[[0, 0], [1, 0.25], [256, 64]] #Model.domain=[[0, 0], [1, 0.25], [128, 32]] Model.domain=[[0, 0], [1, 0.25], [64, 16]] - Model.endTime=0.15 + Model.domain=(reader.dgf, "grid2d_nonaffine.dgf") + Model.endTime=0.25 def chorin(gv,t): gf = gv.function("chorin","chorin.hh", Vl,Vr,gamma,x0,t,name="chorin") lgf = gf.localFunction() # this seems to fail? @@ -137,7 +139,7 @@ def sod(dim=2,gamma=1.4): lgf.bind(e) return FieldVector( Model.toCons(lgf(x)) ) # return Model.toCons(gf(e,x)) - lf.plot() + # lf.plot() return lf Model.exact = lambda gv,t: chorin(gv,t) Model.name="sod" diff --git a/pydemo/euler/main.py b/pydemo/euler/main.py index 40fac4b347a94c2a46ac1e334f26fc3a4f06066f..577bc3cd62d141409c577a2a26efd0c799315dee 100644 --- a/pydemo/euler/main.py +++ b/pydemo/euler/main.py @@ -1,6 +1,7 @@ #import mpi4py.rc # mpi4py.rc.threaded = False from dune.fem import parameter +from dune.alugrid import aluCubeGrid from dune.femdg.testing import run # from euler import constant as problem @@ -16,12 +17,9 @@ parameter.append({"fem.verboserank": 0}) primitive=lambda Model,uh: {"pressure": Model.toPrim(uh)[2]} parameters = {"fem.ode.odesolver": "EX", - "fem.timeprovider.factor": 0.25, "fem.ode.order": 3, - "femdg.limiter.admissiblefunctions": 1, - "femdg.limiter.indicator": 1, - "femdg.limiter.tolerance": 1, - "femdg.limiter.epsilon": 1e-8} + "femdg.limiter.tolerance":1 } + #----------------- # "dgadvectionflux.method": "EULER-HLLC", "EULER-HLL", "LLF" # default value is 'LLF' @@ -32,10 +30,16 @@ parameters = {"fem.ode.odesolver": "EX", # 0 = only dg solution | 1 = only reconstruction | 2 = both #----------------- -run(problem(), - startLevel=0, polOrder=2, limiter="default", - primitive=primitive, saveStep=0.16, subsamp=2, - dt=None,threading=False,grid="alucube", space="dgonb", +Model = problem() +Model.domain = aluCubeGrid(Model.domain,dimgrid=2) + +run(Model, + startLevel=3, polOrder=4, limiter="default", + primitive=primitive, saveStep=0.05, subsamp=2, + dt=None,threading=False,grid="alucube", + space="dglagrange", + # space=("dglagrange","lobatto"), + # space=("dglagrange","gauss"), parameters=parameters) # print(str(parameter)) diff --git a/python/dune/femdg/_operators.py b/python/dune/femdg/_operators.py index 1371f119fa1830b13b1f12d346da4db5ded4a3a7..56afc95edeb8f66f3ae42dfc383a605eac84e5e0 100644 --- a/python/dune/femdg/_operators.py +++ b/python/dune/femdg/_operators.py @@ -150,7 +150,7 @@ def femDGOperator(Model, space, advectionFlux="default", diffusionScheme = "cdg2", threading=False, - defaultQuadrature=False, + defaultQuadrature=True, codegen=True, initialTime=0.0, parameters=None): diff --git a/python/dune/femdg/rk.py b/python/dune/femdg/rk.py index 4db0e984509e393761d192e0277f79fae8ca6a32..1ec7972b3997edf82f8f15e1e6f35bc067860800 100644 --- a/python/dune/femdg/rk.py +++ b/python/dune/femdg/rk.py @@ -12,6 +12,13 @@ class FemDGStepper: self.rkScheme.setTimeStepSize(dt) self.rkScheme.solve(u) return self.rkScheme.deltaT() + @property + def deltaT(self): + return self.rkScheme.deltaT() + @deltaT.setter + def deltaT(self,dt): + self.rkScheme.setTimeStepSize(dt) + def femdgStepper(*,order=None,rkType=None,operator=None,cfl=None,parameters=True): if parameters is True: parameters = {} diff --git a/python/dune/femdg/testing.py b/python/dune/femdg/testing.py index 224a1d1f6ab35db072c0d0ebf4e467e0fed2d38d..01c33901af402331b579f0df9af2ffbf2d2b4741 100644 --- a/python/dune/femdg/testing.py +++ b/python/dune/femdg/testing.py @@ -63,7 +63,10 @@ def run(Model, Stepper=None, # create discrete function space try: - if space.lower() == "finitevolume": + if type(space) in [list,tuple]: + space = create.space( space[0], grid, dimRange=dimR, order=polOrder, + pointType=space[1] ) + elif space.lower() == "finitevolume": space = create.space( space, grid, dimRange=dimR) else: space = create.space( space, grid, order=polOrder, dimRange=dimR) @@ -72,7 +75,10 @@ def run(Model, Stepper=None, if modifyModel is not None: Model = modifyModel(Model,space) - operator = femDGOperator(Model, space, limiter=limiter, threading=threading, parameters=parameters ) + operator = femDGOperator(Model, space, + limiter=limiter, threading=threading, parameters=parameters, + defaultQuadrature=True + ) stepper = Stepper(operator, cfl) # create and initialize solution u_h = space.interpolate(Model.initial, name='u_h')