tidy3d.Graphene#

class tidy3d.Graphene#

Bases: tidy3d.material_library.parametric_materials.ParametricVariantItem2D

Parametric surface conductivity model for graphene.

Parameters
  • mu_c (float = 0) – [units = eV]. Chemical potential in eV.

  • temp (float = 300) – [units = K]. Temperature in K.

  • gamma (float = 0.00041) – [units = eV]. Scattering rate in eV. Must be small compared to the optical frequency.

  • scaling (float = 1) – Scaling factor used to model multiple layers of graphene.

  • include_interband (bool = True) – Include interband terms, relevant at high frequency (IR). Otherwise, the intraband terms only give a simpler Drude-type model relevant only at low frequency (THz).

  • interband_fit_freq_nodes (Optional[List[Tuple[float, float]]] = None) – Frequency nodes for fitting interband term. Each pair of nodes in the list corresponds to a single Pade approximant of order (1, 2), which is optimized to minimize the error at these two frequencies. The default behavior is to fit a first approximant at one very low frequency and one very high frequency, and to fit a second approximant in the vicinity of the interband feature. This default behavior works for a wide range of frequencies; consider changing the nodes to obtain a better fit for a narrow-band simulation.

  • interband_fit_num_iters (NonNegativeInt = 100) – Number of iterations for optimizing each Pade approximant when fitting the interband term. Making this larger might give a better fit at the cost of decreased stability in the fitting algorithm.

Note

The model contains intraband and interband terms, as described in:

George W. Hanson, "Dyadic Green's Functions for an Anisotropic,
Non-Local Model of Biased Graphene," IEEE Trans. Antennas Propag.
56, 3, 747-757 (2008).

Example

>>> graphene_medium = Graphene(mu_c = 0.2).medium

Show JSON schema
{
   "title": "Graphene",
   "description": "Parametric surface conductivity model for graphene.\n\nParameters\n----------\nmu_c : float = 0\n    [units = eV].  Chemical potential in eV.\ntemp : float = 300\n    [units = K].  Temperature in K.\ngamma : float = 0.00041\n    [units = eV].  Scattering rate in eV. Must be small compared to the optical frequency.\nscaling : float = 1\n    Scaling factor used to model multiple layers of graphene.\ninclude_interband : bool = True\n    Include interband terms, relevant at high frequency (IR). Otherwise, the intraband terms only give a simpler Drude-type model relevant only at low frequency (THz).\ninterband_fit_freq_nodes : Optional[List[Tuple[float, float]]] = None\n    Frequency nodes for fitting interband term. Each pair of nodes in the list corresponds to a single Pade approximant of order (1, 2), which is optimized to minimize the error at these two frequencies. The default behavior is to fit a first approximant at one very low frequency and one very high frequency, and to fit a second approximant in the vicinity of the interband feature. This default behavior works for a wide range of frequencies; consider changing the nodes to obtain a better fit for a narrow-band simulation.\ninterband_fit_num_iters : NonNegativeInt = 100\n    Number of iterations for optimizing each Pade approximant when fitting the interband term. Making this larger might give a better fit at the cost of decreased stability in the fitting algorithm.\n\nNote\n----\nThe model contains intraband and interband terms, as described in::\n\n    George W. Hanson, \"Dyadic Green's Functions for an Anisotropic,\n    Non-Local Model of Biased Graphene,\" IEEE Trans. Antennas Propag.\n    56, 3, 747-757 (2008).\n\nExample\n-------\n>>> graphene_medium = Graphene(mu_c = 0.2).medium",
   "type": "object",
   "properties": {
      "type": {
         "title": "Type",
         "default": "Graphene",
         "enum": [
            "Graphene"
         ],
         "type": "string"
      },
      "mu_c": {
         "title": "Chemical potential in eV",
         "description": "Chemical potential in eV.",
         "default": 0,
         "units": "eV",
         "type": "number"
      },
      "temp": {
         "title": "Temperature in K",
         "description": "Temperature in K.",
         "default": 300,
         "units": "K",
         "type": "number"
      },
      "gamma": {
         "title": "Scattering rate in eV",
         "description": "Scattering rate in eV. Must be small compared to the optical frequency.",
         "default": 0.00041,
         "units": "eV",
         "type": "number"
      },
      "scaling": {
         "title": "Scaling factor",
         "description": "Scaling factor used to model multiple layers of graphene.",
         "default": 1,
         "type": "number"
      },
      "include_interband": {
         "title": "Include interband terms",
         "description": "Include interband terms, relevant at high frequency (IR). Otherwise, the intraband terms only give a simpler Drude-type model relevant only at low frequency (THz).",
         "default": true,
         "type": "boolean"
      },
      "interband_fit_freq_nodes": {
         "title": "Interband fitting frequency nodes",
         "description": "Frequency nodes for fitting interband term. Each pair of nodes in the list corresponds to a single Pade approximant of order (1, 2), which is optimized to minimize the error at these two frequencies. The default behavior is to fit a first approximant at one very low frequency and one very high frequency, and to fit a second approximant in the vicinity of the interband feature. This default behavior works for a wide range of frequencies; consider changing the nodes to obtain a better fit for a narrow-band simulation.",
         "type": "array",
         "items": {
            "type": "array",
            "minItems": 2,
            "maxItems": 2,
            "items": [
               {
                  "type": "number"
               },
               {
                  "type": "number"
               }
            ]
         }
      },
      "interband_fit_num_iters": {
         "title": "Interband fitting number of iterations",
         "description": "Number of iterations for optimizing each Pade approximant when fitting the interband term. Making this larger might give a better fit at the cost of decreased stability in the fitting algorithm.",
         "default": 100,
         "minimum": 0,
         "type": "integer"
      }
   },
   "additionalProperties": false
}

