Skip to content

Implement Drude Model #67

@tylerflex

Description

@tylerflex

Want to allow user to specify (lossy) Drude model.

All Medium objects are defined here.

We want to implement a new DispersiveMedium for Drude model.

Note that the frequency-dependence of all mediums is computed through the Medium.eps_model(frequency) function, which returns the complex relative permittivity at frequency in Hz.

For PoleResidue medium, this model is just a function of the poles and eps_inf.
For other dispersive mediums, it will be a different function of the model's attributes, for example for Debye, the eps_model is a function of self.eps_inf and self.coeffs.

Note that all Mediums are handled by the solver as PoleResidue model. Therefore each DispersiveMedium has a pole_residue @property that returns a PoleResidue object implementing the same eps_model.

What to do:

  • Create a new branch off from develop to implement the code changes (git checkout develop, git checkout -b drude)
  • Add a new DispersiveModel called Drude following the template in Sellmeier, Lorentz, and Debye. See here for example:
  • Define the additional input arguments needed to define the Drude model, their types, default values, and constraints. See this for discussion on simply constraining types of the model.
  • Write an eps_model method for Drude using the model's attributes.
  • Find the conversion from a Drude model to the eps_inf and poles of PoleResidue model and implement pole_residue() method.
  • Add Drude to both dispersive material tests, which will test both creation and that self.eps_model matches self.pole_residue.eps_model (for consistency).
  • Add Drude to the MediumType to specify that it can be used as a Medium in the rest of the project.
  • Edit docstring and add Drude to the API.
  • commit and push your changes to drude branch, open pull request and assign Tyler for review.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions