Picongpu: PML seems to underperform in terms of absorbing strength

Created on 5 Nov 2020  路  2Comments  路  Source: ComputationalRadiationPhysics/picongpu

As shown by plots in #3417 if compared to results from the Taflove book. This should be orthogonal to changes in that PR tho, as every PML seem to (under)perform the same.

I am looking at it now.

bug core

Most helpful comment

After a long investigation I've found the problem.

The way we split update of B into two times propagation by dt/2 (so that E and B are at the same time as required by particle pushers) is also applied to the PML field solvers. But for that solver this resulted in effectively slightly different equations for updating convolutional components during the update of B.

Attaching a picture with a workaround in place to update B as a single step for the same problem as used by @steindev in #3417. Compared to the current PIConGPU dev, the results are much better in terms of absorption and agree with the Taflove book quite well. This workaround version only works with no particles and was done during the investigation. We discussed offline with @psychocoderHPC and @steindev how to fix it for the general case, I will try it out shortly. edit: CPML in this picture is slightly off due to one simplification still in in that version, the corrected plot with up-to-date and slightly lower error values is in #3475
pml_workaround

All 2 comments

From my Python implementation of Berenger's split field PML with the Yee field solver, I obtain the following rel. error measurements over the course of time for the example mentioned in the PR.
I used

PML thickness = 8
polynomial grading order m = 4
conductivity optimum value  = 0.8 * ( m + 1.0 ) / ( 渭 * c * 螖 )

which is also the standard in PIConGPU.

image

Compared to the measurement with PIConGPU as shown in the PR, the Python implementation yields a significantly lower relative error for the early times, i.e. after the first reflection of the generated pulse from the PML.
The measurement obtained with the Python implementation is thereby comparable to the results shown in Taflove.

After a long investigation I've found the problem.

The way we split update of B into two times propagation by dt/2 (so that E and B are at the same time as required by particle pushers) is also applied to the PML field solvers. But for that solver this resulted in effectively slightly different equations for updating convolutional components during the update of B.

Attaching a picture with a workaround in place to update B as a single step for the same problem as used by @steindev in #3417. Compared to the current PIConGPU dev, the results are much better in terms of absorption and agree with the Taflove book quite well. This workaround version only works with no particles and was done during the investigation. We discussed offline with @psychocoderHPC and @steindev how to fix it for the general case, I will try it out shortly. edit: CPML in this picture is slightly off due to one simplification still in in that version, the corrected plot with up-to-date and slightly lower error values is in #3475
pml_workaround

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ax3l picture ax3l  路  4Comments

ax3l picture ax3l  路  4Comments

psychocoderHPC picture psychocoderHPC  路  4Comments

ax3l picture ax3l  路  3Comments

berceanu picture berceanu  路  4Comments