attribute gamma: float = 0.00041#

Scattering rate in eV. Must be small compared to the optical frequency.

attribute include_interband: bool = True#

Include interband terms, relevant at high frequency (IR). Otherwise, the intraband terms only give a simpler Drude-type model relevant only at low frequency (THz).

attribute interband_fit_freq_nodes: List[Tuple[float, float]] = None#

Frequency nodes for fitting interband term. Each pair of nodes in the list corresponds to a single Pade approximant of order (1, 2), which is optimized to minimize the error at these two frequencies. The default behavior is to fit a first approximant at one very low frequency and one very high frequency, and to fit a second approximant in the vicinity of the interband feature. This default behavior works for a wide range of frequencies; consider changing the nodes to obtain a better fit for a narrow-band simulation.

Validated by
  • _calculate_freq_nodes

attribute interband_fit_num_iters: pydantic.types.NonNegativeInt = 100#

Number of iterations for optimizing each Pade approximant when fitting the interband term. Making this larger might give a better fit at the cost of decreased stability in the fitting algorithm.

Constraints
  • minimum = 0

attribute mu_c: float = 0#

Chemical potential in eV.

attribute scaling: float = 1#

Scaling factor used to model multiple layers of graphene.

attribute temp: float = 300#

Temperature in K.

classmethod add_type_field() None#

Automatically place “type” field with model name in the model field dictionary.

classmethod construct(_fields_set: Optional[SetStr] = None, **values: Any) Model#

Creates a new model setting __dict__ and __fields_set__ from trusted or pre-validated data. Default values are respected, but no other validation is performed. Behaves as if Config.extra = ‘allow’ was set since it adds all passed values

copy(**kwargs) tidy3d.components.base.Tidy3dBaseModel#

Copy a Tidy3dBaseModel. With deep=True as default.

dict(*, include: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, exclude: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, by_alias: bool = False, skip_defaults: Optional[bool] = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False) DictStrAny#

Generate a dictionary representation of the model, optionally specifying which fields to include or exclude.

classmethod dict_from_file(fname: str, group_path: Optional[str] = None) dict#

Loads a dictionary containing the model from a .yaml, .json, or .hdf5 file.

Parameters
  • fname (str) – Full path to the .yaml or .json file to load the Tidy3dBaseModel from.

  • group_path (str, optional) – Path to a group inside the file to use as the base level.

