Skip to content
Snippets Groups Projects
Commit b504b6be authored by Robert K's avatar Robert K
Browse files

[feature][Python] modified shock_tube_fast.py

parent f05a7114
No related branches found
No related tags found
No related merge requests found
Pipeline #34815 failed
...@@ -126,7 +126,7 @@ def sod(dim=2,gamma=1.4): ...@@ -126,7 +126,7 @@ def sod(dim=2,gamma=1.4):
Model = CompressibleEulerReflection(dim,gamma) Model = CompressibleEulerReflection(dim,gamma)
Vl, Vr = [1.,0.,0.,1.], [0.125,0,0,0.1] Vl, Vr = [1.,0.,0.,1.], [0.125,0,0,0.1]
Model.initial=riemanProblem( Model, x[0], x0, Vl, Vr) Model.initial=riemanProblem( Model, x[0], x0, Vl, Vr)
Model.domain=[[0, 0], [1, 0.25], [64, 16]] Model.domain=[[0, 0], [1, 0.25], [8, 2]]
Model.endTime=0.15 Model.endTime=0.15
def chorin(gv,t): def chorin(gv,t):
gf = gv.function("chorin","chorin.hh", Vl,Vr,gamma,x0,t,name="chorin") gf = gv.function("chorin","chorin.hh", Vl,Vr,gamma,x0,t,name="chorin")
......
...@@ -42,20 +42,27 @@ from euler import sod as problem ...@@ -42,20 +42,27 @@ from euler import sod as problem
Model = problem(dim,gamma) Model = problem(dim,gamma)
parameter.append({"fem.verboserank": -1}) parameter.append({"fem.verboserank": 0})
parameter.append({"fem.timeprovider.factor": 0.35}) parameter.append({"fem.timeprovider.factor": 0.35})
parameter.append("parameter") parameter.append({"fem.threads.verbose" : True })
parameter.append({"fem.adaptation.method" : "none"})
#parameter.append("parameter")
parameters = {"fem.ode.odesolver": "EX", parameters = {"fem.ode.odesolver": "EX",
"fem.ode.order" : 3,
"fem.timeprovider.factor": 0.35, "fem.timeprovider.factor": 0.35,
"dgadvectionflux.method": "EULER-HLLC", # "femdg.limiter.admissiblefunctions" : 1,
"femdg.limiter.admissiblefunctions": 1, "femdg.nonblockingcomm" : True
"femdg.limiter.tolerance": 1e-8} # "dgadvectionflux.method": "EULER-LLF",
}
parameter.append(parameters)
x0,x1,N = Model.domain x0,x1,N = Model.domain
grid = structuredGrid(x0,x1,N) # grid = structuredGrid(x0,x1,N)
# grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N)) # grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N))
dimR = grid.dimension + 2 dimR = Model.dimRange
t = 0 t = 0
count = 0 count = 0
saveStep = 0.15 saveStep = 0.15
...@@ -63,26 +70,28 @@ saveTime = saveStep ...@@ -63,26 +70,28 @@ saveTime = saveStep
def initialize(space): def initialize(space):
return space.interpolate(Model.initial, name='u_h') return space.interpolate(Model.initial, name='u_h')
if space.order == 0: #if space.order == 0:
return space.interpolate(initial, name='u_h') # return space.interpolate(initial, name='u_h')
else: #else:
lagOrder = 1 # space.order # lagOrder = 1 # space.order
spacelag = create.space("lagrange", space.grid, order=lagOrder, dimRange=space.dimRange) # spacelag = create.space("lagrange", space.grid, order=lagOrder, dimRange=space.dimRange)
u_h = spacelag.interpolate(initial, name='tmp') # u_h = spacelag.interpolate(initial, name='tmp')
return space.interpolate(u_h, name='u_h') # return space.interpolate(u_h, name='u_h')
def useODESolver(polOrder=2, limiter='default', codegen=True): def useODESolver(polOrder=2, limiter='default', codegen=True, spc='onb'):
global count, t, dt, saveTime global count, t, dt, saveTime
polOrder = polOrder polOrder = polOrder
if False: if spc == 'lobatto':
# needs change in dune/fem-dg/operator/dg/passtraits.hh from dune.fem.space import dglagrange
space = create.space("dglegendre", grid, order=polOrder, dimRange=dimR, hierarchical=False) space = dglagrange( grid, order=polOrder, dimRange=dimR, pointType='lobatto', codegen=False)
#space = create.space("dglegendre", grid, order=polOrder, dimRange=dimR, hierarchical=False)
else: else:
space = create.space("dgonb", grid, order=polOrder, dimRange=dimR, codegen=True) from dune.fem.space import dgonb
space = dgonb(grid, order=polOrder, dimRange=dimR, codegen=False)
u_h = initialize(space) u_h = initialize(space)
# rho, v, p = Model.toPrim(u_h) # rho, v, p = Model.toPrim(u_h)
operator = femDGOperator(Model, space, limiter=limiter, threading=True, parameters=parameters ) operator = femDGOperator(Model, space, limiter=limiter, threading=False )
ode = rungeKuttaSolver( operator, parameters=parameters ) ode = rungeKuttaSolver( operator )
operator.applyLimiter( u_h ) operator.applyLimiter( u_h )
print("number of elements: ",grid.size(0),flush=True) print("number of elements: ",grid.size(0),flush=True)
...@@ -94,7 +103,10 @@ def useODESolver(polOrder=2, limiter='default', codegen=True): ...@@ -94,7 +103,10 @@ def useODESolver(polOrder=2, limiter='default', codegen=True):
number=count, subsampling=2) number=count, subsampling=2)
start = time.time() start = time.time()
tcount = 0 tcount = 0
#dt = 0.0001325
while t < Model.endTime: while t < Model.endTime:
#ode.setTimeStepSize( dt )
ode.solve(u_h) ode.solve(u_h)
dt = ode.deltaT() dt = ode.deltaT()
t += dt t += dt
...@@ -109,6 +121,10 @@ def useODESolver(polOrder=2, limiter='default', codegen=True): ...@@ -109,6 +121,10 @@ def useODESolver(polOrder=2, limiter='default', codegen=True):
#cellvector={"velocity":v}, #cellvector={"velocity":v},
number=count, subsampling=2) number=count, subsampling=2)
saveTime += saveStep saveTime += saveStep
if t + dt > Model.endTime:
print('[',tcount,']','dt = ', dt, 'time = ',t, 'count = ',count, flush=True )
break
print("time loop:",time.time()-start) print("time loop:",time.time()-start)
print("number of time steps ", tcount) print("number of time steps ", tcount)
grid.writeVTK(Model.name, grid.writeVTK(Model.name,
...@@ -123,9 +139,9 @@ if scheme == 0: ...@@ -123,9 +139,9 @@ if scheme == 0:
# grid = structuredGrid(x0,x1,N) # grid = structuredGrid(x0,x1,N)
#grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N)) #grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N))
grid = create.grid("ALUCube", cartesianDomain(x0,x1,N)) grid = create.grid("ALUCube", cartesianDomain(x0,x1,N))
grid.hierarchicalGrid.globalRefine(1) grid.hierarchicalGrid.globalRefine(3)
# grid = create.view("adaptive", grid) # grid = create.view("adaptive", grid)
useODESolver(dgOrder,'default') # third order with limiter useODESolver(dgOrder,'default',spc='onb') # third order with limiter
elif scheme == 1: elif scheme == 1:
#N = [n*4 for n in N] #N = [n*4 for n in N]
#grid = structuredGrid(x0,x1,N) #grid = structuredGrid(x0,x1,N)
...@@ -142,3 +158,5 @@ elif scheme == 2: ...@@ -142,3 +158,5 @@ elif scheme == 2:
#grid = structuredGrid(x0,x1,N) #grid = structuredGrid(x0,x1,N)
# grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N)) # grid = create.grid("ALUSimplex", cartesianDomain(x0,x1,N))
useODESolver(0,'default') # FV scheme with limiter useODESolver(0,'default') # FV scheme with limiter
parameter.write("param.log")
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment