Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Alfven wave absorption boundary conditions #743

Open
fyli16 opened this issue Sep 12, 2024 · 19 comments
Open

Alfven wave absorption boundary conditions #743

fyli16 opened this issue Sep 12, 2024 · 19 comments
Labels
feature-request something that could be added to the code

Comments

@fyli16
Copy link
Contributor

fyli16 commented Sep 12, 2024

Looks like the old issue #565 was closed, not sure if my latest update to that issue was drawing any attention, so I am trying to reopen the case with a new issue here. Basically I'd like to achieve absorption boundary conditions for low-frequency Alfven waves. I had tried both silver-muller in 1D and PML in 2D and used a reference frequency close to the Alfven wave frequency, and these didn't work. I'd be happy to explore other options with the developers and SMILEI community to realize the absorption feature.

@fyli16 fyli16 added the feature-request something that could be added to the code label Sep 12, 2024
@mccoys
Copy link
Contributor

mccoys commented Sep 18, 2024

Hi, the issue here is that actually we don't really know what is happening at the boundary in your case. A close analysis of the field evolution would be necessary in the first place.

I might be wrong, but I believe that the Silver-Muller conditions implicitly assume a wave that goes at the speed of light. Could it be the issue here? Maybe this could be tested using parameters that make the Alfven wave phase velocity close to c? Like very large B.

Maybe another idea would be to slowly damp the wave in a plasma gradient (I guess density should decrease slowly).

@fyli16
Copy link
Contributor Author

fyli16 commented Sep 18, 2024

Hi @mccoys, thank you for your response and suggestions.

  1. what kind of 'close analysis of the field evolution' do you have in mind? Do you mean the field evolution inside the absorption layer? Are these fields exposed to regular diagnostics?
  2. I will try large B0 to confirm if the 'light speed' assumption is the key to this issue. Meanwhile, could you point to me any resources/materials about how Silver-Muller is implemented in SMILEI?
  3. I am also thinking of implementing a field mask to SMILEI, e.g. based on Eq. 4 of this paper:
    2001_Umeda_masking.pdf
    would you think this is feasible?
    Thanks.

@Z10Frank
Copy link
Contributor

