diff --git a/demo/ChannelFlow.py b/demo/ChannelFlow.py
index 1b01d9e3..46400ad4 100644
--- a/demo/ChannelFlow.py
+++ b/demo/ChannelFlow.py
@@ -62,7 +62,7 @@ def __init__(self,
modsave=1e8,
moderror=100,
checkpoint=1000,
- timestepper='PDEIRK3'):
+ timestepper='IMEXRK3'):
self.nu = nu
self.dt = dt
self.conv = conv
@@ -292,8 +292,9 @@ def prepare_step(self, rk):
def assemble(self):
for pde in self.pdes.values():
pde.assemble()
- for pde in self.pdes1d.values():
- pde.assemble()
+ if comm.Get_rank() == 0:
+ for pde in self.pdes1d.values():
+ pde.assemble()
def solve(self, t=0, tstep=0, end_time=1000):
self.assemble()
diff --git a/demo/ChannelFlow2D.py b/demo/ChannelFlow2D.py
index 4821e8bb..3b7a0e76 100644
--- a/demo/ChannelFlow2D.py
+++ b/demo/ChannelFlow2D.py
@@ -87,7 +87,7 @@ def __init__(self,
self.TD = TensorProductSpace(comm, (self.D0, self.F1), collapse_fourier=False, modify_spaces_inplace=True) # Streamwise velocity
self.TC = TensorProductSpace(comm, (self.C0, self.F1), collapse_fourier=False, modify_spaces_inplace=True) # No bc
self.BD = VectorSpace([self.TB, self.TD]) # Velocity vector space
- self.CD = VectorSpace(self.TD) # Convection vector space
+ self.CD = VectorSpace(self.TD) # Convection vector space
self.CC = VectorSpace([self.TD, self.TC]) # Curl vector space
# Padded space for dealiasing
@@ -124,12 +124,12 @@ def __init__(self,
data={'0': {'U': [self.u_]}})
# set up equations
+ #v = TestFunction(self.TB.get_testspace(kind='PG'))
v = TestFunction(self.TB)
- h = TestFunction(self.TD)
# Chebyshev matrices are not sparse, so need a tailored solver. Legendre has simply 5 nonzero diagonals and can use generic solvers.
sol1 = chebyshev.la.Biharmonic if self.B0.family() == 'chebyshev' else la.SolverGeneric1ND
- sol2 = chebyshev.la.Helmholtz if self.B0.family() == 'chebyshev' else la.SolverGeneric1ND
+ #sol1 = la.SolverGeneric1ND
self.pdes = {
@@ -238,8 +238,9 @@ def prepare_step(self, rk):
def assemble(self):
for pde in self.pdes.values():
pde.assemble()
- for pde in self.pdes1d.values():
- pde.assemble()
+ if comm.Get_rank() == 0:
+ for pde in self.pdes1d.values():
+ pde.assemble()
def solve(self, t=0, tstep=0, end_time=1000):
self.assemble()
@@ -250,7 +251,7 @@ def solve(self, t=0, tstep=0, end_time=1000):
eq.compute_rhs(rk)
for eq in self.pdes.values():
eq.solve_step(rk)
- self.compute_vw(rk)
+ self.compute_v(rk)
t += self.dt
tstep += 1
self.update(t, tstep)
diff --git a/demo/MKM_MicroPolar.py b/demo/MKM_MicroPolar.py
index 7522a199..8b708bd0 100644
--- a/demo/MKM_MicroPolar.py
+++ b/demo/MKM_MicroPolar.py
@@ -23,7 +23,7 @@ def __init__(self,
family='C',
padding_factor=(1, 1.5, 1.5),
checkpoint=1000,
- timestepper='PDEIRK3',
+ timestepper='IMEXRK3',
rand=1e-7):
MicroPolar.__init__(self, N=N, domain=domain, Re=Re, J=J, m=m, NP=NP, dt=dt, conv=conv, modplot=modplot,
modsave=modsave, moderror=moderror, filename=filename, family=family,
@@ -282,7 +282,7 @@ def fromfile(self, filename="stats"):
'checkpoint': 1,
'sample_stats': 10,
'padding_factor': (1.5, 1.5, 1.5),
- 'timestepper': 'PDEIRK3', # IMEXRK222, IMEXRK443
+ 'timestepper': 'IMEXRK222', # IMEXRK222, IMEXRK443
}
c = MKM(**d)
t, tstep = c.initialize(from_checkpoint=False)
diff --git a/demo/OrrSommerfeld.py b/demo/OrrSommerfeld.py
index 5afcac39..78ee5310 100644
--- a/demo/OrrSommerfeld.py
+++ b/demo/OrrSommerfeld.py
@@ -29,11 +29,6 @@ def initialize(self, from_checkpoint=False):
# This is the convection at t=0
self.e0 = 0.5*dx(ub[0]**2+(ub[1]-(1-self.X[0]**2))**2)
self.acc = np.zeros(1)
- self.convection()
- for pde in self.pdes.values():
- pde.initialize()
- for pde in self.pdes1d.values():
- pde.initialize()
return 0, 0
def initOS(self, OS, eigvals, eigvectors, U, t=0.):
@@ -63,7 +58,7 @@ def compute_error(self, t):
def init_plots(self):
self.ub = ub = self.u_.backward()
self.im1 = 1
- if comm.Get_rank() == 0:
+ if comm.Get_rank() == 0 and comm.Get_size() == 1:
plt.figure(1, figsize=(6, 3))
self.im1 = plt.contourf(self.X[1][:, :, 0], self.X[0][:, :, 0], ub[0, :, :, 0], 100)
plt.colorbar(self.im1)
@@ -84,7 +79,7 @@ def plot(self, t, tstep):
self.init_plots()
if tstep % self.modplot == 0 and self.modplot > 0:
- if comm.Get_rank() == 0:
+ if comm.Get_rank() == 0 and comm.Get_size() == 1:
ub = self.u_.backward(self.ub)
X = self.X
self.im1.axes.clear()
diff --git a/demo/RayleighBenard2D.py b/demo/RayleighBenard2D.py
index 11438667..d25e4511 100644
--- a/demo/RayleighBenard2D.py
+++ b/demo/RayleighBenard2D.py
@@ -2,6 +2,7 @@
from ChannelFlow2D import KMM
import matplotlib.pyplot as plt
import sympy
+
np.warnings.filterwarnings('ignore')
# pylint: disable=attribute-defined-outside-init
@@ -153,7 +154,7 @@ def plot(self, t, tstep):
if tstep % self.modplot == 0 and self.modplot > 0:
ub = self.u_.backward(self.ub)
- Tb = self.T_.backward(self.Tb)
+ self.Tb = self.T_.backward(self.Tb)
if comm.Get_rank() == 0:
plt.figure(1)
#self.im1.set_UVC(ub[1, ::4, ::4], ub[0, ::4, ::4])
@@ -162,7 +163,7 @@ def plot(self, t, tstep):
plt.pause(1e-6)
plt.figure(2)
self.im2.axes.clear()
- self.im2.axes.contourf(self.X[1][:, :], self.X[0][:, :], Tb[:, :], 100)
+ self.im2.axes.contourf(self.X[1][:, :], self.X[0][:, :], self.Tb[:, :], 100)
self.im2.autoscale()
plt.pause(1e-6)
@@ -188,16 +189,16 @@ def solve(self, t=0, tstep=0, end_time=1000):
if __name__ == '__main__':
from time import time
- N = (256, 512)
+ N = (64, 128)
d = {
'N': N,
'Ra': 1000000.,
'Pr': 0.7,
- 'dt': 0.0025,
+ 'dt': 0.025,
'filename': f'RB_{N[0]}_{N[1]}',
'conv': 1,
- 'modplot': 100,
- 'moderror': 100,
+ 'modplot': 10,
+ 'moderror': 10,
'modsave': 100,
#'bcT': (0.9+0.1*sp.sin(2*(y-tt)), 0),
#'bcT': (0.9+0.1*sympy.sin(2*y), 0),
@@ -205,11 +206,11 @@ def solve(self, t=0, tstep=0, end_time=1000):
'family': 'C',
'checkpoint': 100,
#'padding_factor': 1,
- 'timestepper': 'IMEXRK222'
+ 'timestepper': 'IMEXRK3'
}
c = RayleighBenard(**d)
t, tstep = c.initialize(rand=0.001, from_checkpoint=False)
t0 = time()
- c.solve(t=t, tstep=tstep, end_time=100)
+ c.solve(t=t, tstep=tstep, end_time=15)
print('Computing time %2.4f'%(time()-t0))
diff --git a/docs/demos/Functions/functions.do.txt b/docs/demos/Functions/functions.do.txt
index 1f3c875b..480f35cb 100644
--- a/docs/demos/Functions/functions.do.txt
+++ b/docs/demos/Functions/functions.do.txt
@@ -337,8 +337,8 @@ for xj in X[0]:
We may alternatively plot on a uniform mesh
!bc pycod
-X = T.local_mesh(broadcast=True, uniform=True)
-plt.contourf(X[0], X[1], u.backward(kind='uniform'))
+X = T.local_mesh(bcast=True, kind='uniform')
+plt.contourf(X[0], X[1], u.backward(mesh='uniform'))
!ec
===== Curvilinear coordinates =====
diff --git a/docs/demos/Integration/surfaceintegration.do.txt b/docs/demos/Integration/surfaceintegration.do.txt
index 25df6ff6..98aa7d0f 100644
--- a/docs/demos/Integration/surfaceintegration.do.txt
+++ b/docs/demos/Integration/surfaceintegration.do.txt
@@ -138,7 +138,7 @@ spiral below, the result looks reasonable.
!bc pycod
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(4, 3))
-X = C.cartesian_mesh(uniform=True)
+X = C.cartesian_mesh(kind='uniform')
ax = fig.add_subplot(111, projection='3d')
p = ax.plot(X[0], X[1], X[2], 'r')
hx = ax.set_xticks(np.linspace(-1, 1, 5))
diff --git a/docs/demos/RayleighBenard/Makefile b/docs/demos/RayleighBenard/Makefile
index 410e4695..4dfc22d5 100644
--- a/docs/demos/RayleighBenard/Makefile
+++ b/docs/demos/RayleighBenard/Makefile
@@ -22,6 +22,11 @@ ${name}.rst: ${name}.do.txt
doconce format sphinx ${name} --sphinx_preserve_bib_keys
doconce subst 'XXX' ' ' $(basename $@).rst
+${name}.ipynb: ${name}.do.txt
+ doconce format ipynb $(basename $@).do.txt
+ #python add_metadata.py $(basename $@).ipynb
+ #jupyter nbconvert --inplace --execute ${basename $@}.ipynb
+
view:
open ${name}.pdf &
diff --git a/docs/demos/RayleighBenard/rayleighbenard.do.txt b/docs/demos/RayleighBenard/rayleighbenard.do.txt
index 94152390..b10fef10 100644
--- a/docs/demos/RayleighBenard/rayleighbenard.do.txt
+++ b/docs/demos/RayleighBenard/rayleighbenard.do.txt
@@ -15,16 +15,13 @@ these Rayleigh-Benard cells in a 2D channel with two walls of
different temperature in one direction, and periodicity in the other direction.
The solver described runs with MPI
without any further considerations required from the user.
-Note that there is a more physically realistic 3D solver implemented within
-"the spectralDNS project": "https://github.com/spectralDNS/spectralDNS/blob/master/spectralDNS/solvers/KMMRK3_RB.py".
-To allow for some simple optimizations, the solver described in this demo has been implemented in a class in the
-"RayleighBenardRk3.py": "https://github.com/spectralDNS/shenfun/blob/master/demo/RayleighBenardRK3.py"
-module in the demo folder of shenfun. Below are two example solutions, where the first (movie)
-has been run at a very high Rayleigh number (*Ra*), and the lower image with a low *Ra* (laminar).
+Note that there is also a more physically realistic "3D solver": "https://github.com/spectralDNS/shenfun/blob/master/demo/RayleighBenard.py".
+The solver described in this demo has been implemented in a class in the
+"RayleighBenard2D.py": "https://github.com/spectralDNS/shenfun/blob/master/demo/RayleighBenard2D.py"
+module in the demo folder of shenfun. Below is an example solution, which has been run at a very high
+Rayleigh number (*Ra*).
-FIGURE: [https://raw.githack.com/spectralDNS/spectralutilities/master/movies/RB_100x256_100k_fire.png, width=800] Temperature fluctuations in the Rayleigh Benard flow. The top and bottom walls are kept at different temperatures and this sets up the Rayleigh-Benard convection. The simulation is run at *Ra* =100,000, *Pr* =0.7 with 100 and 256 quadrature points in *x* and *y*-directions, respectively. label{fig:RB}
-
-FIGURE: [https://raw.githack.com/spectralDNS/spectralutilities/master/figures/RB_40x128_100_fire.png, width=800] Convection cells for a laminar flow. The simulation is run at *Ra* =100, *Pr* =0.7 with 40 and 128 quadrature points in *x* and *y*-directions, respectively. label{fig:RB_lam}
+FIGURE: [https://raw.githack.com/spectralDNS/spectralutilities/master/movies/RB_256_512_movie_jet.png, width=800] Temperature fluctuations in the Rayleigh Benard flow. The top and bottom walls are kept at different temperatures and this sets up the Rayleigh-Benard convection. The simulation is run at *Ra* =1,000,000, *Pr* =0.7 with 256 and 512 quadrature points in *x* and *y*-directions, respectively. label{fig:RB}
TOC: off
@@ -45,7 +42,7 @@ The governing equations solved in domain $\Omega=[-1, 1]\times [0, 2\pi]$ are
where $\bs{u}(x, y, t) (= u\bs{i} + v\bs{j})$ is the velocity vector, $p(x, y, t)$ is pressure, $T(x, y, t)$ is the temperature, and $\bs{i}$ and
$\bs{j}$ are the unity vectors for the $x$ and $y$-directions, respectively.
-The equations are complemented with boundary conditions $\bs{u}(\pm 1, y, t) = (0, 0), \bs{u}(x, 2 \pi, t) = \bs{u}(x, 0, t), T(1, y, t) = 1, T(-1, y, t) = 0, T(x, 2 \pi, t) = T(x, 0, t)$.
+The equations are complemented with boundary conditions $\bs{u}(\pm 1, y, t) = (0, 0), \bs{u}(x, 2 \pi, t) = \bs{u}(x, 0, t), T(-1, y, t) = 1, T(1, y, t) = 0, T(x, 2 \pi, t) = T(x, 0, t)$.
Note that these equations have been non-dimensionalized according to cite{pandey18}, using dimensionless
Rayleigh number $Ra=g \alpha \Delta T h^3/(\nu \kappa)$ and Prandtl number $Pr=\nu/\kappa$. Here
$g \bs{i}$ is the vector accelleration of gravity, $\Delta T$ is the temperature difference between
@@ -224,7 +221,7 @@ Fourier coefficient 0, Eq. (ref{eq:v}) becomes
!bt
\begin{equation}
-\frac{\partial v}{\partial t} + N_y = \sqrt{\frac{Pr}{Ra}} \nabla^2 v. label{eq:vx}
+\frac{\partial v}{\partial t} + N_y = \sqrt{\frac{Pr}{Ra}} \frac{\partial^2 v}{\partial x^2}. label{eq:vx}
\end{equation}
!et
@@ -276,8 +273,9 @@ To sum up, with the solution known at $t = t - \Delta t$, we solve
===== Temporal discretization =====
-The governing equations are integrated in time using a semi-implicit third order Runge Kutta method.
-This method applies to any generic equation
+The governing equations are integrated in time using any one of the time steppers available in
+shenfun. There are several possible IMEX Runge Kutta methods, see "integrators.py" : "https://github.com/spectralDNS/shenfun/blob/master/shenfun/utilities/integrators.py".
+The time steppers are used for any generic equation
!bt
\begin{equation}
@@ -285,76 +283,12 @@ This method applies to any generic equation
\end{equation}
!et
where $\mathcal{N}$ and $\mathcal{L}$ represents the nonlinear and linear contributions, respectively.
-With time discretized as $t_n = n \Delta t, \, n = 0, 1, 2, ...$, the
-Runge Kutta method also subdivides each timestep into stages
-$t_n^k = t_n + c_k \Delta t, \, k = (0, 1, .., N_s-1)$, where $N_s$ is
-the number of stages. The third order Runge Kutta method implemented here uses three stages.
-On one timestep the generic equation (ref{eq:genericpsi})
-is then integrated from stage $k$ to $k+1$ according to
-
-!bt
-\begin{equation}
- \psi^{k+1} = \psi^k + a_k \mathcal{N}^k + b_k \mathcal{N}^{k-1} + \frac{a_k+b_k}{2}\mathcal{L}(\psi^{k+1}+\psi^{k}),
-\end{equation}
-!et
-
-which should be rearranged with the unknowns on the left hand side and the
-knowns on the right hand side
-
-!bt
-\begin{equation}
- \big(1-\frac{a_k+b_k}{2}\mathcal{L}\big)\psi^{k+1} = \big(1 + \frac{a_k+b_k}{2}\mathcal{L}\big)\psi^{k} + a_k \mathcal{N}^k + b_k \mathcal{N}^{k-1}. label{eq:rk3stages}
-\end{equation}
-!et
-
-For the three-stage third order Runge Kutta method the constants are given as
-
-% if FORMAT in ("ipynb",):
-
-
-
-
-
-
-
-
-$a_n/\Delta t$ | $b_n/\Delta t$ | $c_n / \Delta t$ |
-
-
- 8/15 | 0 | 0 |
- 5/12 | −17/60 | 8/15 |
- 3/4 | −5/12 | 2/3 |
-
-
-
-% else:
-
-|------------------------------------------------------------|
-| $a_n/\Delta t$ | $b_n/\Delta t$ | $c_n / \Delta t$ |
-|---------c----------|---------c---------|-------c-----------|
-| 8/15 | 0 | 0 |
-| 5/12 | −17/60 | 8/15 |
-| 3/4 | −5/12 | 2/3 |
-|------------------------------------------------------------|
-
-% endif
-
-
-For the spectral Galerkin method used by `shenfun` the governing equation
-is first put in a weak variational form. This will change the appearence of
-Eq. (ref{eq:rk3stages}) slightly. If $\phi$ is a test function, $\psi^{k+1}$
-the trial function, and $\psi^{k}$ a known function, then the variational form
-of (ref{eq:rk3stages}) is obtained by multiplying (ref{eq:rk3stages}) by $\phi$ and
-integrating (with weights) over the domain
-
-!bt
-\begin{equation}
- \Big < (1-\frac{a_k+b_k}{2}\mathcal{L})\psi^{k+1}, \phi \Big > _w = \Big < (1 + \frac{a_k+b_k}{2}\mathcal{L})\psi^{k}, \phi\Big > _w + \Big < a_k \mathcal{N}^k + b_k \mathcal{N}^{k-1}, \phi \Big > _w. label{eq:rk3stagesvar}
-\end{equation}
-!et
+The timesteppers are provided with $\psi, \mathcal{L}$ and $\mathcal{N}$, and possibly some tailored
+linear algebra solvers, and solvers are then further assembled under the hood.
-Equation (ref{eq:rk3stagesvar}) is the variational form implemented by `shenfun` for the
-time dependent equations.
+All the timesteppers split one time step into one or several stages.
+The classes $cls{('IMEXRK222')}, $cls{('IMEXRK3')} and $cls{('IMEXRK443')}
+have 2, 3 and 4 steps, respectively, and the cost is proportional.
===== Implementation =====
@@ -368,12 +302,12 @@ but the former is known to be faster due to the existence of fast transforms.
!bc pycod
from shenfun import *
-N, M = 100, 256
+N, M = 64, 128
family = 'Chebyshev'
VB = FunctionSpace(N, family, bc=(0, 0, 0, 0))
VD = FunctionSpace(N, family, bc=(0, 0))
VW = FunctionSpace(N, family)
-VT = FunctionSpace(N, family, bc=(0, 1))
+VT = FunctionSpace(N, family, bc=(1, 0))
VF = FunctionSpace(M, 'F', dtype='d')
!ec
@@ -386,9 +320,11 @@ W_WF = TensorProductSpace(comm, (VW, VF)) # No bc
W_TF = TensorProductSpace(comm, (VT, VF)) # Temperature
BD = VectorSpace([W_BF, W_DF]) # Velocity vector
DD = VectorSpace([W_DF, W_DF]) # Convection vector
+W_DFp = W_DF.get_dealiased(padding_factor=1.5)
+BDp = BD.get_dealiased(padding_factor=1.5)
!ec
-Here the last two lines create mixed tensor product spaces by the
+Here the `VectorSpae` create mixed tensor product spaces by the
Cartesian products `BD = W_BF` $\times$ `W_DF` and `DD = W_DF` $\times$ `W_DF`.
These mixed space will be used to hold the velocity and convection vectors,
but we will not solve the equations in a coupled manner and continue in the
@@ -398,162 +334,132 @@ We also need containers for the computed solutions. These are created as
!bc pycod
u_ = Function(BD) # Velocity vector, two components
-u_1 = Function(BD) # Velocity vector, previous step
T_ = Function(W_TF) # Temperature
-T_1 = Function(W_TF) # Temperature, previous step
H_ = Function(DD) # Convection vector
-H_1 = Function(DD) # Convection vector previous stage
-
-# Need a container for the computed right hand side vector
-rhs_u = Function(DD).v
-rhs_T = Function(DD).v
+uT_ = Function(BD) # u times T
!ec
-In the final solver we will also use bases for dealiasing the nonlinear term,
-but we do not add that level of complexity here.
-
=== Wall-normal velocity equation ===
-We implement Eq. (ref{eq:rb:u2}) using the three-stage Runge Kutta equation (ref{eq:rk3stagesvar}).
+We implement Eq. (ref{eq:rb:u2}) using a generic time stepper.
To this end we first need to declare some test- and trial functions, as well as
-some model constants
+some model constants and the length of the time step. We store the
+PDE time stepper in a dictionary called `pdes` just for convenience:
!bc pycod
-u = TrialFunction(W_BF)
-v = TestFunction(W_BF)
-a = (8./15., 5./12., 3./4.)
-b = (0.0, -17./60., -5./12.)
-c = (0., 8./15., 2./3., 1)
# Specify viscosity and time step size using dimensionless Ra and Pr
-Ra = 10000
+Ra = 1000000
Pr = 0.7
nu = np.sqrt(Pr/Ra)
kappa = 1./np.sqrt(Pr*Ra)
-dt = 0.1
+dt = 0.025
-# Get one solver for each stage of the RK3
-solver = []
-for rk in range(3):
- mats = inner(div(grad(u)) - ((a[rk]+b[rk])*nu*dt/2.)*div(grad(div(grad(u)))), v)
- solver.append(chebyshev.la.Biharmonic(mats))
-!ec
+# Choose timestepper and create instance of class
-Notice the one-to-one resemblance with the left hand side of (ref{eq:rk3stagesvar}), where $\psi^{k+1}$
-now has been replaced by $\nabla^2 u$ (or `div(grad(u))`) from Eq. (ref{eq:rb:u2}).
-For each stage we assemble a list of tensor product matrices `mats`, and in `chebyshev.la`
-there is available a very fast direct solver for exactly this type of (biharmonic)
-matrices. The solver is created with `chebyshev.la.Biharmonic(mats)`, and here
-the necessary LU-decomposition is carried out for later use and reuse on each time step.
+PDE = IMEXRK3 # IMEX222, IMEXRK443
-The right hand side depends on the solution on the previous stage, and the
-convection on two previous stages. The linear part (first term on right hand side of (ref{eq:rk3stages}))
-can be assembled as
+v = TestFunction(W_BF) # The space we're solving for u in
+
+pdes = {
+ 'u': PDE(v, # test function
+ div(grad(u_[0])), # u
+ lambda f: nu*div(grad(f)), # linear operator on u
+ [Dx(Dx(H_[1], 0, 1), 1, 1)-Dx(H_[0], 1, 2), Dx(T_, 1, 2)],
+ dt=dt,
+ solver=chebyshev.la.Biharmonic if family == 'Chebyshev' else la.SolverGeneric1ND,
+ latex=r"\frac{\partial \nabla^2 u}{\partial t} = \nu \nabla^4 u + \frac{\partial^2 N_y}{\partial x \partial y} - \frac{\partial^2 N_x}{\partial y^2}")
+}
+pdes['u'].assemble()
-!bc pycod-t
-inner(div(grad(u_[0])) + ((a[rk]+b[rk])*nu*dt/2.)*div(grad(div(grad(u_[0])))), v)
!ec
-The remaining parts $\frac{\partial^2 H_y}{\partial x \partial y} - \frac{\partial^2 H_x}{\partial y\partial y} + \frac{\partial^2 T}{\partial y^2}$
-end up in the nonlinear $\mathcal{N}$. The nonlinear convection term $\bm{H}$ can be computed in many different ways.
+Notice the one-to-one resemblance with (ref{eq:rb:u2}).
+
+The right hand side depends on the convection vector $\bm{H}$, which can be computed in many different ways.
Here we will make use of
the identity $(\bm{u} \cdot \nabla) \bm{u} = -\bm{u} \times (\nabla \times \bm{u}) + 0.5 \nabla\bm{u} \cdot \bm{u}$,
where $0.5 \nabla \bm{u} \cdot \bm{u}$ can be added to the eliminated pressure and as such
be neglected. Compute $\bm{H} = -\bm{u} \times (\nabla \times \bm{u})$ by first evaluating
the velocity and the curl in real space. The curl is obtained by projection of $\nabla \times \bm{u}$
to the no-boundary-condition space `W_TF`, followed by a backward transform to real space.
-The velocity is simply transformed backwards.
-
-!bnotice
-If dealiasing is required, it should be used here to create padded backwards transforms of the curl and the velocity,
-before computing the nonlinear term in real space. The nonlinear product should then be forward transformed with
-truncation. To get a space for dealiasing, simply use, e.g., `W_BF.get_dealiased()`.
-!enotice
+The velocity is simply transformed backwards with padding.
!bc pycod
# Get a mask for setting Nyquist frequency to zero
mask = W_DF.get_mask_nyquist()
+Curl = Project(curl(u_), W_WF) # Instance used to compute curl
def compute_convection(u, H):
- curl = project(Dx(u[1], 0, 1) - Dx(u[0], 1, 1), W_TF).backward()
- ub = u.backward()
- H[0] = W_DF.forward(-curl*ub[1])
- H[1] = W_DF.forward(curl*ub[0])
+ up = u.backward(padding_factor=1.5).v
+ curl = Curl().backward(padding_factor=1.5)
+ H[0] = W_DFp.forward(-curl*up[1])
+ H[1] = W_DFp.forward(curl*up[0])
H.mask_nyquist(mask)
return H
!ec
Note that the convection has a homogeneous Dirichlet boundary condition in the
-non-periodic direction. With convection computed we can assemble $\mathcal{N}$
-and all of the right hand side, using the function `compute_rhs_u`
+non-periodic direction.
+
+=== Streamwise velocity ===
+
+The streamwise velocity is computed using Eq. (ref{eq:div3}) and (ref{eq:vx}).
+The first part is done fastest by projecting $f=\frac{\partial u}{\partial x}$
+to the same Dirichlet space `W_DF` used by $v$. This is most efficiently
+done by creating a class to do it
!bc pycod
+f = dudx = Project(Dx(u_[0], 0, 1), W_DF)
+!ec
-def compute_rhs_u(u, T, H, rhs, rk):
- v = TestFunction(W_BF)
- H = compute_convection(u, H)
- rhs[1] = 0
- rhs[1] += inner(v, div(grad(u[0])) + ((a[rk]+b[rk])*nu*dt/2.)*div(grad(div(grad(u[0])))))
- w0 = inner(v, Dx(Dx(H[1], 0, 1), 1, 1) - Dx(H[0], 1, 2))
- w1 = inner(v, Dx(T, 1, 2))
- rhs[1] += a[rk]*dt*(w0+w1)
- rhs[1] += b[rk]*dt*rhs[0]
- rhs[0] = w0+w1
- rhs.mask_nyquist(mask)
- return rhs
+Since $f$ now is in the same space as the streamwise velocity, Eq. (ref{eq:div3})
+simplifies to
+!bt
+\begin{align}
+ \imath l \left(\phi_k^D, \phi_m^D \right)_w \hat{v}_{kl}
+ &= -\left( \phi_k^D, \phi_m^D \right)_w \hat{f}_{kl}, label{eq:fdiv} \\
+ \hat{v}_{kl} &= \frac{\imath \hat{f}_{kl}}{ l}.
+\end{align}
+!et
+
+We thus compute $\hat{v}_{kl}$ for all $k$ and $l>0$ as
+
+!bc pycod
+K = W_BF.local_wavenumbers(scaled=True)
+K[1][0, 0] = 1 # to avoid division by zero. This component is computed later anyway.
+u_[1] = 1j*dudx()/K[1]
!ec
-Note that we will only use `rhs` as a container, so it does not actually matter
-which space it has here. We're using `.v` to only access the Numpy array view of the Function.
-Also note that `rhs[1]` contains the right hand side computed at stage `k`,
-whereas `rhs[0]` is used to remember the old value of the nonlinear part.
-=== Streamwise velocity ===
+which leaves only $\hat{v}_{k0}$. For this we use (ref{eq:vx}) and get
-The streamwise velocity is computed using Eq. (ref{eq:div3}) and (ref{eq:vx}). For efficiency we
-can here preassemble both matrices seen in (ref{eq:div3}) and reuse them every
-time the streamwise velocity is being computed. We will also need the
-wavenumber $\bm{l}$, here retrived using `W_BF.local_wavenumbers(scaled=True)`.
-For (ref{eq:vx}) we preassemble the required Helmholtz solvers, one for
-each RK stage.
+!bc pycod
+v00 = Function(VD)
+v0 = TestFunction(VD)
+h1 = Function(VD) # convection equal to H_[1, :, 0]
+pdes1d = {
+ 'v0': PDE(v0,
+ v00,
+ lambda f: nu*div(grad(f)),
+ -Expr(h1),
+ dt=dt,
+ solver=chebyshev.la.Helmholtz if family == 'Chebyshev' else la.Solver,
+ latex=r"\frac{\partial v}{\partial t} = \nu \frac{\partial^2 v}{\partial x^2} - N_y "),
+}
+pdes1d['v0'].assemble()
+!ec
+
+A function that computes `v` for an integration stage `rk` is
!bc pycod
-# Assemble matrices and solvers for all stages
-B_DD = inner(TestFunction(W_DF), TrialFunction(W_DF))
-C_DB = inner(TestFunction(W_DF), Dx(TrialFunction(W_BF), 0, 1))
-VD0 = FunctionSpace(N, family, bc=(0, 0))
-v0 = TestFunction(VD0)
-u0 = TrialFunction(VD0)
-solver0 = []
-for rk in range(3):
- mats0 = inner(v0, 2./(nu*(a[rk]+b[rk])*dt)*u0 - div(grad(u0)))
- solver0.append(chebyshev.la.Helmholtz(mats0))
-
-# Allocate work arrays and variables
-u00 = Function(VD0)
-b0 = np.zeros((2,)+u00.shape)
-w00 = np.zeros_like(u00)
-dudx_hat = Function(W_DF)
-K = W_BF.local_wavenumbers(scaled=True)[1]
-
-def compute_v(u, rk):
- if comm.Get_rank() == 0:
- u00[:] = u_[1, :, 0].real
- dudx_hat = C_DB.matvec(u[0], dudx_hat)
- with np.errstate(divide='ignore'):
- dudx_hat = 1j * dudx_hat / K
- u[1] = B_DD.solve(dudx_hat, u=u[1])
-
- # Still have to compute for wavenumber = 0
- if comm.Get_rank() == 0:
- b0[1] = inner(v0, 2./(nu*(a[rk]+b[rj])*dt)*Expr(u00) + div(grad(u00)))
- w00 = inner(v0, H_[1, :, 0])
- b0[1] -= (2.*a/nu/(a[rk]+b[rk]))*w00
- b0[1] -= (2.*b/nu/(a[rk]+b[rk]))*b0[0]
- u00 = solver0[rk](b0[1], u00)
- u[1, :, 0] = u00
- b0[0] = w00
- return u
+def compute_v(rk):
+ v00[:] = u_[1, :, 0].real
+ h1[:] = H_[1, :, 0].real
+ u_[1] = 1j*dudx()/K[1]
+ pdes1d['v0'].compute_rhs(rk)
+ u_[1, :, 0] = pdes1d['v0'].solve_step(rk)
+
!ec
=== Temperature ===
@@ -610,116 +516,68 @@ We find $\hat{T}_{N-2, l}$ and $\hat{T}_{N-1, l}$ using orthogonality. Multiply
Using this approach it is easy to see that any inhomogeneous function $T_N(\pm 1, y, t)$
of $y$ and $t$ can be used for the boundary condition, and not just a constant.
-To implement a non-constant Dirichlet boundary condition, the `FunctionSpace` function
-can take any `sympy` function of `(y, t)`, for exampel by replacing the
-creation of `VT` by
-
-!bc pycod
-import sympy as sp
-y, t = sp.symbols('y,t')
-f = 0.9+0.1*sp.sin(2*(y))*sp.exp(-t)
-VT = FunctionSpace(N, family, bc=(0, f))
-!ec
-
-For merely a constant `f` or a `y`-dependency, no further action is required.
-However, a time-dependent approach requires the boundary values to be
-updated each time step. To this end there is the function
-`BoundaryValues.update_bcs_time`, used to update the boundary values to the new time.
-Here we will assume a time-independent boundary condition, but the
-final implementation will contain the time-dependent option.
-
-Due to the non-zero boundary conditions there are also a few additional
-things to be aware of. Assembling the coefficient matrices will also
-assemble the matrices for the two boundary test functions. That is,
-for the 1D mass matrix with $u=\sum_{k=0}^{N-1}\hat{T}_k \phi^D_k $ and $v=\phi^D_m$,
-we will have
+However, we will not get into this here.
+And luckily for us all this complexity with boundary conditions will be
+taken care of under the hood by shenfun.
-!bt
-\begin{align}
- \left(u, v \right)_w &= \left( \sum_{k=0}^{N-1} \hat{T}_k \phi^D_k(x), \phi^D_m \right)_w, \\
- &= \sum_{k=0}^{N-3} \left(\phi^D_k(x), \phi^D_m \right)_w \hat{T}_k + \sum_{k=N-2}^{N-1} \left( \phi^D_k(x), \phi^D_m \right)_w \hat{T}_k,
-\end{align}
-!et
-where the first term on the right hand side is the regular mass matrix for a
-homogeneous boundary condition, whereas the second term is due to the non-homogeneous.
-Since $\hat{T}_{N-2}$ and $\hat{T}_{N-1}$ are known, the second term contributes to
-the right hand side of a system of equations. All boundary matrices can be extracted
-from the lists of tensor product matrices returned by `inner`. For
-the temperature equation these boundary matrices are extracted using
-`extract_bc_matrices` below. The regular solver is placed in the
-`solverT` list, one for each stage of the RK3 solver.
+A time stepper for the temperature equation is implemented as
!bc pycod
+uT_ = Function(BD)
q = TestFunction(W_TF)
-p = TrialFunction(W_TF)
-solverT = []
-lhs_mat = []
-for rk in range(3):
- matsT = inner(q, 2./(kappa*(a[rk]+b[rk])*dt)*p - div(grad(p)))
- lhs_mat.append(extract_bc_matrices([matsT]))
- solverT.append(chebyshev.la.Helmholtz(matsT))
+pdes['T'] = PDE(q,
+ T_,
+ lambda f: kappa*div(grad(f)),
+ -div(uT_),
+ dt=dt,
+ solver=chebyshev.la.Helmholtz if family == 'Chebyshev' else la.SolverGeneric1ND,
+ latex=r"\frac{\partial T}{\partial t} = \kappa \nabla^2 T - \nabla \cdot \vec{u}T")
+pdes['T'].assemble()
!ec
-The boundary contribution to the right hand side is computed for each
-stage as
+The `uT_` term is computed with dealiasing as
!bc pycod
-w0 = Function(W_WF)
-w0 = lhs_mat[rk][0].matvec(T_, w0)
+def compute_uT(u_, T_, uT_):
+ up = u_.backward(padding_factor=1.5)
+ Tp = T_.backward(padding_factor=1.5)
+ uT_ = BDp.forward(up*Tp, uT_)
+ return uT_
!ec
-The complete right hand side of the temperature equations can be computed as
+Finally all that is left is to initialize the solution and
+integrate it forward in time.
!bc pycod
-def compute_rhs_T(u, T, rhs, rk):
- q = TestFunction(W_TF)
- rhs[1] = inner(q, 2./(kappa*(a[rk]+b[rk])*dt)*Expr(T)+div(grad(T)))
- rhs[1] -= lhs_mat[rk][0].matvec(T, w0)
- ub = u.backward()
- Tb = T.backward()
- uT_ = BD.forward(ub*Tb)
- w0[:] = 0
- w0 = inner(q, div(uT_), output_array=w0)
- rhs[1] -= (2.*a/kappa/(a[rk]+b[rk]))*w0
- rhs[1] -= (2.*b/kappa/(a[rk]+b[rk]))*rhs[0]
- rhs[0] = w0
- rhs.mask_nyquist(mask)
- return rhs
-!ec
-
-We now have all the pieces required to solve the Rayleigh Benard problem.
-It only remains to perform an initialization and then create a solver
-loop that integrates the solution forward in time.
-
-!bc pycod
-
+import matplotlib.pyplot as plt
# initialization
T_b = Array(W_TF)
X = W_TF.local_mesh(True)
-T_b[:] = 0.5*(1-X[0]) + 0.001*np.random.randn(*T_b.shape)*(1-X[0])*(1+X[0])
+#T_b[:] = 0.5*(1-X[0]) + 0.001*np.random.randn(*T_b.shape)*(1-X[0])*(1+X[0])
+T_b[:] = 0.5*(1-X[0]+0.25*np.sin(np.pi*X[0]))+0.001*np.random.randn(*T_b.shape)*(1-X[0])*(1+X[0])
T_ = T_b.forward(T_)
T_.mask_nyquist(mask)
-def solve(t=0, tstep=0, end_time=100):
- while t < end_time-1e-8:
- for rk in range(3):
- rhs_u = compute_rhs_u(u_, T_, H_, rhs_u, rk)
- u_[0] = solver[rk](rhs_u[1], u_[0])
- if comm.Get_rank() == 0:
- u_[0, :, 0] = 0
- u_ = compute_v(u_, rk)
- u_.mask_nyquist(mask)
- rhs_T = compute_rhs_T(u_, T_, rhs_T, rk)
- T_ = solverT[rk](rhs_T[1], T_)
- T_.mask_nyquist(mask)
-
- t += dt
- tstep += 1
+t = 0
+tstep = 0
+end_time = 15
+while t < end_time-1e-8:
+ for rk in range(PDE.steps()):
+ compute_convection(u_, H_)
+ compute_uT(u_, T_, uT_)
+ pdes['u'].compute_rhs(rk)
+ pdes['T'].compute_rhs(rk)
+ pdes['u'].solve_step(rk)
+ compute_v(rk)
+ pdes['T'].solve_step(rk)
+ t += dt
+ tstep += 1
+plt.contourf(X[1], X[0], T_.backward(), 100)
+plt.show()
!ec
A complete solver implemented in a solver class can be found in
-"RayleighBenardRk3.py":"https://github.com/spectralDNS/shenfun/blob/master/demo/RayleighBenardRK3.py",
-where some of the terms discussed in this demo have been optimized some more for speed.
+"RayleighBenard2D.py":"https://github.com/spectralDNS/shenfun/blob/master/demo/RayleighBenard2D.py".
Note that in the final solver it is also possible to use a $(y, t)$-dependent boundary condition
for the hot wall. And the solver can also be configured to store intermediate results to
an `HDF5` format that later can be visualized in, e.g., Paraview. The movie in the
diff --git a/docs/source/functions.ipynb b/docs/source/functions.ipynb
index 983efa38..19219abb 100644
--- a/docs/source/functions.ipynb
+++ b/docs/source/functions.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "id": "afd59e16",
+ "id": "99e3a936",
"metadata": {
"editable": true
},
@@ -21,7 +21,7 @@
},
{
"cell_type": "markdown",
- "id": "85a4311a",
+ "id": "96b89321",
"metadata": {
"editable": true
},
@@ -34,7 +34,7 @@
},
{
"cell_type": "markdown",
- "id": "c2fe823a",
+ "id": "70653815",
"metadata": {
"editable": true
},
@@ -46,7 +46,7 @@
},
{
"cell_type": "markdown",
- "id": "25dd5aba",
+ "id": "a5bf179c",
"metadata": {
"editable": true
},
@@ -67,15 +67,15 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "6b830a4a",
+ "id": "a7a1ca3d",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:35.190390Z",
- "iopub.status.busy": "2022-05-24T10:31:35.189725Z",
- "iopub.status.idle": "2022-05-24T10:31:36.214706Z",
- "shell.execute_reply": "2022-05-24T10:31:36.215201Z"
+ "iopub.execute_input": "2022-06-23T10:35:44.424118Z",
+ "iopub.status.busy": "2022-06-23T10:35:44.423497Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.468048Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.468384Z"
}
},
"outputs": [],
@@ -87,7 +87,7 @@
},
{
"cell_type": "markdown",
- "id": "39390ce4",
+ "id": "82811d65",
"metadata": {
"editable": true
},
@@ -99,15 +99,15 @@
{
"cell_type": "code",
"execution_count": 2,
- "id": "145fab57",
+ "id": "bb620d39",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.218656Z",
- "iopub.status.busy": "2022-05-24T10:31:36.218139Z",
- "iopub.status.idle": "2022-05-24T10:31:36.219840Z",
- "shell.execute_reply": "2022-05-24T10:31:36.220219Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.472102Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.471580Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.473353Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.473881Z"
}
},
"outputs": [],
@@ -117,7 +117,7 @@
},
{
"cell_type": "markdown",
- "id": "b7d0563c",
+ "id": "c79e140d",
"metadata": {
"editable": true
},
@@ -130,15 +130,15 @@
{
"cell_type": "code",
"execution_count": 3,
- "id": "49a60650",
+ "id": "ddd7c826",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.223787Z",
- "iopub.status.busy": "2022-05-24T10:31:36.223235Z",
- "iopub.status.idle": "2022-05-24T10:31:36.224886Z",
- "shell.execute_reply": "2022-05-24T10:31:36.225313Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.477608Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.477075Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.478739Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.479056Z"
}
},
"outputs": [],
@@ -148,7 +148,7 @@
},
{
"cell_type": "markdown",
- "id": "f6560266",
+ "id": "15f438a5",
"metadata": {
"editable": true
},
@@ -159,7 +159,7 @@
},
{
"cell_type": "markdown",
- "id": "cd1c23f7",
+ "id": "075cee7e",
"metadata": {
"editable": true
},
@@ -171,7 +171,7 @@
},
{
"cell_type": "markdown",
- "id": "0eee6f73",
+ "id": "322e152d",
"metadata": {
"editable": true
},
@@ -187,15 +187,15 @@
{
"cell_type": "code",
"execution_count": 4,
- "id": "3b31f1b6",
+ "id": "a0ea6d99",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.229381Z",
- "iopub.status.busy": "2022-05-24T10:31:36.228839Z",
- "iopub.status.idle": "2022-05-24T10:31:36.230650Z",
- "shell.execute_reply": "2022-05-24T10:31:36.231021Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.483145Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.482521Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.484243Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.484559Z"
}
},
"outputs": [],
@@ -206,7 +206,7 @@
},
{
"cell_type": "markdown",
- "id": "779a474f",
+ "id": "7b250c8e",
"metadata": {
"editable": true
},
@@ -219,15 +219,15 @@
{
"cell_type": "code",
"execution_count": 5,
- "id": "06f2e82a",
+ "id": "06647e12",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.236114Z",
- "iopub.status.busy": "2022-05-24T10:31:36.235658Z",
- "iopub.status.idle": "2022-05-24T10:31:36.244647Z",
- "shell.execute_reply": "2022-05-24T10:31:36.244954Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.490297Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.489534Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.498854Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.499166Z"
}
},
"outputs": [
@@ -249,7 +249,7 @@
},
{
"cell_type": "markdown",
- "id": "a3aff91f",
+ "id": "0f6cb2cd",
"metadata": {
"editable": true
},
@@ -264,7 +264,7 @@
},
{
"cell_type": "markdown",
- "id": "1eb0bec3",
+ "id": "47a1a703",
"metadata": {
"editable": true
},
@@ -276,7 +276,7 @@
},
{
"cell_type": "markdown",
- "id": "4d18bee5",
+ "id": "797aee93",
"metadata": {
"editable": true
},
@@ -291,7 +291,7 @@
},
{
"cell_type": "markdown",
- "id": "10afac3d",
+ "id": "ce27dadf",
"metadata": {
"editable": true
},
@@ -303,7 +303,7 @@
},
{
"cell_type": "markdown",
- "id": "555ee597",
+ "id": "83543998",
"metadata": {
"editable": true
},
@@ -314,7 +314,7 @@
},
{
"cell_type": "markdown",
- "id": "cab5ff7a",
+ "id": "f9fd4c6e",
"metadata": {
"editable": true
},
@@ -326,7 +326,7 @@
},
{
"cell_type": "markdown",
- "id": "808ed32d",
+ "id": "e5aab228",
"metadata": {
"editable": true
},
@@ -337,7 +337,7 @@
},
{
"cell_type": "markdown",
- "id": "d7fda289",
+ "id": "addcca47",
"metadata": {
"editable": true
},
@@ -349,7 +349,7 @@
},
{
"cell_type": "markdown",
- "id": "adadb27e",
+ "id": "bf752662",
"metadata": {
"editable": true
},
@@ -359,7 +359,7 @@
},
{
"cell_type": "markdown",
- "id": "8b21ff28",
+ "id": "0dbc6971",
"metadata": {
"editable": true
},
@@ -374,7 +374,7 @@
},
{
"cell_type": "markdown",
- "id": "29b69bfa",
+ "id": "15309a80",
"metadata": {
"editable": true
},
@@ -384,7 +384,7 @@
},
{
"cell_type": "markdown",
- "id": "bf370beb",
+ "id": "20c931fb",
"metadata": {
"editable": true
},
@@ -396,7 +396,7 @@
},
{
"cell_type": "markdown",
- "id": "a9a637b6",
+ "id": "7c780e8f",
"metadata": {
"editable": true
},
@@ -407,7 +407,7 @@
},
{
"cell_type": "markdown",
- "id": "1fa6c1cb",
+ "id": "5be6add4",
"metadata": {
"editable": true
},
@@ -419,7 +419,7 @@
},
{
"cell_type": "markdown",
- "id": "5e3d4f93",
+ "id": "7456d76f",
"metadata": {
"editable": true
},
@@ -431,7 +431,7 @@
},
{
"cell_type": "markdown",
- "id": "4bf3d872",
+ "id": "c70f1707",
"metadata": {
"editable": true
},
@@ -445,15 +445,15 @@
{
"cell_type": "code",
"execution_count": 6,
- "id": "78c73830",
+ "id": "32e82ba8",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.249403Z",
- "iopub.status.busy": "2022-05-24T10:31:36.248916Z",
- "iopub.status.idle": "2022-05-24T10:31:36.250724Z",
- "shell.execute_reply": "2022-05-24T10:31:36.251030Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.504737Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.504244Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.505694Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.506118Z"
}
},
"outputs": [],
@@ -463,7 +463,7 @@
},
{
"cell_type": "markdown",
- "id": "b731f179",
+ "id": "9b1f67cf",
"metadata": {
"editable": true
},
@@ -477,15 +477,15 @@
{
"cell_type": "code",
"execution_count": 7,
- "id": "c855b959",
+ "id": "939aee1c",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.278375Z",
- "iopub.status.busy": "2022-05-24T10:31:36.277871Z",
- "iopub.status.idle": "2022-05-24T10:31:36.279829Z",
- "shell.execute_reply": "2022-05-24T10:31:36.280137Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.517668Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.514706Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.537248Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.537770Z"
}
},
"outputs": [
@@ -504,7 +504,7 @@
},
{
"cell_type": "markdown",
- "id": "5c805e52",
+ "id": "d3e7da5a",
"metadata": {
"editable": true
},
@@ -519,15 +519,15 @@
{
"cell_type": "code",
"execution_count": 8,
- "id": "75f95c69",
+ "id": "495a46fa",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.283643Z",
- "iopub.status.busy": "2022-05-24T10:31:36.282968Z",
- "iopub.status.idle": "2022-05-24T10:31:36.284881Z",
- "shell.execute_reply": "2022-05-24T10:31:36.285195Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.541081Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.540523Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.542390Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.542701Z"
}
},
"outputs": [
@@ -546,7 +546,7 @@
},
{
"cell_type": "markdown",
- "id": "18406533",
+ "id": "b4f9a1c3",
"metadata": {
"editable": true
},
@@ -558,15 +558,15 @@
{
"cell_type": "code",
"execution_count": 9,
- "id": "4c5979c9",
+ "id": "3dcce54b",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.292274Z",
- "iopub.status.busy": "2022-05-24T10:31:36.291817Z",
- "iopub.status.idle": "2022-05-24T10:31:36.323157Z",
- "shell.execute_reply": "2022-05-24T10:31:36.323524Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.553844Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.548547Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.579248Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.579915Z"
}
},
"outputs": [
@@ -586,7 +586,7 @@
},
{
"cell_type": "markdown",
- "id": "90e80198",
+ "id": "14391a4a",
"metadata": {
"editable": true
},
@@ -600,15 +600,15 @@
{
"cell_type": "code",
"execution_count": 10,
- "id": "3c7a1dcd",
+ "id": "82dcbcf0",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.339169Z",
- "iopub.status.busy": "2022-05-24T10:31:36.329630Z",
- "iopub.status.idle": "2022-05-24T10:31:36.341343Z",
- "shell.execute_reply": "2022-05-24T10:31:36.341665Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.587694Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.585647Z",
+ "iopub.status.idle": "2022-06-23T10:35:45.598898Z",
+ "shell.execute_reply": "2022-06-23T10:35:45.598565Z"
}
},
"outputs": [
@@ -627,7 +627,7 @@
},
{
"cell_type": "markdown",
- "id": "ae21505a",
+ "id": "ce5de2b2",
"metadata": {
"editable": true
},
@@ -639,22 +639,22 @@
{
"cell_type": "code",
"execution_count": 11,
- "id": "fb4d043f",
+ "id": "64f6e669",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:36.345457Z",
- "iopub.status.busy": "2022-05-24T10:31:36.344951Z",
- "iopub.status.idle": "2022-05-24T10:31:37.140504Z",
- "shell.execute_reply": "2022-05-24T10:31:37.140889Z"
+ "iopub.execute_input": "2022-06-23T10:35:45.602883Z",
+ "iopub.status.busy": "2022-06-23T10:35:45.602429Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.320558Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.320943Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "[]"
+ "[]"
]
},
"execution_count": 11,
@@ -684,7 +684,7 @@
},
{
"cell_type": "markdown",
- "id": "b652293f",
+ "id": "52875e71",
"metadata": {
"editable": true
},
@@ -696,22 +696,22 @@
{
"cell_type": "code",
"execution_count": 12,
- "id": "ca1e32a7",
+ "id": "f8c41f92",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.148013Z",
- "iopub.status.busy": "2022-05-24T10:31:37.146292Z",
- "iopub.status.idle": "2022-05-24T10:31:37.235196Z",
- "shell.execute_reply": "2022-05-24T10:31:37.235601Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.332737Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.328087Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.424304Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.424619Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "[]"
+ "[]"
]
},
"execution_count": 12,
@@ -738,7 +738,7 @@
},
{
"cell_type": "markdown",
- "id": "b218052a",
+ "id": "8c6a22d2",
"metadata": {
"editable": true
},
@@ -750,22 +750,22 @@
{
"cell_type": "code",
"execution_count": 13,
- "id": "9002d463",
+ "id": "8bcb2eb3",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.326344Z",
- "iopub.status.busy": "2022-05-24T10:31:37.320415Z",
- "iopub.status.idle": "2022-05-24T10:31:37.409087Z",
- "shell.execute_reply": "2022-05-24T10:31:37.409414Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.527548Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.517808Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.611921Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.612258Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "[]"
+ "[]"
]
},
"execution_count": 13,
@@ -793,7 +793,7 @@
},
{
"cell_type": "markdown",
- "id": "dfe7d1ee",
+ "id": "c822c690",
"metadata": {
"editable": true
},
@@ -804,15 +804,15 @@
{
"cell_type": "code",
"execution_count": 14,
- "id": "b17ad72e",
+ "id": "9ae901a7",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.415316Z",
- "iopub.status.busy": "2022-05-24T10:31:37.414483Z",
- "iopub.status.idle": "2022-05-24T10:31:37.417316Z",
- "shell.execute_reply": "2022-05-24T10:31:37.417703Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.617412Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.616726Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.619312Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.620127Z"
}
},
"outputs": [
@@ -879,7 +879,7 @@
},
{
"cell_type": "markdown",
- "id": "9869836a",
+ "id": "f3227827",
"metadata": {
"editable": true
},
@@ -895,15 +895,15 @@
{
"cell_type": "code",
"execution_count": 15,
- "id": "7cd75596",
+ "id": "e0d8b2f4",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.421050Z",
- "iopub.status.busy": "2022-05-24T10:31:37.420472Z",
- "iopub.status.idle": "2022-05-24T10:31:37.422078Z",
- "shell.execute_reply": "2022-05-24T10:31:37.422554Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.623953Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.623429Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.624869Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.625356Z"
}
},
"outputs": [],
@@ -914,7 +914,7 @@
},
{
"cell_type": "markdown",
- "id": "8d0895dd",
+ "id": "d916d322",
"metadata": {
"editable": true
},
@@ -930,15 +930,15 @@
{
"cell_type": "code",
"execution_count": 16,
- "id": "feac0b6a",
+ "id": "f3f75df9",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.428036Z",
- "iopub.status.busy": "2022-05-24T10:31:37.427576Z",
- "iopub.status.idle": "2022-05-24T10:31:37.429340Z",
- "shell.execute_reply": "2022-05-24T10:31:37.429661Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.630659Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.628188Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.632229Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.632554Z"
}
},
"outputs": [],
@@ -948,7 +948,7 @@
},
{
"cell_type": "markdown",
- "id": "76879b78",
+ "id": "3340cfc6",
"metadata": {
"editable": true
},
@@ -962,15 +962,15 @@
{
"cell_type": "code",
"execution_count": 17,
- "id": "546ce4bd",
+ "id": "ea6ca467",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.433547Z",
- "iopub.status.busy": "2022-05-24T10:31:37.433016Z",
- "iopub.status.idle": "2022-05-24T10:31:37.434897Z",
- "shell.execute_reply": "2022-05-24T10:31:37.435214Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.636307Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.635680Z",
+ "iopub.status.idle": "2022-06-23T10:35:46.638672Z",
+ "shell.execute_reply": "2022-06-23T10:35:46.638998Z"
}
},
"outputs": [
@@ -989,7 +989,7 @@
},
{
"cell_type": "markdown",
- "id": "70a6382c",
+ "id": "2c8742c0",
"metadata": {
"editable": true
},
@@ -1011,15 +1011,15 @@
{
"cell_type": "code",
"execution_count": 18,
- "id": "42296e52",
+ "id": "17d0499d",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:37.468726Z",
- "iopub.status.busy": "2022-05-24T10:31:37.449212Z",
- "iopub.status.idle": "2022-05-24T10:31:38.179689Z",
- "shell.execute_reply": "2022-05-24T10:31:38.180169Z"
+ "iopub.execute_input": "2022-06-23T10:35:46.654569Z",
+ "iopub.status.busy": "2022-06-23T10:35:46.653554Z",
+ "iopub.status.idle": "2022-06-23T10:35:47.419318Z",
+ "shell.execute_reply": "2022-06-23T10:35:47.419635Z"
}
},
"outputs": [
@@ -1039,7 +1039,7 @@
},
{
"cell_type": "markdown",
- "id": "74762348",
+ "id": "4afedbec",
"metadata": {
"editable": true
},
@@ -1056,7 +1056,7 @@
},
{
"cell_type": "markdown",
- "id": "59a662e6",
+ "id": "e479ab2f",
"metadata": {
"editable": true
},
@@ -1071,15 +1071,15 @@
{
"cell_type": "code",
"execution_count": 19,
- "id": "1147cffb",
+ "id": "c15fd8f1",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:38.197362Z",
- "iopub.status.busy": "2022-05-24T10:31:38.196870Z",
- "iopub.status.idle": "2022-05-24T10:31:38.198650Z",
- "shell.execute_reply": "2022-05-24T10:31:38.198958Z"
+ "iopub.execute_input": "2022-06-23T10:35:47.439562Z",
+ "iopub.status.busy": "2022-06-23T10:35:47.438891Z",
+ "iopub.status.idle": "2022-06-23T10:35:47.440658Z",
+ "shell.execute_reply": "2022-06-23T10:35:47.441169Z"
}
},
"outputs": [],
@@ -1092,7 +1092,7 @@
},
{
"cell_type": "markdown",
- "id": "6af64566",
+ "id": "b7f47048",
"metadata": {
"editable": true
},
@@ -1103,7 +1103,7 @@
},
{
"cell_type": "markdown",
- "id": "364e64e6",
+ "id": "d5ba2576",
"metadata": {
"editable": true
},
@@ -1115,7 +1115,7 @@
},
{
"cell_type": "markdown",
- "id": "767d3362",
+ "id": "0e7bb037",
"metadata": {
"editable": true
},
@@ -1127,22 +1127,22 @@
{
"cell_type": "code",
"execution_count": 20,
- "id": "a630a13d",
+ "id": "32f3a2c5",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:38.207457Z",
- "iopub.status.busy": "2022-05-24T10:31:38.206456Z",
- "iopub.status.idle": "2022-05-24T10:31:38.382043Z",
- "shell.execute_reply": "2022-05-24T10:31:38.382357Z"
+ "iopub.execute_input": "2022-06-23T10:35:47.450716Z",
+ "iopub.status.busy": "2022-06-23T10:35:47.450204Z",
+ "iopub.status.idle": "2022-06-23T10:35:47.634539Z",
+ "shell.execute_reply": "2022-06-23T10:35:47.634943Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 20,
@@ -1171,7 +1171,7 @@
},
{
"cell_type": "markdown",
- "id": "81ed1992",
+ "id": "710db17f",
"metadata": {
"editable": true
},
@@ -1187,15 +1187,15 @@
{
"cell_type": "code",
"execution_count": 21,
- "id": "8582ce6c",
+ "id": "b4dd2ce7",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:38.387596Z",
- "iopub.status.busy": "2022-05-24T10:31:38.386339Z",
- "iopub.status.idle": "2022-05-24T10:31:38.741580Z",
- "shell.execute_reply": "2022-05-24T10:31:38.741910Z"
+ "iopub.execute_input": "2022-06-23T10:35:47.648566Z",
+ "iopub.status.busy": "2022-06-23T10:35:47.643912Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.080827Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.081179Z"
}
},
"outputs": [
@@ -1222,7 +1222,7 @@
},
{
"cell_type": "markdown",
- "id": "5d6fec18",
+ "id": "f4df7ac5",
"metadata": {
"editable": true
},
@@ -1233,22 +1233,22 @@
{
"cell_type": "code",
"execution_count": 22,
- "id": "b4994301",
+ "id": "2351fe5d",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:38.745718Z",
- "iopub.status.busy": "2022-05-24T10:31:38.745223Z",
- "iopub.status.idle": "2022-05-24T10:31:38.854026Z",
- "shell.execute_reply": "2022-05-24T10:31:38.854341Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.085491Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.084645Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.222866Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.223210Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 22,
@@ -1269,13 +1269,13 @@
}
],
"source": [
- "X = T.local_mesh(broadcast=True, uniform=True)\n",
- "plt.contourf(X[0], X[1], u.backward(kind={'chebyshev': 'uniform'}))"
+ "X = T.local_mesh(bcast=True, kind='uniform')\n",
+ "plt.contourf(X[0], X[1], u.backward(mesh='uniform'))"
]
},
{
"cell_type": "markdown",
- "id": "ce29a9b4",
+ "id": "31815755",
"metadata": {
"editable": true
},
@@ -1294,7 +1294,7 @@
},
{
"cell_type": "markdown",
- "id": "38e9bdb5",
+ "id": "8f006f8f",
"metadata": {
"editable": true
},
@@ -1306,7 +1306,7 @@
},
{
"cell_type": "markdown",
- "id": "0fe75147",
+ "id": "4f933a7c",
"metadata": {
"editable": true
},
@@ -1321,15 +1321,15 @@
{
"cell_type": "code",
"execution_count": 23,
- "id": "ac06a0e9",
+ "id": "03e8746a",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:38.884596Z",
- "iopub.status.busy": "2022-05-24T10:31:38.883904Z",
- "iopub.status.idle": "2022-05-24T10:31:39.174451Z",
- "shell.execute_reply": "2022-05-24T10:31:39.174823Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.256631Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.256073Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.534069Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.534356Z"
}
},
"outputs": [],
@@ -1343,7 +1343,7 @@
},
{
"cell_type": "markdown",
- "id": "903b09fa",
+ "id": "2df3472e",
"metadata": {
"editable": true
},
@@ -1357,15 +1357,15 @@
{
"cell_type": "code",
"execution_count": 24,
- "id": "aa21e79c",
+ "id": "d1a9419f",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:39.189843Z",
- "iopub.status.busy": "2022-05-24T10:31:39.184209Z",
- "iopub.status.idle": "2022-05-24T10:31:39.194030Z",
- "shell.execute_reply": "2022-05-24T10:31:39.194459Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.549009Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.547416Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.550777Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.551129Z"
}
},
"outputs": [],
@@ -1375,7 +1375,7 @@
},
{
"cell_type": "markdown",
- "id": "f333723b",
+ "id": "edd9b137",
"metadata": {
"editable": true
},
@@ -1386,22 +1386,22 @@
{
"cell_type": "code",
"execution_count": 25,
- "id": "4d975997",
+ "id": "b6030f50",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:39.198338Z",
- "iopub.status.busy": "2022-05-24T10:31:39.197809Z",
- "iopub.status.idle": "2022-05-24T10:31:39.413421Z",
- "shell.execute_reply": "2022-05-24T10:31:39.413729Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.554924Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.554471Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.776839Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.777194Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 25,
@@ -1428,7 +1428,7 @@
},
{
"cell_type": "markdown",
- "id": "138a5be7",
+ "id": "07e9efaf",
"metadata": {
"editable": true
},
@@ -1441,22 +1441,22 @@
{
"cell_type": "code",
"execution_count": 26,
- "id": "8f2ad65a",
+ "id": "00f452c6",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:39.424079Z",
- "iopub.status.busy": "2022-05-24T10:31:39.423492Z",
- "iopub.status.idle": "2022-05-24T10:31:39.582176Z",
- "shell.execute_reply": "2022-05-24T10:31:39.582502Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.782787Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.782200Z",
+ "iopub.status.idle": "2022-06-23T10:35:48.965678Z",
+ "shell.execute_reply": "2022-06-23T10:35:48.966164Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 26,
@@ -1483,7 +1483,7 @@
},
{
"cell_type": "markdown",
- "id": "c565c8bb",
+ "id": "922883bc",
"metadata": {
"editable": true
},
@@ -1499,22 +1499,22 @@
{
"cell_type": "code",
"execution_count": 27,
- "id": "edd40500",
+ "id": "136208c6",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:39.586672Z",
- "iopub.status.busy": "2022-05-24T10:31:39.586068Z",
- "iopub.status.idle": "2022-05-24T10:31:39.751873Z",
- "shell.execute_reply": "2022-05-24T10:31:39.752248Z"
+ "iopub.execute_input": "2022-06-23T10:35:48.976752Z",
+ "iopub.status.busy": "2022-06-23T10:35:48.972687Z",
+ "iopub.status.idle": "2022-06-23T10:35:49.144827Z",
+ "shell.execute_reply": "2022-06-23T10:35:49.145207Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- ""
+ ""
]
},
"execution_count": 27,
@@ -1542,7 +1542,7 @@
},
{
"cell_type": "markdown",
- "id": "c01f806d",
+ "id": "3c4694fd",
"metadata": {
"editable": true
},
@@ -1557,15 +1557,15 @@
{
"cell_type": "code",
"execution_count": 28,
- "id": "79d5bd73",
+ "id": "37b3f065",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-05-24T10:31:39.883061Z",
- "iopub.status.busy": "2022-05-24T10:31:39.827166Z",
- "iopub.status.idle": "2022-05-24T10:31:39.931128Z",
- "shell.execute_reply": "2022-05-24T10:31:39.931494Z"
+ "iopub.execute_input": "2022-06-23T10:35:49.221142Z",
+ "iopub.status.busy": "2022-06-23T10:35:49.160282Z",
+ "iopub.status.idle": "2022-06-23T10:35:49.317550Z",
+ "shell.execute_reply": "2022-06-23T10:35:49.317870Z"
}
},
"outputs": [
@@ -1587,7 +1587,7 @@
},
{
"cell_type": "markdown",
- "id": "e4e5a1b2",
+ "id": "8f7e2f63",
"metadata": {
"editable": true
},
diff --git a/docs/source/mixingbases.ipynb b/docs/source/mixingbases.ipynb
index 5369601f..0f228bb9 100644
--- a/docs/source/mixingbases.ipynb
+++ b/docs/source/mixingbases.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "markdown",
- "id": "015b8ebc",
+ "id": "7a32d1f2",
"metadata": {
"editable": true
},
@@ -23,7 +23,7 @@
},
{
"cell_type": "markdown",
- "id": "a5d1ae4a",
+ "id": "fe704baf",
"metadata": {
"editable": true
},
@@ -35,7 +35,7 @@
},
{
"cell_type": "markdown",
- "id": "0fac23ea",
+ "id": "8e00344e",
"metadata": {
"editable": true
},
@@ -53,7 +53,7 @@
},
{
"cell_type": "markdown",
- "id": "cfcd86e2",
+ "id": "a640888f",
"metadata": {
"editable": true
},
@@ -63,7 +63,7 @@
},
{
"cell_type": "markdown",
- "id": "fa709158",
+ "id": "6ff01d67",
"metadata": {
"editable": true
},
@@ -81,7 +81,7 @@
},
{
"cell_type": "markdown",
- "id": "c69118b6",
+ "id": "ef85c04e",
"metadata": {
"editable": true
},
@@ -91,7 +91,7 @@
},
{
"cell_type": "markdown",
- "id": "636dc537",
+ "id": "9b1e3fc7",
"metadata": {
"editable": true
},
@@ -109,7 +109,7 @@
},
{
"cell_type": "markdown",
- "id": "f5a921b0",
+ "id": "22b6ae99",
"metadata": {
"editable": true
},
@@ -122,7 +122,7 @@
},
{
"cell_type": "markdown",
- "id": "067d76af",
+ "id": "a71f07a9",
"metadata": {
"editable": true
},
@@ -138,7 +138,7 @@
},
{
"cell_type": "markdown",
- "id": "238f72ec",
+ "id": "361016a1",
"metadata": {
"editable": true
},
@@ -154,7 +154,7 @@
},
{
"cell_type": "markdown",
- "id": "c8e8a35c",
+ "id": "3830db68",
"metadata": {
"editable": true
},
@@ -170,7 +170,7 @@
},
{
"cell_type": "markdown",
- "id": "954d083b",
+ "id": "55f69923",
"metadata": {
"editable": true
},
@@ -181,7 +181,7 @@
},
{
"cell_type": "markdown",
- "id": "1491ccf2",
+ "id": "cad661f9",
"metadata": {
"editable": true
},
@@ -194,15 +194,15 @@
{
"cell_type": "code",
"execution_count": 1,
- "id": "22b23230",
+ "id": "5eec2ff4",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:18.556171Z",
- "iopub.status.busy": "2022-04-22T11:54:18.555532Z",
- "iopub.status.idle": "2022-04-22T11:54:19.598112Z",
- "shell.execute_reply": "2022-04-22T11:54:19.598425Z"
+ "iopub.execute_input": "2022-06-23T10:36:30.529995Z",
+ "iopub.status.busy": "2022-06-23T10:36:30.529207Z",
+ "iopub.status.idle": "2022-06-23T10:36:31.569850Z",
+ "shell.execute_reply": "2022-06-23T10:36:31.570217Z"
}
},
"outputs": [],
@@ -216,7 +216,7 @@
},
{
"cell_type": "markdown",
- "id": "dc0b7f04",
+ "id": "3dd177b5",
"metadata": {
"editable": true
},
@@ -232,15 +232,15 @@
{
"cell_type": "code",
"execution_count": 2,
- "id": "fb2b1d80",
+ "id": "1915a7ec",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:19.603485Z",
- "iopub.status.busy": "2022-04-22T11:54:19.602841Z",
- "iopub.status.idle": "2022-04-22T11:54:19.604503Z",
- "shell.execute_reply": "2022-04-22T11:54:19.604823Z"
+ "iopub.execute_input": "2022-06-23T10:36:31.575386Z",
+ "iopub.status.busy": "2022-06-23T10:36:31.574788Z",
+ "iopub.status.idle": "2022-06-23T10:36:31.576279Z",
+ "shell.execute_reply": "2022-06-23T10:36:31.576594Z"
}
},
"outputs": [],
@@ -253,7 +253,7 @@
},
{
"cell_type": "markdown",
- "id": "e4a3ce4a",
+ "id": "aa40103f",
"metadata": {
"editable": true
},
@@ -264,7 +264,7 @@
},
{
"cell_type": "markdown",
- "id": "a108023b",
+ "id": "41539778",
"metadata": {
"editable": true
},
@@ -282,7 +282,7 @@
},
{
"cell_type": "markdown",
- "id": "89a794be",
+ "id": "507165a0",
"metadata": {
"editable": true
},
@@ -293,15 +293,15 @@
{
"cell_type": "code",
"execution_count": 3,
- "id": "871293ed",
+ "id": "47c20313",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:19.612167Z",
- "iopub.status.busy": "2022-04-22T11:54:19.611707Z",
- "iopub.status.idle": "2022-04-22T11:54:19.613465Z",
- "shell.execute_reply": "2022-04-22T11:54:19.613904Z"
+ "iopub.execute_input": "2022-06-23T10:36:31.583237Z",
+ "iopub.status.busy": "2022-06-23T10:36:31.582746Z",
+ "iopub.status.idle": "2022-06-23T10:36:31.584133Z",
+ "shell.execute_reply": "2022-06-23T10:36:31.584450Z"
}
},
"outputs": [],
@@ -313,7 +313,7 @@
},
{
"cell_type": "markdown",
- "id": "f5c467c3",
+ "id": "fddda7cb",
"metadata": {
"editable": true
},
@@ -324,15 +324,15 @@
{
"cell_type": "code",
"execution_count": 4,
- "id": "02bc54f6",
+ "id": "254bd130",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:19.636094Z",
- "iopub.status.busy": "2022-04-22T11:54:19.635185Z",
- "iopub.status.idle": "2022-04-22T11:54:20.215920Z",
- "shell.execute_reply": "2022-04-22T11:54:20.216261Z"
+ "iopub.execute_input": "2022-06-23T10:36:31.604862Z",
+ "iopub.status.busy": "2022-06-23T10:36:31.604384Z",
+ "iopub.status.idle": "2022-06-23T10:36:32.169622Z",
+ "shell.execute_reply": "2022-06-23T10:36:32.170019Z"
}
},
"outputs": [],
@@ -343,7 +343,7 @@
},
{
"cell_type": "markdown",
- "id": "b366e500",
+ "id": "16950fdd",
"metadata": {
"editable": true
},
@@ -354,15 +354,15 @@
{
"cell_type": "code",
"execution_count": 5,
- "id": "f389c6a3",
+ "id": "56e30361",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:20.222164Z",
- "iopub.status.busy": "2022-04-22T11:54:20.221566Z",
- "iopub.status.idle": "2022-04-22T11:54:20.232279Z",
- "shell.execute_reply": "2022-04-22T11:54:20.232596Z"
+ "iopub.execute_input": "2022-06-23T10:36:32.175261Z",
+ "iopub.status.busy": "2022-06-23T10:36:32.174617Z",
+ "iopub.status.idle": "2022-06-23T10:36:32.186783Z",
+ "shell.execute_reply": "2022-06-23T10:36:32.187105Z"
}
},
"outputs": [],
@@ -377,7 +377,7 @@
},
{
"cell_type": "markdown",
- "id": "614bc841",
+ "id": "7e57e031",
"metadata": {
"editable": true
},
@@ -388,15 +388,15 @@
{
"cell_type": "code",
"execution_count": 6,
- "id": "eb7d6b10",
+ "id": "3636ab69",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:20.271526Z",
- "iopub.status.busy": "2022-04-22T11:54:20.270952Z",
- "iopub.status.idle": "2022-04-22T11:54:20.273382Z",
- "shell.execute_reply": "2022-04-22T11:54:20.273688Z"
+ "iopub.execute_input": "2022-06-23T10:36:32.223730Z",
+ "iopub.status.busy": "2022-06-23T10:36:32.222627Z",
+ "iopub.status.idle": "2022-06-23T10:36:32.225627Z",
+ "shell.execute_reply": "2022-06-23T10:36:32.225940Z"
}
},
"outputs": [
@@ -404,7 +404,7 @@
"name": "stdout",
"output_type": "stream",
"text": [
- "Error = 0.4189038168769313\n"
+ "Error = 0.41890381687693135\n"
]
}
],
@@ -416,7 +416,7 @@
},
{
"cell_type": "markdown",
- "id": "1421c6a1",
+ "id": "c3d3dd7a",
"metadata": {
"editable": true
},
@@ -432,15 +432,15 @@
{
"cell_type": "code",
"execution_count": 7,
- "id": "221043ee",
+ "id": "ec3b0f6e",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:20.280404Z",
- "iopub.status.busy": "2022-04-22T11:54:20.279948Z",
- "iopub.status.idle": "2022-04-22T11:54:20.282585Z",
- "shell.execute_reply": "2022-04-22T11:54:20.282906Z"
+ "iopub.execute_input": "2022-06-23T10:36:32.232948Z",
+ "iopub.status.busy": "2022-06-23T10:36:32.232482Z",
+ "iopub.status.idle": "2022-06-23T10:36:32.234022Z",
+ "shell.execute_reply": "2022-06-23T10:36:32.234333Z"
}
},
"outputs": [],
@@ -499,7 +499,7 @@
},
{
"cell_type": "markdown",
- "id": "7a123076",
+ "id": "cd34256f",
"metadata": {
"editable": true
},
@@ -512,15 +512,15 @@
{
"cell_type": "code",
"execution_count": 8,
- "id": "ec1a8ef3",
+ "id": "808ab78a",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:20.405967Z",
- "iopub.status.busy": "2022-04-22T11:54:20.364603Z",
- "iopub.status.idle": "2022-04-22T11:54:20.738588Z",
- "shell.execute_reply": "2022-04-22T11:54:20.738905Z"
+ "iopub.execute_input": "2022-06-23T10:36:32.364972Z",
+ "iopub.status.busy": "2022-06-23T10:36:32.322469Z",
+ "iopub.status.idle": "2022-06-23T10:36:32.657236Z",
+ "shell.execute_reply": "2022-06-23T10:36:32.657546Z"
}
},
"outputs": [
@@ -539,7 +539,7 @@
},
{
"cell_type": "markdown",
- "id": "bd4ae757",
+ "id": "f6f90737",
"metadata": {
"editable": true
},
@@ -551,15 +551,15 @@
{
"cell_type": "code",
"execution_count": 9,
- "id": "44cb43f8",
+ "id": "ad178f30",
"metadata": {
"collapsed": false,
"editable": true,
"execution": {
- "iopub.execute_input": "2022-04-22T11:54:20.754124Z",
- "iopub.status.busy": "2022-04-22T11:54:20.753546Z",
- "iopub.status.idle": "2022-04-22T11:54:21.726772Z",
- "shell.execute_reply": "2022-04-22T11:54:21.726417Z"
+ "iopub.execute_input": "2022-06-23T10:36:32.755554Z",
+ "iopub.status.busy": "2022-06-23T10:36:32.714860Z",
+ "iopub.status.idle": "2022-06-23T10:36:33.608028Z",
+ "shell.execute_reply": "2022-06-23T10:36:33.607638Z"
}
},
"outputs": [
@@ -1503,9 +1503,9 @@
}
},
"text/html": [
- "