Boundary condition defined in Fourier space

31 views
Skip to first unread message

Sadokat

unread,
Jan 30, 2026, 9:51:50 AMJan 30
to Dedalus Users
Dear All,

I am working with Dedalus v3, my vector field u is defined using a mixed basis RealFourier in x and y, and Chebyshev in z. Mathematically I derived the Robin type boundary condition in Forier space, something like: 

∂z û (z) + k_⊥ û (z) = 0, on z=Lz.

where k_⊥ = sqrt(kx² + ky²). 

Are there any approaches in Dedalus for operators related to fractional Laplacians (−Δ_⊥)^{−1/2}? 

 I would appreciate some guidance on how to properly formulate this kind of  boundary condition. 

with best regards,

Sadokat


Message has been deleted

Sadokat

unread,
Feb 6, 2026, 9:03:27 AMFeb 6
to Dedalus Users

Dear All,

I believe I’ve resolved my issue, but I’d really appreciate confirmation that this is a correct approach in Dedalus v3.

My goal is to impose boundary condition by constructing a vector field directly in coefficient space.   I do:

u_z = dist.VectorField(coords, basis=(xbasis,ybasis))
u_z['c'] = -k_perp * u['c'](z=Lz) ### this is just a short explanation of the idea

and then use the physical domain to express the boundary condition:

problem.add_equation("dz(u)(z=Lz) = u_z") # Is this correct?

I followed the implementation of the real Fourier transform in transform.py and defined:

kx = xbasis.wavenumbers[:, None, None]
ky = ybasis.wavenumbers[None, :, None
kperp = np.sqrt((2*np.pi*kx/Lx)**2 + (2*np.pi*ky/Ly)**2)

Is this the correct way to construct    k_⊥?

I would really appreciate it if someone could confirm whether this is the recommended approach.

And thank you to the Dedalus developers for such an amazing framework!

Best regards,

Sadokat

Daniel Lecoanet

unread,
Feb 8, 2026, 7:11:56 PMFeb 8
to dedalu...@googlegroups.com
Hi Sadokat,

I’m not sure if that is doing what you desire. The issue is that u_z is not updated. I think what you’re trying would work if you include the u_z[‘c’] assignment in the timestepping loop (make sure you use a multistep timestepper). There will also be a time lag in the BC as u_z is evaluated on the previous timestep as dz(u). Unfortunately I do not believe we currently have a way of evaluating k_perp implicitly (on the LHS of the equation).

Daniel

On Feb 6, 2026, at 08:03, Sadokat <smaliko...@gmail.com> wrote:


--
You received this message because you are subscribed to the Google Groups "Dedalus Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dedalus-user...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/dedalus-users/f22d1c85-ec48-4cdb-943e-ef6a1409e741n%40googlegroups.com.

Sadokat

unread,
Feb 9, 2026, 4:07:52 AMFeb 9
to Dedalus Users

Dear Daniel,

Thank you very much for your response.

I am updating u_z = funct(u) inside the time-stepping loop, and I verified that its value is being updated correctly. Based on this, I moved the term involving k_perp to the RHS:

problem.add_equation("dz(u)(z=Lz) = u_z")

With this approach, it appears to be working as intended.

Thank you once again for your help — I really appreciate it.

Best regards,
Sadokat

Reply all
Reply to author
Forward
0 new messages