Returns

A dictionary containing the model.

Return type

dict

Example

>>> simulation = Simulation.from_file(fname='folder/sim.json') 
classmethod dict_from_hdf5(fname: str, group_path: str = '') dict#

Loads a dictionary containing the model contents from a .hdf5 file.

Parameters
  • fname (str) – Full path to the .hdf5 file to load the Tidy3dBaseModel from.

  • group_path (str, optional) – Path to a group inside the file to selectively load a sub-element of the model only.

Returns

Dictionary containing the model.

Return type

dict

Example

>>> sim_dict = Simulation.dict_from_hdf5(fname='folder/sim.hdf5') 
classmethod dict_from_json(fname: str) dict#

Load dictionary of the model from a .json file.

Parameters

fname (str) – Full path to the .json file to load the Tidy3dBaseModel from.

Returns

A dictionary containing the model.

Return type

dict

Example

>>> sim_dict = Simulation.dict_from_json(fname='folder/sim.json') 
classmethod dict_from_yaml(fname: str) dict#

Load dictionary of the model from a .yaml file.

Parameters

fname (str) – Full path to the .yaml file to load the Tidy3dBaseModel from.

Returns

A dictionary containing the model.

Return type

dict

Example

>>> sim_dict = Simulation.dict_from_yaml(fname='folder/sim.yaml') 
classmethod from_file(fname: str, group_path: Optional[str] = None, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel#

Loads a Tidy3dBaseModel from .yaml, .json, or .hdf5 file.

Parameters
  • fname (str) – Full path to the .yaml or .json file to load the Tidy3dBaseModel from.

  • group_path (str, optional) – Path to a group inside the file to use as the base level. Only for .hdf5 files. Starting / is optional.

  • **parse_obj_kwargs – Keyword arguments passed to either pydantic’s parse_obj function when loading model.

Returns

An instance of the component class calling load.

Return type

Tidy3dBaseModel

Example

>>> simulation = Simulation.from_file(fname='folder/sim.json') 
classmethod from_hdf5(fname: str, group_path: str = '', **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel#

Loads Tidy3dBaseModel instance to .hdf5 file.

Parameters
  • fname (str) – Full path to the .hdf5 file to load the Tidy3dBaseModel from.

  • group_path (str, optional) – Path to a group inside the file to selectively load a sub-element of the model only. Starting / is optional.

  • **parse_obj_kwargs – Keyword arguments passed to pydantic’s parse_obj method.

Example

>>> simulation.to_hdf5(fname='folder/sim.hdf5') 
classmethod from_json(fname: str, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel#

Load a Tidy3dBaseModel from .json file.

Parameters

fname (str) – Full path to the .json file to load the Tidy3dBaseModel from.

Returns

  • Tidy3dBaseModel – An instance of the component class calling load.

  • **parse_obj_kwargs – Keyword arguments passed to pydantic’s parse_obj method.

Example

>>> simulation = Simulation.from_json(fname='folder/sim.json') 
classmethod from_orm(obj: Any) Model#
classmethod from_yaml(fname: str, **parse_obj_kwargs) tidy3d.components.base.Tidy3dBaseModel#

Loads Tidy3dBaseModel from .yaml file.

Parameters
  • fname (str) – Full path to the .yaml file to load the Tidy3dBaseModel from.

  • **parse_obj_kwargs – Keyword arguments passed to pydantic’s parse_obj method.

Returns

An instance of the component class calling from_yaml.

Return type

Tidy3dBaseModel

Example

>>> simulation = Simulation.from_yaml(fname='folder/sim.yaml') 
classmethod generate_docstring() str#

Generates a docstring for a Tidy3D mode and saves it to the __doc__ of the class.

classmethod get_sub_model(group_path: str, model_dict: dict | list) dict#

Get the sub model for a given group path.

static get_tuple_group_name(index: int) str#

Get the group name of a tuple element.

static get_tuple_index(key_name: str) int#

Get the index into the tuple based on its group name.

help(methods: bool = False) None#

Prints message describing the fields and methods of a Tidy3dBaseModel.

Parameters

methods (bool = False) – Whether to also print out information about object’s methods.

Example

>>> simulation.help(methods=True) 
interband_conductivity(freqs: List[float]) List[complex]#

Numerically integrate interband term.

Parameters

freqs (List[float]) – The list of frequencies.

Returns

The list of corresponding interband conductivities, in S.

Return type

List[complex]

json(*, include: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, exclude: Optional[Union[AbstractSetIntStr, MappingIntStrAny]] = None, by_alias: bool = False, skip_defaults: Optional[bool] = None, exclude_unset: bool = False, exclude_defaults: bool = False, exclude_none: bool = False, encoder: Optional[Callable[[Any], Any]] = None, models_as_dict: bool = True, **dumps_kwargs: Any) unicode#

Generate a JSON representation of the model, include and exclude arguments as per dict().

encoder is an optional function to supply as default to json.dumps(), other arguments as per json.dumps().

numerical_conductivity(freqs: List[float]) List[complex]#

Numerically calculate the conductivity. If this differs from the conductivity of the Medium2D, it is due to error while fitting the interband term, and you may try values of interband_fit_freq_nodes different from its default (calculated) value.

Parameters

freqs (List[float]) – The list of frequencies.

Returns

The list of corresponding conductivities, in S.

Return type

List[complex]

classmethod parse_file(path: Union[str, pathlib.Path], *, content_type: unicode = None, encoding: unicode = 'utf8', proto: pydantic.parse.Protocol = None, allow_pickle: bool = False) Model#
classmethod parse_obj(obj: Any) Model#
classmethod parse_raw(b: Union[str, bytes], *, content_type: unicode = None, encoding: unicode = 'utf8', proto: pydantic.parse.Protocol = None, allow_pickle: bool = False) Model#
classmethod schema(by_alias: bool = True, ref_template: unicode = '#/definitions/{model}') DictStrAny#
classmethod schema_json(*, by_alias: bool = True, ref_template: unicode = '#/definitions/{model}', **dumps_kwargs: Any) unicode#
to_file(fname: str) None#

Exports Tidy3dBaseModel instance to .yaml, .json, or .hdf5 file

Parameters

fname (str) – Full path to the .yaml or .json file to save the Tidy3dBaseModel to.

Example

>>> simulation.to_file(fname='folder/sim.json') 
to_hdf5(fname: str) None#

Exports Tidy3dBaseModel instance to .hdf5 file.

Parameters

fname (str) – Full path to the .hdf5 file to save the Tidy3dBaseModel to.

Example

>>> simulation.to_hdf5(fname='folder/sim.hdf5') 
to_json(fname: str) None#

Exports Tidy3dBaseModel instance to .json file

Parameters

fname (str) – Full path to the .json file to save the Tidy3dBaseModel to.

Example

>>> simulation.to_json(fname='folder/sim.json') 
to_yaml(fname: str) None#

Exports Tidy3dBaseModel instance to .yaml file.

Parameters

fname (str) – Full path to the .yaml file to save the Tidy3dBaseModel to.

Example

>>> simulation.to_yaml(fname='folder/sim.yaml') 
classmethod tuple_to_dict(tuple_values: tuple) dict#

How we generate a dictionary mapping new keys to tuple values for hdf5.

classmethod update_forward_refs(**localns: Any) None#

Try to update ForwardRefs on fields based on this Model, globalns and localns.

updated_copy(**kwargs) tidy3d.components.base.Tidy3dBaseModel#

Make copy of a component instance with **kwargs indicating updated field values.

classmethod validate(value: Any) Model#
property interband_pole_residue: tidy3d.components.medium.PoleResidue#

A pole-residue model for the interband term of graphene. Note that this does not include the intraband term, which is added in separately.

Returns

A pole-residue model for the interband term of graphene.

Return type

PoleResidue

property intraband_drude: tidy3d.components.medium.Drude#

A Drude-type model for the intraband term of graphene.

Returns

A Drude-type model for the intraband term of graphene.

Return type

Drude

property medium: tidy3d.components.medium.Medium2D#

Surface conductivity model for graphene.