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

Question: Specify magnetic loss of the material #290

Open
konerr opened this issue Oct 23, 2024 · 6 comments
Open

Question: Specify magnetic loss of the material #290

konerr opened this issue Oct 23, 2024 · 6 comments
Labels
enhancement New feature or request

Comments

@konerr
Copy link

konerr commented Oct 23, 2024

Hello,

Can we specify magnetic loss (imaginary part of mu) of the material? From a quick glance at the source code, I only see mat_muinv whereas for epsilon there is mat_epsilon, mat_epsilon_imag.

Thanks.

@konerr konerr changed the title Magnetic loss of the material Question: Specify magnetic loss of the material Oct 23, 2024
@hughcars
Copy link
Collaborator

Hi @konerr,

You are correct, at this moment in time mu is assumed to be real. Would you be able to give a bit more of a problem description? Namely, is this magnetostatics/driven/eigen/transient etc? Modifying Palace to have complex magnetic permeability I don't think is fundamentally impossible, but might require some fairly significant modification and I would need to understand the usage a bit more.

@hughcars hughcars added the enhancement New feature or request label Oct 23, 2024
@konerr
Copy link
Author

konerr commented Oct 24, 2024

Hi @hughcars,

This will be a driven problem in the frequency domain. The application at hand is to study microwave-assisted heating of fluidized bed reactors with dielectric materials such as SiC & Magnetite. Eventually, the idea is to couple it to our in-house CFD solver.

@hughcars
Copy link
Collaborator

Ok, I believe then there isn't a fundamental reason why we cannot do this, but it will require some piping to add in a curlcurl kernel with imaginary coefficient, and make sure it gets the correct coefficient etc. There would additionally be a bit of calculation to map to the muinv_real and muinv_imag from the provided variables. This would be a pretty cool addition though, and looking at "Complex Permeability" on https://en.wikipedia.org/wiki/Permeability_(electromagnetism) I think there's no real show stopper. The most complicated bit will be ensuring that the linear solvers are correctly configured etc. and then testing it.

Let me know if you'd like to attempt to make the contribution, else I will use this ticket to add it to the plan (I can make no promises on when we'll manage to get to it, we're stretched quite thin).

@konerr
Copy link
Author

konerr commented Oct 25, 2024

My FEM is a little rusty but I'd like to give it a try. If things don't go out as planned. I'll leave it up to you. I'll draft my approach to add this feature and would appreciate it if you could give some feedback.

@konerr
Copy link
Author

konerr commented Nov 7, 2024

Hi @hughcars

Here is a document of my proposed plan Palace.pdf. You can start from section 2. I still have to write-out the changes in the BCs but I thought I could get some feedback on this.

Couple of questions about spaceoperator.cpp:

  1. Why does AddStiffnessCoefficients() have 2 MaterialPropertyCoefficient arguments while the other (mass, damping) coefficients only have 1? It looks like only the first MaterialPropertyCoefficient (df) is populated in the AddStiffnessCoefficients() function .
  2. Is CurlCurlMassIntegrator simply CurlCurlIntegrator + VectorFEMassIntegrator?

@sebastiangrimberg
Copy link
Contributor

Hi @konerr, as the original author of this bit of code I thought I might be able to answer your questions. In general this seems like a great addition and should fit well alongside the current complex permittivity functionality.

To answer your first question, yes it looks like the mass coefficient is unused by the AddStiffnessCoefficients function. Looking at this code I'm not sure why I had separated the boundary terms into separate functions and think it probably makes more sense to add all coefficients in a single unified Add*Coefficients function (instead of Add*Coefficients and Add*BdrCoefficients) since they are all called together. The idea is that there are four different types of integrals and thus four coefficients: derivative (traditionally "stiffness") and interpolation (traditionally "mass"), for volume and surface integrals. For example the stiffness matrix K has contributions from the derivative volume term (\mu) but also the interpolation surface term (from impedance boundaries). Hopefully that makes sense to you.

For your second question, yes a CurlCurlMassIntegrator applies the sum of a curl-curl term and mass term, each with their own coefficients, for either a volume or boundary integral. This is more efficient in a matrix-free framework than applying the operators separately and leads to a pretty big speedup over the separate case.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants