import numpy as np
import matplotlib.pyplot as plt
import dedalus.public as d3
from scipy.special import jv
import logging
logger = logging.getLogger('__name__')
#Parameters
Nphi = 32
Nr = 128
l = 0.7
D = 1*10^(-7)
a = 100
b = 1*10^(-5)
s = 5*10^(-6)
stop_sim_time = 20
timestep = 1*10^(-3)
timestepper = d3.RK222
dtype = np.float64
#Bases
coords = d3.PolarCoordinates('phi','r')
dist = d3.Distributor(coords, dtype=dtype)
disk = d3.DiskBasis(coords, shape=(Nphi, Nr), radius=1, dtype=dtype)
edge = disk.edge
#Fields
p = dist.Field(name='p', bases=disk) #density
u = dist.VectorField(coords, name='u', bases=disk) #velocity
tau_u = dist.VectorField(coords, name='tau_u', bases=disk.edge)
tau_p = dist.Field(name='tau_p ')
t = dist.Field()
#Substitutions
phi, r = dist.local_grids(disk)
#Initial Conditions
p0 = 0.1
p['g'][0]=p0
u.fill_random('g', seed=42, distribution='normal')
#Problem
problem = d3.IVP([p, u], time=t, namespace=locals())
problem.add_equation("dt(p)=-div(p*u)")
problem.add_equation("dt(u)+s*grad(p)-D*lap(u)= (-l*u)@grad(u)+(a-b*(u@u))*u")
problem.add_equation("radial(u(r=1))=0")
#Solver
solver = problem.build_solver(timestepper)
solver.stop_sim_time = stop_sim_time
# Main loop
try:
logger.info('Starting main loop')
while solver.proceed:
solver.step(timestep)
if (solver.iteration-1) % 100 == 0:
max_u = 'u'
logger.info("Iteration=%i, Time=%e, dt=%e, max(u)=%e" %(solver.iteration, solver.sim_time, timestep, max_u))
except:
logger.error('Exception raised, triggering end of main loop.')
raise
finally:
solver.log_stats()