The philosophy of Eq. 4 of the paper you attached is similar to the one in PML (compare Fig. 3 with Fig. 1 in https://arxiv.org/abs/2409.06287).
Can you check what happens when you increase the number_of_pml_cells?

@mccoys
Copy link
Contributor

mccoys commented Sep 19, 2024

@fyli16

  1. With the Silver-Muller conditions, I meant to check the value of the field in the last few cells, and their evolution. Check that it follows Maxwell + Silver-Muller (see for instance https://people.frib.msu.edu/~lund/uspas/sbp_2018/lec_em_pic/A1b_EM_Waves.pdf) and try to understand what makes it reflect the wave.
  2. Yes I think the wave phase velocity is really an issue for the silver-muller conditions. The implementation in smilei is really the same as I sent in the link
  3. As mentionned by @Z10Frank the technique by Umeda does not sound very different from PML. Instead, I suggest to try to make some space in the simulation for a plasma buffer.

@Z10Frank
Copy link
Contributor

Also, you have particles at the borders, with thermalise boundary conditions: this may not be physically consistent, but to understand its effect can you try to use a large box to leave some cells of vacuum at the borders?

@fyli16
Copy link
Contributor Author

fyli16 commented Sep 21, 2024

@mccoys @Z10Frank Thank you both for the comments and insights.

As a first step, I tried to increase the number_of_pml_cells and leave a small vacuum gap at the borders or not. Looks like these are not helping. A strange observation is that when I use larger number_of_pml_cells (i.e. 640 as opposed to 64), the resulting wave amplitude is significantly smaller as shown below. I don't understand how number_of_pml_cells would affect the wave amplitude. (all other parameters kept unchanged)

  1. No vacuum gaps
image
  1. Including a vacuum gap of 3 di on either side
image

Next I will test with larger wave speed and will post later.

@fyli16
Copy link
Contributor Author

fyli16 commented Sep 23, 2024

Now I can confirm that by increasing the Alfven speed (through reducing wpi/wci = c/v_A) from 0.01c to c, the reflectivity is reduced from near 100% to ~35%, as illustrated in the following plot. Green-color 'S-' is the Elsasser component indicating left-going reflections, and blue/orange curves are respectively the Alfven wave magetic field and velocity field. These are quasi-1D simulations (a few cells in Y with periodic boundary conditions, while X adopts PML, and the plasma fills in the whole domain).

image

This test might confirm that the wave speed is playing an important role here, but the reflectivity does not go to 0 under wpi/wci=c/v_A = 1. Additionally, large wpi/wci (e.g. on the order of 100) is of physical interest to me, so the question of how to improve the PML absorption under large wpi/wci (or small wave speeds) remains. I will look more into how PML is implemented in SMILEI. Meanwhile, any insights are welcome and appreciated.

@mccoys
Copy link
Contributor

mccoys commented Sep 24, 2024

My point about the wave speed concerned Silver muller conditions only. Have you tried it?

Also have you tried setting up a density gradient to damp the wave?

@fyli16
Copy link
Contributor Author

fyli16 commented Sep 24, 2024

1D SM conditions under wpi/wci=1 gives very similar results as quasi-1D PML; see below.

image

Regarding the density gradient, do you mean sth like this? I don't see why a density gradient would cause the wave to damp. @mccoys

image

@mccoys
Copy link
Contributor

mccoys commented Sep 24, 2024

Concerning the density gradient, I was just thinking that there might be some wave coupling that would convert the Alfven wave into some other kind of wave (maybe EM) that could more efficiently get absorbed.

@Guilleaumes
Copy link

Hi! If I understand your problem and what Alfven waves are, you need two ingredients: An external magnetic field ( B_0 ) whose direction will be that of the future waves. And you also need a plasma.

I might be wrong, but there exists a feedback loop for these waves: Transverse ionic current planes to ( B_0 ) that seed a perturbation of the ( B_0 ) field. A Lorentz force appears, changing the direction of the current planes, which generates the magnetic field perturbation.

According to Maxwell, this creates a small ( E ). So, we have a ( k, E, B ) wave that moves in the direction of ( B_0 ) and needs the support of the plasma.

No support, no magnetic perturbation, no wave.

So, by playing with the mobility of the ions or their presence, you should attenuate the wave. Or perhaps gradually cutting ( B_0 ) might work?

Numerically, this decrease in density and/or external field must be gradual to avoid reflections due to the “abrupt” nature.

Moreover, a simulation where the plasma is far from the edges should help us better understand. Because in fact I don't know if this wave can go outside of the plasma and can these waves propagate in a vacuum?

Good to know : The PML implementation does not consider any plasma in the PML region.

@fyli16
Copy link
Contributor Author

fyli16 commented Sep 30, 2024

@Guilleaumes Thanks for your comments!

The fact that the PML does not contain plasma may be a key issue for this problem. As shown in my previous reply, the wave does get reflected at the right end of the plasma (not the right boundary of the box) when I introduce a small vacuum gap (3 di in that case) in the simulation.

Previously @Z10Frank mentioned that PML is not very different from Umeda's field mask technique. Now I guess the key difference is Umeda's field mask can involve plasmas.

So, a quick question is --- can we involve plasma in the current PML design?

@mccoys
Copy link
Contributor

mccoys commented Oct 1, 2024

In the current implementation, there is no way to have plasma in the PML. This would be a very significant change. In my opinion, it could be easier to modify the silver-muller conditions: I believe they can be modified to emulate the permittivity of a medium instead of vacuum.

@fyli16
Copy link
Contributor Author

fyli16 commented Oct 1, 2024

@mccoys Thanks! I'll look into silver-muller and see how this may be modified.

Meanwhile, could you comment on the feasibility of implementing Umeda's field mask as illustrated in sketch (a):

  1. put wave injection (vertical dashed line) inside the plasma
  2. leave a finite thickness plasma layer on each side of the simulation box as wave absorption layers, where the wave is aggressively damped by masking the Maxwell equations, following Eq. 4 of Umeda's paper.
  3. we may also consider a non-uniform background B0 field in the mask layers to slow down the wave, so that the wave undergoes more iterations of damping as it traverses the absorption plasma, as sketched in (b). This may help reduce the thickness of absorption plasma layers and hence computation. This would be similar to the factor 'beta' introduced in Eqs. 21-24 of Umeda's paper.

image

In fact, I had done this with a hybrid code (kinetic ions, massless electron fluid): Eqs. 1-2 of this paper, and Fig. 1b of this paper. I assume SMILEI is much more complicated than the hybrid code I used, so I'd like to see approximated efforts needed in doing the same with SMILEI.

@fyli16
Copy link
Contributor Author

fyli16 commented Dec 19, 2024

A followup: would the SMILEI team be interested in having this feature (as sketched in the previous comment: #743 (comment)) in the near future? As seen in the discussions related to this issue, it seems that the sketched feature is necessarily required to induce proper Alfven wave absorption boundary condition (because Alfven wave needs plasma to support its propagation). I had implemented the feature in a hybrid code (in Fortran) but SMILEI seems to have a much more complicated framework than I could handle alone. If the team is interested in having this feature (which can open up broad uses in space/lab studies involving Alfven waves), I am willing to work together and provide what I can to make the implementation easier. Thanks.

@mccoys
Copy link
Contributor

mccoys commented Dec 20, 2024

Hi
We are always interested to bring useful features. However we are a small team, and the amount of work that remains on the existing features increased faster than what we can handle, especially concerning gpu support. We can certainly guide people to how to implement things, but we cannot devote to much time

@fyli16
Copy link
Contributor Author

fyli16 commented Dec 20, 2024

Sure, understood. My current thought about the implementation is that:

  1. modify the laser module to move the injection to arbitrary locations (instead of at boundaries) -- the goal is to move the injection to inside the plasma;
  2. define two parameters: mask thickness "delta" and mask slope "r", and multiply a mask factor (basically smaller than unity and determined by "r" and position, say x if the wave propagates along x) to E,B fields when updating E,B in the region x=[0, delta] and [Lx-delta, Lx] where Lx is the box length along x.

These may sound straightforward but I need to figure out how the SMILEI is implemented in these two places and then proceed to make changes.
Comments/suggestions are welcome.

@beck-llr
Copy link
Contributor

In today's implementation, laser injection is tightly linked to boundary conditions. It might be difficult to shift it to some point inside the simulation domain. Laser injection is typically handled in src/ElectroMagnBC/ElectroMagnBC2D_PML.cpp for the PML and src/ElectroMagnBC/ElectroMagnBC2D_SM.cpp for the silver muller BC (this is for the Cartesian 2D geometry).

E fields are updated in Maxwell-Ampere solvers (MA) and B fields by Maxwell-Faraday solvers (MF) which are in src/ElectroMagnSolver . The problem here is that you probably do not want to rewrite your mask for all kinds of solvers. It needs to be integrated as a new feature in the solveMaxwell function where you would apply your mask after the fields have been updated I guess ?

@Guilleaumes
Copy link

Hello Fyli,

In order to help you, you can check files src/ElectroMagnBC/ElectroMagnBC2D_Trans_Damping.cpp and src/ElectroMagnBC/ElectroMagnBCAM_ramp.cpp. You can check some possible implementation of what you need. Especially, the delta and "r" coefficient for damping wave are defined in theses files.

Theses files are "legacy" files, in that sense, for now you can't used them directly in python namelist and haven't been tested for a while.

Moreover, you can add easely the laser injection in the same way /src/ElectroMagnBC/ElectroMagnBC2D_SM.cpp and /src/ElectroMagnBC/ElectroMagnBC2D_PML.cpp

If you need to inject laser in front of your zone, I advice you to put E and B field on grid coherently, if you can, in order to suppress back-travelling wave. If it's not possible, the ramp have to be carefully made in order to absorb the wave without numerical reflection.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature-request something that could be added to the code
Projects
None yet
Development

No branches or pull requests

5 participants