2026-04-19 00:22:42 -07:00
<!doctype html>
< html lang = "en" class = "no-js" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< meta name = "description" content = "Electromagnetic simulation tools" >
< link rel = "canonical" href = "https://mpxd.net/docs/meanas/api/fdfd/" >
< link rel = "prev" href = "../eigensolvers/" >
< link rel = "next" href = "../waveguides/" >
< link rel = "icon" href = "../../assets/images/favicon.png" >
< meta name = "generator" content = "mkdocs-1.6.1, mkdocs-material-9.7.6" >
< title > fdfd - meanas< / title >
< link rel = "stylesheet" href = "../../assets/stylesheets/main.484c7ddc.min.css" >
2026-04-20 17:38:01 -07:00
< link rel = "stylesheet" href = "../../assets/stylesheets/palette.ab4e12ef.min.css" >
2026-04-19 00:22:42 -07:00
< link rel = "stylesheet" href = "../../css/print-site.css" >
< link rel = "stylesheet" href = "../../css/print-site-material.css" >
< link rel = "stylesheet" href = "../../assets/_mkdocstrings.css" >
< link rel = "stylesheet" href = "../../stylesheets/extra.css" >
< script > _ _md _scope = new URL ( "../.." , location ) , _ _md _hash = e => [ ... e ] . reduce ( ( ( e , _ ) => ( e << 5 ) - e + _ . charCodeAt ( 0 ) ) , 0 ) , _ _md _get = ( e , _ = localStorage , t = _ _md _scope ) => JSON . parse ( _ . getItem ( t . pathname + "." + e ) ) , _ _md _set = ( e , _ , t = localStorage , a = _ _md _scope ) => { try { t . setItem ( a . pathname + "." + e , JSON . stringify ( _ ) ) } catch ( e ) { } } < / script >
< / head >
2026-04-20 17:38:01 -07:00
< body dir = "ltr" data-md-color-scheme = "slate" data-md-color-primary = "blue-grey" data-md-color-accent = "cyan" >
2026-04-19 00:22:42 -07:00
< input class = "md-toggle" data-md-toggle = "drawer" type = "checkbox" id = "__drawer" autocomplete = "off" >
< input class = "md-toggle" data-md-toggle = "search" type = "checkbox" id = "__search" autocomplete = "off" >
< label class = "md-overlay" for = "__drawer" > < / label >
< div data-md-component = "skip" >
< a href = "#fdfd" class = "md-skip" >
Skip to content
< / a >
< / div >
< div data-md-component = "announce" >
< / div >
< header class = "md-header md-header--shadow" data-md-component = "header" >
< nav class = "md-header__inner md-grid" aria-label = "Header" >
< a href = "../.." title = "meanas" class = "md-header__button md-logo" aria-label = "meanas" data-md-component = "logo" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54" / > < / svg >
< / a >
< label class = "md-header__button md-icon" for = "__drawer" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z" / > < / svg >
< / label >
< div class = "md-header__title" data-md-component = "header-title" >
< div class = "md-header__ellipsis" >
< div class = "md-header__topic" >
< span class = "md-ellipsis" >
meanas
< / span >
< / div >
< div class = "md-header__topic" data-md-component = "header-topic" >
< span class = "md-ellipsis" >
fdfd
< / span >
< / div >
< / div >
< / div >
2026-04-20 17:38:01 -07:00
< form class = "md-header__option" data-md-component = "palette" >
< input class = "md-option" data-md-color-media = "" data-md-color-scheme = "slate" data-md-color-primary = "blue-grey" data-md-color-accent = "cyan" aria-label = "Switch to light mode" type = "radio" name = "__palette" id = "__palette_0" >
< label class = "md-header__button md-icon" title = "Switch to light mode" for = "__palette_1" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z" / > < / svg >
< / label >
< input class = "md-option" data-md-color-media = "" data-md-color-scheme = "default" data-md-color-primary = "teal" data-md-color-accent = "indigo" aria-label = "Switch to dark mode" type = "radio" name = "__palette" id = "__palette_1" >
< label class = "md-header__button md-icon" title = "Switch to dark mode" for = "__palette_0" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31" / > < / svg >
< / label >
< / form >
2026-04-19 00:22:42 -07:00
< script > var palette = _ _md _get ( "__palette" ) ; if ( palette && palette . color ) { if ( "(prefers-color-scheme)" === palette . color . media ) { var media = matchMedia ( "(prefers-color-scheme: light)" ) , input = document . querySelector ( media . matches ? "[data-md-color-media='(prefers-color-scheme: light)']" : "[data-md-color-media='(prefers-color-scheme: dark)']" ) ; palette . color . media = input . getAttribute ( "data-md-color-media" ) , palette . color . scheme = input . getAttribute ( "data-md-color-scheme" ) , palette . color . primary = input . getAttribute ( "data-md-color-primary" ) , palette . color . accent = input . getAttribute ( "data-md-color-accent" ) } for ( var [ key , value ] of Object . entries ( palette . color ) ) document . body . setAttribute ( "data-md-color-" + key , value ) } < / script >
< label class = "md-header__button md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
< / label >
< div class = "md-search" data-md-component = "search" role = "dialog" >
< label class = "md-search__overlay" for = "__search" > < / label >
< div class = "md-search__inner" role = "search" >
< form class = "md-search__form" name = "search" >
< input type = "text" class = "md-search__input" name = "query" aria-label = "Search" placeholder = "Search" autocapitalize = "off" autocorrect = "off" autocomplete = "off" spellcheck = "false" data-md-component = "search-query" required >
< label class = "md-search__icon md-icon" for = "__search" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5" / > < / svg >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z" / > < / svg >
< / label >
< nav class = "md-search__options" aria-label = "Search" >
< button type = "reset" class = "md-search__icon md-icon" title = "Clear" aria-label = "Clear" tabindex = "-1" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z" / > < / svg >
< / button >
< / nav >
< / form >
< div class = "md-search__output" >
< div class = "md-search__scrollwrap" tabindex = "0" data-md-scrollfix >
< div class = "md-search-result" data-md-component = "search-result" >
< div class = "md-search-result__meta" >
Initializing search
< / div >
< ol class = "md-search-result__list" role = "presentation" > < / ol >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "md-header__source" >
< a href = "https://mpxd.net/code/jan/meanas" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc. --> < path d = "M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4" / > < / svg >
< / div >
< div class = "md-source__repository" >
meanas
< / div >
< / a >
< / div >
< / nav >
< / header >
< div class = "md-container" data-md-component = "container" >
< main class = "md-main" data-md-component = "main" >
< div class = "md-main__inner md-grid" >
< div class = "md-sidebar md-sidebar--primary" data-md-component = "sidebar" data-md-type = "navigation" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--primary" aria-label = "Navigation" data-md-level = "0" >
< label class = "md-nav__title" for = "__drawer" >
< a href = "../.." title = "meanas" class = "md-nav__button md-logo" aria-label = "meanas" data-md-component = "logo" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54" / > < / svg >
< / a >
meanas
< / label >
< div class = "md-nav__source" >
< a href = "https://mpxd.net/code/jan/meanas" title = "Go to repository" class = "md-source" data-md-component = "source" >
< div class = "md-source__icon md-icon" >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 448 512" > <!-- ! Font Awesome Free 7.1.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2025 Fonticons, Inc. --> < path d = "M439.6 236.1 244 40.5c-5.4-5.5-12.8-8.5-20.4-8.5s-15 3-20.4 8.4L162.5 81l51.5 51.5c27.1-9.1 52.7 16.8 43.4 43.7l49.7 49.7c34.2-11.8 61.2 31 35.5 56.7-26.5 26.5-70.2-2.9-56-37.3L240.3 199v121.9c25.3 12.5 22.3 41.8 9.1 55-6.4 6.4-15.2 10.1-24.3 10.1s-17.8-3.6-24.3-10.1c-17.6-17.6-11.1-46.9 11.2-56v-123c-20.8-8.5-24.6-30.7-18.6-45L142.6 101 8.5 235.1C3 240.6 0 247.9 0 255.5s3 15 8.5 20.4l195.6 195.7c5.4 5.4 12.7 8.4 20.4 8.4s15-3 20.4-8.4l194.7-194.7c5.4-5.4 8.4-12.8 8.4-20.4s-3-15-8.4-20.4" / > < / svg >
< / div >
< div class = "md-source__repository" >
meanas
< / div >
< / a >
< / div >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../.." class = "md-nav__link" >
< span class = "md-ellipsis" >
Home
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested" >
< input class = "md-nav__toggle md-toggle " type = "checkbox" id = "__nav_2" checked >
< div class = "md-nav__link md-nav__container" >
< a href = "../" class = "md-nav__link " >
< span class = "md-ellipsis" >
API
< / span >
< / a >
< label class = "md-nav__link " for = "__nav_2" id = "__nav_2_label" tabindex = "" >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< / div >
< nav class = "md-nav" data-md-level = "1" aria-labelledby = "__nav_2_label" aria-expanded = "true" >
< label class = "md-nav__title" for = "__nav_2" >
< span class = "md-nav__icon md-icon" > < / span >
API
< / label >
< ul class = "md-nav__list" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "../meanas/" class = "md-nav__link" >
< span class = "md-ellipsis" >
meanas
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../eigensolvers/" class = "md-nav__link" >
< span class = "md-ellipsis" >
eigensolvers
< / span >
< / a >
< / li >
< li class = "md-nav__item md-nav__item--active" >
< input class = "md-nav__toggle md-toggle" type = "checkbox" id = "__toc" >
< label class = "md-nav__link md-nav__link--active" for = "__toc" >
< span class = "md-ellipsis" >
fdfd
< / span >
< span class = "md-nav__icon md-icon" > < / span >
< / label >
< a href = "./" class = "md-nav__link md-nav__link--active" >
< span class = "md-ellipsis" >
fdfd
< / span >
< / a >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > fdfd
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#core-operator-layers" class = "md-nav__link" >
< span class = "md-ellipsis" >
Core operator layers
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > functional
< / span >
< / a >
< nav class = "md-nav" aria-label = " functional" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.eh_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > eh_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e2h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e2h
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.m2j" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > m2j
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e_tfsf_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_tfsf_source
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.poynting_e_cross_h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_e_cross_h
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > operators
< / span >
< / a >
< nav class = "md-nav" aria-label = " operators" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_full_preconditioners" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full_preconditioners
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.h_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > h_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.eh_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > eh_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e2h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e2h
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.m2j" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > m2j
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.poynting_e_cross" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_e_cross
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.poynting_h_cross" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_h_cross
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_tfsf_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_tfsf_source
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_boundary_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_boundary_source
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.solvers" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > solvers
< / span >
< / a >
< nav class = "md-nav" aria-label = " solvers" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.solvers.generic" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > generic
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > scpml
< / span >
< / a >
< nav class = "md-nav" aria-label = " scpml" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.s_function_t" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-attribute" > < / code > s_function_t
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.prepare_s_function" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > prepare_s_function
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.uniform_grid_scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > uniform_grid_scpml
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.stretch_with_scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > stretch_with_scpml
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > farfield
< / span >
< / a >
< nav class = "md-nav" aria-label = " farfield" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield.near_to_farfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > near_to_farfield
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield.far_to_nearfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > far_to_nearfield
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "../waveguides/" class = "md-nav__link" >
< span class = "md-ellipsis" >
waveguides
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../fdtd/" class = "md-nav__link" >
< span class = "md-ellipsis" >
fdtd
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "../fdmath/" class = "md-nav__link" >
< span class = "md-ellipsis" >
fdmath
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-sidebar md-sidebar--secondary" data-md-component = "sidebar" data-md-type = "toc" >
< div class = "md-sidebar__scrollwrap" >
< div class = "md-sidebar__inner" >
< nav class = "md-nav md-nav--secondary" aria-label = "Table of contents" >
< label class = "md-nav__title" for = "__toc" >
< span class = "md-nav__icon md-icon" > < / span >
Table of contents
< / label >
< ul class = "md-nav__list" data-md-component = "toc" data-md-scrollfix >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > fdfd
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#core-operator-layers" class = "md-nav__link" >
< span class = "md-ellipsis" >
Core operator layers
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > functional
< / span >
< / a >
< nav class = "md-nav" aria-label = " functional" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.eh_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > eh_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e2h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e2h
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.m2j" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > m2j
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.e_tfsf_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_tfsf_source
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.functional.poynting_e_cross_h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_e_cross_h
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > operators
< / span >
< / a >
< nav class = "md-nav" aria-label = " operators" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_full_preconditioners" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_full_preconditioners
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.h_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > h_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.eh_full" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > eh_full
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e2h" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e2h
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.m2j" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > m2j
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.poynting_e_cross" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_e_cross
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.poynting_h_cross" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > poynting_h_cross
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_tfsf_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_tfsf_source
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.operators.e_boundary_source" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > e_boundary_source
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.solvers" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > solvers
< / span >
< / a >
< nav class = "md-nav" aria-label = " solvers" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.solvers.generic" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > generic
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > scpml
< / span >
< / a >
< nav class = "md-nav" aria-label = " scpml" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.s_function_t" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-attribute" > < / code > s_function_t
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.prepare_s_function" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > prepare_s_function
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.uniform_grid_scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > uniform_grid_scpml
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.scpml.stretch_with_scpml" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > stretch_with_scpml
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-module" > < / code > farfield
< / span >
< / a >
< nav class = "md-nav" aria-label = " farfield" >
< ul class = "md-nav__list" >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield.near_to_farfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > near_to_farfield
< / span >
< / a >
< / li >
< li class = "md-nav__item" >
< a href = "#meanas.fdfd.farfield.far_to_nearfield" class = "md-nav__link" >
< span class = "md-ellipsis" >
< code class = "doc-symbol doc-symbol-toc doc-symbol-function" > < / code > far_to_nearfield
< / span >
< / a >
< / li >
< / ul >
< / nav >
< / li >
< / ul >
< / nav >
< / div >
< / div >
< / div >
< div class = "md-content" data-md-component = "content" >
< article class = "md-content__inner md-typeset" >
< h1 id = "fdfd" > fdfd< a class = "headerlink" href = "#fdfd" title = "Permanent link" > ¶ < / a > < / h1 >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd< / span >
< a href = "#meanas.fdfd" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Tools for finite difference frequency-domain (FDFD) simulations and calculations.< / p >
< p > These mostly involve picking a single frequency, then setting up and solving a
matrix equation (Ax=b) or eigenvalue problem.< / p >
< p > Submodules:< / p >
< ul >
< li > < code > operators< / code > , < code > functional< / code > : General FDFD problem setup.< / li >
< li > < code > solvers< / code > : Solver interface and reference implementation.< / li >
< li > < code > scpml< / code > : Stretched-coordinate perfectly matched layer (SCPML) boundary conditions.< / li >
< li > < code > waveguide_2d< / code > : Operators and mode-solver for waveguides with constant cross-section.< / li >
< li > < code > waveguide_3d< / code > : Functions for transforming < code > waveguide_2d< / code > results into 3D,
including mode-source and overlap-window construction.< / li >
< li > < code > farfield< / code > , < code > bloch< / code > , < code > eme< / code > : specialized helper modules for near/far transforms,
Bloch-periodic problems, and eigenmode expansion.< / li >
< / ul >
< p > ================================================================< / p >
< p > From the "Frequency domain" section of < code > meanas.fdmath< / code > , we have< / p >
< div class = "arithmatex" > \[
\begin{aligned}
2026-04-19 16:40:30 -07:00
\tilde{E}_{l, \vec{r}} & = \tilde{E}_{\vec{r}} e^{-\imath \omega l \Delta_t} \\
\tilde{H}_{l - \frac{1}{2}, \vec{r} + \frac{1}{2}} & = \tilde{H}_{\vec{r} + \frac{1}{2}} e^{-\imath \omega (l - \frac{1}{2}) \Delta_t} \\
\tilde{J}_{l, \vec{r}} & = \tilde{J}_{\vec{r}} e^{-\imath \omega (l - \frac{1}{2}) \Delta_t} \\
\tilde{M}_{l - \frac{1}{2}, \vec{r} + \frac{1}{2}} & = \tilde{M}_{\vec{r} + \frac{1}{2}} e^{-\imath \omega l \Delta_t} \\
2026-04-19 00:22:42 -07:00
\hat{\nabla} \times (\mu^{-1}_{\vec{r} + \frac{1}{2}} \cdot \tilde{\nabla} \times \tilde{E}_{\vec{r}})
2026-04-19 16:40:30 -07:00
-\Omega^2 \epsilon_{\vec{r}} \cdot \tilde{E}_{\vec{r}} & = -\imath \Omega \tilde{J}_{\vec{r}} e^{\imath \omega \Delta_t / 2} \\
\Omega & = 2 \sin(\omega \Delta_t / 2) / \Delta_t
2026-04-19 00:22:42 -07:00
\end{aligned}
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > resulting in< / p >
< div class = "arithmatex" > \[
\begin{aligned}
2026-04-19 16:40:30 -07:00
\tilde{\partial}_t & \Rightarrow -\imath \Omega e^{-\imath \omega \Delta_t / 2}\\
\hat{\partial}_t & \Rightarrow -\imath \Omega e^{ \imath \omega \Delta_t / 2}\\
2026-04-19 00:22:42 -07:00
\end{aligned}
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > Maxwell's equations are then< / p >
< div class = "arithmatex" > \[
\begin{aligned}
2026-04-19 16:40:30 -07:00
\tilde{\nabla} \times \tilde{E}_{\vec{r}} & =
2026-04-19 00:22:42 -07:00
\imath \Omega e^{-\imath \omega \Delta_t / 2} \hat{B}_{\vec{r} + \frac{1}{2}}
- \hat{M}_{\vec{r} + \frac{1}{2}} \\
2026-04-19 16:40:30 -07:00
\hat{\nabla} \times \hat{H}_{\vec{r} + \frac{1}{2}} & =
2026-04-19 00:22:42 -07:00
-\imath \Omega e^{ \imath \omega \Delta_t / 2} \tilde{D}_{\vec{r}}
+ \tilde{J}_{\vec{r}} \\
2026-04-19 16:40:30 -07:00
\tilde{\nabla} \cdot \hat{B}_{\vec{r} + \frac{1}{2}} & = 0 \\
\hat{\nabla} \cdot \tilde{D}_{\vec{r}} & = \rho_{\vec{r}}
2026-04-19 00:22:42 -07:00
\end{aligned}
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > With < span class = "arithmatex" > \(\Delta_t \to 0\)< / span > , this simplifies to< / p >
< div class = "arithmatex" > \[
\begin{aligned}
2026-04-19 16:40:30 -07:00
\tilde{E}_{l, \vec{r}} & \to \tilde{E}_{\vec{r}} \\
\tilde{H}_{l - \frac{1}{2}, \vec{r} + \frac{1}{2}} & \to \tilde{H}_{\vec{r} + \frac{1}{2}} \\
\tilde{J}_{l, \vec{r}} & \to \tilde{J}_{\vec{r}} \\
\tilde{M}_{l - \frac{1}{2}, \vec{r} + \frac{1}{2}} & \to \tilde{M}_{\vec{r} + \frac{1}{2}} \\
\Omega & \to \omega \\
\tilde{\partial}_t & \to -\imath \omega \\
\hat{\partial}_t & \to -\imath \omega \\
2026-04-19 00:22:42 -07:00
\end{aligned}
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > and then< / p >
< div class = "arithmatex" > \[
\begin{aligned}
2026-04-19 16:40:30 -07:00
\tilde{\nabla} \times \tilde{E}_{\vec{r}} & =
2026-04-19 00:22:42 -07:00
\imath \omega \hat{B}_{\vec{r} + \frac{1}{2}}
- \hat{M}_{\vec{r} + \frac{1}{2}} \\
2026-04-19 16:40:30 -07:00
\hat{\nabla} \times \hat{H}_{\vec{r} + \frac{1}{2}} & =
2026-04-19 00:22:42 -07:00
-\imath \omega \tilde{D}_{\vec{r}}
+ \tilde{J}_{\vec{r}} \\
\end{aligned}
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< div class = "arithmatex" > \[
\hat{\nabla} \times (\mu^{-1}_{\vec{r} + \frac{1}{2}} \cdot \tilde{\nabla} \times \tilde{E}_{\vec{r}})
-\omega^2 \epsilon_{\vec{r}} \cdot \tilde{E}_{\vec{r}} = -\imath \omega \tilde{J}_{\vec{r}} \\
\]< / div >
< div class = "doc doc-children" >
< / div >
< / div >
< / div > < h2 id = "core-operator-layers" > Core operator layers< a class = "headerlink" href = "#core-operator-layers" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd.functional" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd.functional< / span >
< a href = "#meanas.fdfd.functional" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Functional versions of many FDFD operators. These can be useful for performing
FDFD calculations without needing to construct large matrices in memory.< / p >
< p > The functions generated here expect < code > cfdfield_t< / code > inputs with shape (3, X, Y, Z),
e.g. E = [E_x, E_y, E_z] where each (complex) component has shape (X, Y, Z)< / p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.e_full" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_full< / span >
< a href = "#meanas.fdfd.functional.e_full" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_full< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > cfdfield_updater_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Wave operator for use with E-field. See < code > operators.e_full< / code > for details.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > implementing the wave operator< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > f(E)< / code > -> < code > -i * omega * J< / code > < / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.eh_full" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > eh_full< / span >
< a href = "#meanas.fdfd.functional.eh_full" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > eh_full< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > Callable< / span > < span class = "p" > [< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > [< / span > < span class = "n" > cfdfield< / span > < span class = "p" > ,< / span > < span class = "n" > cfdfield< / span > < span class = "p" > ],< / span > < span class = "nb" > tuple< / span > < span class = "p" > [< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ,< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ]< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Wave operator for full (both E and H) field representation.
See < code > operators.eh_full< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "collections.abc.Callable" > Callable< / span > [[< a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > , < a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > ], < span title = "tuple" > tuple< / span > [< span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > , < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > ]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > implementing the wave operator< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "collections.abc.Callable" > Callable< / span > [[< a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > , < a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > ], < span title = "tuple" > tuple< / span > [< span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > , < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > ]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > f(E, H)< / code > -> < code > (J, -M)< / code > < / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.e2h" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e2h< / span >
< a href = "#meanas.fdfd.functional.e2h" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e2h< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > cfdfield_updater_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Utility operator for converting the < code > E< / code > field into the < code > H< / code > field.
For use with < code > e_full< / code > -- assumes that there is no magnetic current < code > M< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > for converting < code > E< / code > to < code > H< / code > ,< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > f(E)< / code > -> < code > H< / code > < / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.m2j" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > m2j< / span >
< a href = "#meanas.fdfd.functional.m2j" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > m2j< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > cfdfield_updater_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Utility operator for converting magnetic current < code > M< / code > distribution
into equivalent electric current distribution < code > J< / code > .
For use with e.g. < code > e_full< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > for converting < code > M< / code > to < code > J< / code > ,< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > f(M)< / code > -> < code > J< / code > < / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.e_tfsf_source" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_tfsf_source< / span >
< a href = "#meanas.fdfd.functional.e_tfsf_source" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_tfsf_source< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > TF_region< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > fdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > cfdfield_updater_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator that turns an E-field distribution into a total-field/scattered-field
(TFSF) source.< / p >
< p > If < code > A< / code > is the full wave operator from < code > e_full(...)< / code > and < code > Q< / code > is the diagonal
mask selecting the total-field region, then the TFSF source is the commutator< / p >
< div class = "arithmatex" > \[
\frac{A Q - Q A}{-i \omega} E.
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > This vanishes in the interior of the total-field and scattered-field regions
and is supported only at their shared boundary, where the mask discontinuity
makes < code > A< / code > and < code > Q< / code > fail to commute. The returned current is therefore the
distributed source needed to inject the desired total field without also
forcing the scattered-field region.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > TF_region< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > mask which is set to 1 in the total-field region, and 0 elsewhere
(i.e. in the scattered-field region).
Should have the same shape as the simulation grid, e.g. < code > epsilon[0].shape< / code > .< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dielectric constant distribution< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " fdfield (meanas.fdmath.fdfield)" href = "../fdmath/#meanas.fdmath.types.fdfield" > fdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > which takes an E field and returns a current distribution,< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " cfdfield_updater_t
module-attribute
(meanas.fdmath.cfdfield_updater_t)" href="../fdmath/#meanas.fdmath.types.cfdfield_updater_t">cfdfield_updater_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > f(E)< / code > -> < code > J< / code > < / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.functional.poynting_e_cross_h" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > poynting_e_cross_h< / span >
< a href = "#meanas.fdfd.functional.poynting_e_cross_h" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > poynting_e_cross_h< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > Callable< / span > < span class = "p" > [[< / span > < span class = "n" > cfdfield< / span > < span class = "p" > ,< / span > < span class = "n" > cfdfield< / span > < span class = "p" > ],< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Generates a function that takes the single-frequency < code > E< / code > and < code > H< / code > fields
and calculates the cross product < code > E< / code > x < code > H< / code > = < span class = "arithmatex" > \(E \times H\)< / span > as required
for the Poynting vector, < span class = "arithmatex" > \(S = E \times H\)< / span > .< / p >
< p > On the Yee grid, the electric and magnetic components are not stored at the
same locations. This helper therefore applies the same one-cell electric-field
shifts used by the sparse < code > operators.poynting_e_cross(...)< / code > construction so
that the discrete cross product matches the face-centered energy flux used in
< code > meanas.fdtd.energy.poynting(...)< / code > .< / p >
< details class = "note" open >
< summary > Note< / summary >
< p > This function also shifts the input < code > E< / code > field by one cell as required
for computing the Poynting cross product (see < code > meanas.fdfd< / code > module docs).< / p >
< / details >
< details class = "note" open >
< summary > Note< / summary >
< p > If < code > E< / code > and < code > H< / code > are peak amplitudes as assumed elsewhere in this code,
the time-average of the poynting vector is < code > < S> = Re(S)/2 = Re(E x H*) / 2< / code > .
The factor of < code > 1/2< / code > can be omitted if root-mean-square quantities are used
instead.< / p >
< / details >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "collections.abc.Callable" > Callable< / span > [[< a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > , < a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > ], < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Function < code > f< / code > that returns the staggered-grid cross product < code > E \times H< / code > .< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "collections.abc.Callable" > Callable< / span > [[< a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > , < a class = "autorefs autorefs-internal" title = " cfdfield (meanas.fdmath.cfdfield)" href = "../fdmath/#meanas.fdmath.types.cfdfield" > cfdfield< / a > ], < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > For time-average power, call it as < code > f(E, H.conj())< / code > and take < code > Re(...) / 2< / code > .< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd.operators" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd.operators< / span >
< a href = "#meanas.fdfd.operators" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Sparse matrix operators for use with electromagnetic wave equations.< / p >
< p > These functions return sparse-matrix (< code > scipy.sparse.sparray< / code > ) representations of
a variety of operators, intended for use with E and H fields vectorized using the
< code > meanas.fdmath.vectorization.vec()< / code > and < code > meanas.fdmath.vectorization.unvec()< / code > functions.< / p >
< p > E- and H-field values are defined on a Yee cell; < code > epsilon< / code > values should be calculated for
cells centered at each E component (< code > mu< / code > at each H component).< / p >
< p > Many of these functions require a < code > dxes< / code > parameter, of type < code > dx_lists_t< / code > ; see
the < code > meanas.fdmath.types< / code > submodule for details.< / p >
< p > The following operators are included:< / p >
< ul >
< li > E-only wave operator< / li >
< li > H-only wave operator< / li >
< li > EH wave operator< / li >
< li > Curl for use with E, H fields< / li >
< li > E to H conversion< / li >
< li > M to J conversion< / li >
< li > Poynting cross products< / li >
< li > Circular shifts< / li >
< li > Discrete derivatives< / li >
< li > Averaging operators< / li >
< li > Cross product matrices< / li >
< / ul >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.e_full" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_full< / span >
< a href = "#meanas.fdfd.operators.e_full" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_full< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "n" > vcfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > pec< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > pmc< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Wave operator
2026-04-19 16:40:30 -07:00
< div class = "arithmatex" > \[ \nabla \times (\frac{1}{\mu} \nabla \times) - \Omega^2 \epsilon \]< / div >
< / p >
2026-04-19 00:22:42 -07:00
< div class = "highlight" > < pre > < span > < / span > < code > del x (1/mu * del x) - omega**2 * epsilon
< / code > < / pre > < / div >
< p > for use with the E-field, with wave equation
2026-04-19 16:40:30 -07:00
< div class = "arithmatex" > \[ (\nabla \times (\frac{1}{\mu} \nabla \times) - \Omega^2 \epsilon) E = -\imath \omega J \]< / div >
< / p >
2026-04-19 00:22:42 -07:00
< div class = "highlight" > < pre > < span > < / span > < code > (del x (1/mu * del x) - omega**2 * epsilon) E = -i * omega * J
< / code > < / pre > < / div >
< p > To make this matrix symmetric, use the preconditioners from < code > e_full_preconditioners()< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | < a class = "autorefs autorefs-internal" title = " vcfdfield (meanas.fdmath.vcfdfield)" href = "../fdmath/#meanas.fdmath.types.vcfdfield" > vcfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere).< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pec< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PEC cells. Any cells where < code > pec != 0< / code > are interpreted
as containing a perfect electrical conductor (PEC).
The PEC is applied per-field-component (i.e. < code > pec.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pmc< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PMC cells. Any cells where < code > pmc != 0< / code > are interpreted
as containing a perfect magnetic conductor (PMC).
The PMC is applied per-field-component (i.e. < code > pmc.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix containing the wave operator.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.e_full_preconditioners" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_full_preconditioners< / span >
< a href = "#meanas.fdfd.operators.e_full_preconditioners" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_full_preconditioners< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > tuple< / span > < span class = "p" > [< / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span > < span class = "p" > ,< / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Left and right preconditioners < code > (Pl, Pr)< / code > for symmetrizing the < code > e_full< / code > wave operator.< / p >
< p > The preconditioned matrix < code > A_symm = (Pl @ A @ Pr)< / code > is complex-symmetric
(non-Hermitian unless there is no loss or PMLs).< / p >
< p > The preconditioner matrices are diagonal and complex, with < code > Pr = 1 / Pl< / code > < / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "tuple" > tuple< / span > [< span title = "scipy.sparse.sparray" > sparray< / span > , < span title = "scipy.sparse.sparray" > sparray< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Preconditioner matrices < code > (Pl, Pr)< / code > .< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.h_full" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > h_full< / span >
< a href = "#meanas.fdfd.operators.h_full" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > h_full< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > pec< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > pmc< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Wave operator
2026-04-19 16:40:30 -07:00
< div class = "arithmatex" > \[ \nabla \times (\frac{1}{\epsilon} \nabla \times) - \omega^2 \mu \]< / div >
< / p >
2026-04-19 00:22:42 -07:00
< div class = "highlight" > < pre > < span > < / span > < code > del x (1/epsilon * del x) - omega**2 * mu
< / code > < / pre > < / div >
< p > for use with the H-field, with wave equation
2026-04-19 16:40:30 -07:00
< div class = "arithmatex" > \[ (\nabla \times (\frac{1}{\epsilon} \nabla \times) - \omega^2 \mu) E = \imath \omega M \]< / div >
< / p >
2026-04-19 00:22:42 -07:00
< div class = "highlight" > < pre > < span > < / span > < code > (del x (1/epsilon * del x) - omega**2 * mu) E = i * omega * M
< / code > < / pre > < / div >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pec< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PEC cells. Any cells where < code > pec != 0< / code > are interpreted
as containing a perfect electrical conductor (PEC).
The PEC is applied per-field-component (i.e. < code > pec.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pmc< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PMC cells. Any cells where < code > pmc != 0< / code > are interpreted
as containing a perfect magnetic conductor (PMC).
The PMC is applied per-field-component (i.e. < code > pmc.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix containing the wave operator.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.eh_full" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > eh_full< / span >
< a href = "#meanas.fdfd.operators.eh_full" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > eh_full< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > pec< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > pmc< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Wave operator for < code > [E, H]< / code > field representation. This operator implements Maxwell's
2026-04-19 16:40:30 -07:00
equations without cancelling out either E or H. The operator is< / p >
< div class = "arithmatex" > \[
\begin{bmatrix}
-\imath \omega \epsilon & \nabla \times \\
\nabla \times & \imath \omega \mu
\end{bmatrix}
\]< / div >
2026-04-19 00:22:42 -07:00
< div class = "highlight" > < pre > < span > < / span > < code > [[-i * omega * epsilon, del x ],
[del x, i * omega * mu]]
< / code > < / pre > < / div >
2026-04-19 16:40:30 -07:00
< p > for use with a field vector of the form < code > cat(vec(E), vec(H))< / code > :< / p >
< div class = "arithmatex" > \[
\begin{bmatrix}
-\imath \omega \epsilon & \nabla \times \\
\nabla \times & \imath \omega \mu
2026-04-19 00:22:42 -07:00
\end{bmatrix}
2026-04-19 16:40:30 -07:00
\begin{bmatrix} E \\
2026-04-19 00:22:42 -07:00
H
\end{bmatrix}
2026-04-19 16:40:30 -07:00
= \begin{bmatrix} J \\
2026-04-19 00:22:42 -07:00
-M
2026-04-19 16:40:30 -07:00
\end{bmatrix}
\]< / div >
2026-04-19 00:22:42 -07:00
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pec< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PEC cells. Any cells where < code > pec != 0< / code > are interpreted
as containing a perfect electrical conductor (PEC).
The PEC is applied per-field-component (i.e. < code > pec.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pmc< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PMC cells. Any cells where < code > pmc != 0< / code > are interpreted
as containing a perfect magnetic conductor (PMC).
The PMC is applied per-field-component (i.e. < code > pmc.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix containing the wave operator.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.e2h" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e2h< / span >
< a href = "#meanas.fdfd.operators.e2h" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e2h< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > pmc< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Utility operator for converting the E field into the H field.
For use with < code > e_full()< / code > -- assumes that there is no magnetic current M.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pmc< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized mask specifying PMC cells. Any cells where < code > pmc != 0< / code > are interpreted
as containing a perfect magnetic conductor (PMC).
The PMC is applied per-field-component (i.e. < code > pmc.size == epsilon.size< / code > )< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix for converting E to H.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.m2j" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > m2j< / span >
< a href = "#meanas.fdfd.operators.m2j" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > m2j< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator for converting a magnetic current M into an electric current J.
For use with eg. < code > e_full()< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix for converting M to J.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.poynting_e_cross" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > poynting_e_cross< / span >
< a href = "#meanas.fdfd.operators.poynting_e_cross" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > poynting_e_cross< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > e< / span > < span class = "p" > :< / span > < span class = "n" > vcfdfield< / span > < span class = "p" > ,< / span > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator for computing the staggered-grid < code > (E \times)< / code > part of the Poynting vector.< / p >
< p > On the Yee grid the E and H components live on different edges, so the
electric field must be shifted by one cell in the appropriate direction
before forming the discrete cross product. This sparse operator encodes that
shifted cross product directly and is the matrix equivalent of
< code > functional.poynting_e_cross_h(...)< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > e< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vcfdfield (meanas.fdmath.vcfdfield)" href = "../fdmath/#meanas.fdmath.types.vcfdfield" > vcfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized E-field for the ExH cross product< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix containing the < code > (E \times)< / code > part of the staggered Poynting< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > cross product.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.poynting_h_cross" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > poynting_h_cross< / span >
< a href = "#meanas.fdfd.operators.poynting_h_cross" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > poynting_h_cross< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > h< / span > < span class = "p" > :< / span > < span class = "n" > vcfdfield< / span > < span class = "p" > ,< / span > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator for computing the staggered-grid < code > (H \times)< / code > part of the Poynting vector.< / p >
< p > Together with < code > poynting_e_cross(...)< / code > , this provides the matrix form of the
Yee-grid cross product used in the flux helpers. The two are related by the
usual antisymmetry of the cross product,< / p >
< div class = "arithmatex" > \[
H \times E = -(E \times H),
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > once the same staggered field placement is used on both sides.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > h< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vcfdfield (meanas.fdmath.vcfdfield)" href = "../fdmath/#meanas.fdmath.types.vcfdfield" > vcfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized H-field for the HxE cross product< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix containing the < code > (H \times)< / code > part of the staggered Poynting< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > cross product.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.e_tfsf_source" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_tfsf_source< / span >
< a href = "#meanas.fdfd.operators.e_tfsf_source" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_tfsf_source< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > TF_region< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator that turns a desired E-field distribution into a
total-field/scattered-field (TFSF) source.< / p >
< p > Let < code > A< / code > be the full wave operator from < code > e_full(...)< / code > , and let
< code > Q = \mathrm{diag}(TF_region)< / code > be the projector onto the total-field region.
Then the TFSF current operator is the commutator< / p >
< div class = "arithmatex" > \[
\frac{A Q - Q A}{-i \omega}.
\]< / div >
2026-04-19 16:40:30 -07:00
2026-04-19 00:22:42 -07:00
< p > Inside regions where < code > Q< / code > is locally constant, < code > A< / code > and < code > Q< / code > commute and the
source vanishes. Only cells at the TF/SF boundary contribute nonzero current,
which is exactly the desired distributed source for injecting the chosen
field into the total-field region without directly forcing the
scattered-field region.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > TF_region< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Mask, which is set to 1 inside the total-field region and 0 in the
scattered-field region< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere).< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix that turns an E-field into a current (J) distribution.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.operators.e_boundary_source" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > e_boundary_source< / span >
< a href = "#meanas.fdfd.operators.e_boundary_source" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > e_boundary_source< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > mask< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > periodic_mask_edges< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > sparse< / span > < span class = "o" > .< / span > < span class = "n" > sparray< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Operator that turns an E-field distrubtion into a current (J) distribution
along the edges (external and internal) of the provided mask. This is just an
< code > e_tfsf_source()< / code > with an additional masking step.< / p >
< p > Equivalently, this helper first constructs the TFSF commutator source for the
full mask and then zeroes out all cells except the mask boundary. The
boundary is defined as the set of cells whose mask value changes under a
one-cell shift in any Cartesian direction. With < code > periodic_mask_edges=False< / code >
the shifts mirror at the domain boundary; with < code > True< / code > they wrap periodically.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > mask< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > The current distribution is generated at the edges of the mask,
i.e. any points where shifting the mask by one cell in any direction
would change its value.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency of the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized dielectric constant< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Vectorized magnetic permeability (default 1 everywhere).< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "scipy.sparse.sparray" > sparray< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Sparse matrix that turns an E-field into a current (J) distribution.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd.solvers" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd.solvers< / span >
< a href = "#meanas.fdfd.solvers" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Solvers and solver interface for FDFD problems.< / p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.solvers.generic" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > generic< / span >
< a href = "#meanas.fdfd.solvers.generic" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > generic< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > complex< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "n" > dx_lists_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > J< / span > < span class = "p" > :< / span > < span class = "n" > vcfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > epsilon< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > mu< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "o" > *< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "n" > pec< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" > < / a > < span class = "n" > pmc< / span > < span class = "p" > :< / span > < span class = "n" > vfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-10" name = "__codelineno-0-10" href = "#__codelineno-0-10" > < / a > < span class = "n" > adjoint< / span > < span class = "p" > :< / span > < span class = "nb" > bool< / span > < span class = "o" > =< / span > < span class = "kc" > False< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-11" name = "__codelineno-0-11" href = "#__codelineno-0-11" > < / a > < span class = "n" > matrix_solver< / span > < span class = "p" > :< / span > < span class = "n" > Callable< / span > < span class = "p" > [< / span > < span class = "o" > ...< / span > < span class = "p" > ,< / span > < span class = "n" > ArrayLike< / span > < span class = "p" > ]< / span > < span class = "o" > =< / span > < span class = "n" > _scipy_qmr< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-12" name = "__codelineno-0-12" href = "#__codelineno-0-12" > < / a > < span class = "n" > matrix_solver_opts< / span > < span class = "p" > :< / span > < span class = "nb" > dict< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "n" > Any< / span > < span class = "p" > ]< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-13" name = "__codelineno-0-13" href = "#__codelineno-0-13" > < / a > < span class = "n" > E_guess< / span > < span class = "p" > :< / span > < span class = "n" > vcfdfield< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-14" name = "__codelineno-0-14" href = "#__codelineno-0-14" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > vcfdfield_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Conjugate gradient FDFD solver using CSR sparse matrices.< / p >
< p > All ndarray arguments should be 1D arrays, as returned by < code > meanas.fdmath.vectorization.vec()< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "complex" > complex< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Complex frequency to solve at.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " dx_lists_t
module-attribute
(meanas.fdmath.dx_lists_t)" href="../fdmath/#meanas.fdmath.types.dx_lists_t">dx_lists_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > [[dx_e, dy_e, dz_e], [dx_h, dy_h, dz_h]]< / code > (complex cell sizes) as
discussed in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > J< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vcfdfield (meanas.fdmath.vcfdfield)" href = "../fdmath/#meanas.fdmath.types.vcfdfield" > vcfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Electric current distribution (at E-field locations)< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dielectric constant distribution (at E-field locations)< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > mu< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Magnetic permeability distribution (at H-field locations)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pec< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Perfect electric conductor distribution
(at E-field locations; non-zero value indicates PEC is present)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > pmc< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vfdfield (meanas.fdmath.vfdfield)" href = "../fdmath/#meanas.fdmath.types.vfdfield" > vfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Perfect magnetic conductor distribution
(at H-field locations; non-zero value indicates PMC is present)< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > adjoint< / code >
< / td >
< td >
< code > < span title = "bool" > bool< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > If true, solves the adjoint problem.< / p >
< / div >
< / td >
< td >
< code > False< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > matrix_solver< / code >
< / td >
< td >
< code > < span title = "collections.abc.Callable" > Callable< / span > [..., < span title = "numpy.typing.ArrayLike" > ArrayLike< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Called as < code > matrix_solver(A, b, **matrix_solver_opts) -> x< / code > ,
where < code > A< / code > : < code > scipy.sparse.csr_array< / code > ;
< code > b< / code > : < code > ArrayLike< / code > ;
< code > x< / code > : < code > ArrayLike< / code > ;
Default is a wrapped version of < code > scipy.sparse.linalg.qmr()< / code >
which doesn't return convergence info and logs the residual
every 100 iterations.< / p >
< / div >
< / td >
< td >
< code > < span title = "meanas.fdfd.solvers._scipy_qmr" > _scipy_qmr< / span > < / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > matrix_solver_opts< / code >
< / td >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ] | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Passed as kwargs to < code > matrix_solver(...)< / code > < / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > E_guess< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " vcfdfield (meanas.fdmath.vcfdfield)" href = "../fdmath/#meanas.fdmath.types.vcfdfield" > vcfdfield< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Guess at the solution E-field. < code > matrix_solver< / code > must accept an
< code > x0< / code > argument with the same purpose.< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "meanas.fdmath.vcfdfield_t" > vcfdfield_t< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > E-field which solves the system.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd.scpml" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd.scpml< / span >
< a href = "#meanas.fdfd.scpml" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Functions for creating stretched coordinate perfectly matched layer (PML) absorbers.< / p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-attribute" >
< h3 id = "meanas.fdfd.scpml.s_function_t" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-attribute" > < / code > < span class = "doc doc-object-name doc-attribute-name" > s_function_t< / span >
< span class = "doc doc-labels" >
< small class = "doc doc-label doc-label-module-attribute" > < code > module-attribute< / code > < / small >
< / span >
< a href = "#meanas.fdfd.scpml.s_function_t" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "n" > s_function_t< / span > < span class = "o" > =< / span > < span class = "n" > Callable< / span > < span class = "p" > [< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "p" > [< / span > < span class = "n" > NDArray< / span > < span class = "p" > [< / span > < span class = "n" > float64< / span > < span class = "p" > ]],< / span > < span class = "n" > NDArray< / span > < span class = "p" > [< / span > < span class = "n" > float64< / span > < span class = "p" > ]< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Typedef for s-functions, see < code > prepare_s_function()< / code > < / p >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.scpml.prepare_s_function" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > prepare_s_function< / span >
< a href = "#meanas.fdfd.scpml.prepare_s_function" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > prepare_s_function< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > ln_R< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "o" > =< / span > < span class = "o" > -< / span > < span class = "mi" > 16< / span > < span class = "p" > ,< / span > < span class = "n" > m< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "o" > =< / span > < span class = "mi" > 4< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "n" > s_function_t< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Create an s_function to pass to the SCPML functions. This is used when you would like to
customize the PML parameters.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > ln_R< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Natural logarithm of the desired reflectance< / p >
< / div >
< / td >
< td >
< code > -16< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > m< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Polynomial order for the PML (imaginary part increases as distance ** m)< / p >
< / div >
< / td >
< td >
< code > 4< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " s_function_t
module-attribute
(meanas.fdfd.scpml.s_function_t)" href="#meanas.fdfd.scpml.s_function_t">s_function_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > An s_function, which takes an ndarray (distances) and returns an ndarray (complex part< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " s_function_t
module-attribute
(meanas.fdfd.scpml.s_function_t)" href="#meanas.fdfd.scpml.s_function_t">s_function_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > of the cell width; needs to be divided by < code > sqrt(epilon_effective) * real(omega))< / code > < / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < a class = "autorefs autorefs-internal" title = " s_function_t
module-attribute
(meanas.fdfd.scpml.s_function_t)" href="#meanas.fdfd.scpml.s_function_t">s_function_t< / a > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > before use.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.scpml.uniform_grid_scpml" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > uniform_grid_scpml< / span >
< a href = "#meanas.fdfd.scpml.uniform_grid_scpml" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > uniform_grid_scpml< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > shape< / span > < span class = "p" > :< / span > < span class = "n" > Sequence< / span > < span class = "p" > [< / span > < span class = "nb" > int< / span > < span class = "p" > ],< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > thicknesses< / span > < span class = "p" > :< / span > < span class = "n" > Sequence< / span > < span class = "p" > [< / span > < span class = "nb" > int< / span > < span class = "p" > ],< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > epsilon_effective< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "o" > =< / span > < span class = "mf" > 1.0< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > s_function< / span > < span class = "p" > :< / span > < span class = "n" > s_function_t< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "n" > NDArray< / span > < span class = "p" > [< / span > < span class = "n" > numpy< / span > < span class = "o" > .< / span > < span class = "n" > float64< / span > < span class = "p" > ]]]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Create dx arrays for a uniform grid with a cell width of 1 and a pml.< / p >
< p > If you want something more fine-grained, check out < code > stretch_with_scpml(...)< / code > .< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > shape< / code >
< / td >
< td >
< code > < span title = "collections.abc.Sequence" > Sequence< / span > [< span title = "int" > int< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Shape of the grid, including the PMLs (which are 2*thicknesses thick)< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > thicknesses< / code >
< / td >
< td >
< code > < span title = "collections.abc.Sequence" > Sequence< / span > [< span title = "int" > int< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > < code > [th_x, th_y, th_z]< / code >
Thickness of the PML in each direction.
Both polarities are added.
Each th_ of pml is applied twice, once on each edge of the grid along the given axis.
< code > th_*< / code > may be zero, in which case no pml is added.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency for the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon_effective< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Effective epsilon of the PML. Match this to the material
at the edge of your grid.
Default 1.< / p >
< / div >
< / td >
< td >
< code > 1.0< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > s_function< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " s_function_t
module-attribute
(meanas.fdfd.scpml.s_function_t)" href="#meanas.fdfd.scpml.s_function_t">s_function_t< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > created by < code > prepare_s_function(...)< / code > , allowing customization of pml parameters.
Default uses < code > prepare_s_function()< / code > with no parameters.< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "list" > list< / span > [< span title = "list" > list< / span > [< span title = "numpy.typing.NDArray" > NDArray< / span > [< span title = "numpy.float64" > float64< / span > ]]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Complex cell widths (dx_lists_mut) as discussed in < code > meanas.fdmath.types< / code > .< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.scpml.stretch_with_scpml" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > stretch_with_scpml< / span >
< a href = "#meanas.fdfd.scpml.stretch_with_scpml" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > stretch_with_scpml< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > dxes< / span > < span class = "p" > :< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "n" > NDArray< / span > < span class = "p" > [< / span > < span class = "n" > float64< / span > < span class = "p" > ]]],< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > axis< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > polarity< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > omega< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > epsilon_effective< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "o" > =< / span > < span class = "mf" > 1.0< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "n" > thickness< / span > < span class = "p" > :< / span > < span class = "nb" > int< / span > < span class = "o" > =< / span > < span class = "mi" > 10< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-8" name = "__codelineno-0-8" href = "#__codelineno-0-8" > < / a > < span class = "n" > s_function< / span > < span class = "p" > :< / span > < span class = "n" > s_function_t< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-9" name = "__codelineno-0-9" href = "#__codelineno-0-9" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "n" > NDArray< / span > < span class = "p" > [< / span > < span class = "n" > numpy< / span > < span class = "o" > .< / span > < span class = "n" > float64< / span > < span class = "p" > ]]]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Stretch dxes to contain a stretched-coordinate PML (SCPML) in one direction along one axis.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > dxes< / code >
< / td >
< td >
< code > < span title = "list" > list< / span > [< span title = "list" > list< / span > [< span title = "numpy.typing.NDArray" > NDArray< / span > [< span title = "numpy.float64" > float64< / span > ]]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Grid parameters < code > [dx_e, dx_h]< / code > as described in < code > meanas.fdmath.types< / code > < / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > axis< / code >
< / td >
< td >
< code > < span title = "int" > int< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > axis to stretch (0=x, 1=y, 2=z)< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > polarity< / code >
< / td >
< td >
< code > < span title = "int" > int< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > direction to stretch (-1 for -ve, +1 for +ve)< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > omega< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Angular frequency for the simulation< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > epsilon_effective< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Effective epsilon of the PML. Match this to the material at the
edge of your grid. Default 1.< / p >
< / div >
< / td >
< td >
< code > 1.0< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > thickness< / code >
< / td >
< td >
< code > < span title = "int" > int< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > number of cells to use for pml (default 10)< / p >
< / div >
< / td >
< td >
< code > 10< / code >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > s_function< / code >
< / td >
< td >
< code > < a class = "autorefs autorefs-internal" title = " s_function_t
module-attribute
(meanas.fdfd.scpml.s_function_t)" href="#meanas.fdfd.scpml.s_function_t">s_function_t< / a > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Created by < code > prepare_s_function(...)< / code > , allowing customization
of pml parameters. Default uses < code > prepare_s_function()< / code > with no parameters.< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "list" > list< / span > [< span title = "list" > list< / span > [< span title = "numpy.typing.NDArray" > NDArray< / span > [< span title = "numpy.float64" > float64< / span > ]]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Complex cell widths (dx_lists_mut) as discussed in < code > meanas.fdmath.types< / code > .< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "list" > list< / span > [< span title = "list" > list< / span > [< span title = "numpy.typing.NDArray" > NDArray< / span > [< span title = "numpy.float64" > float64< / span > ]]]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Multiple calls to this function may be necessary if multiple absorpbing boundaries are needed.< / p >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / div >
< / div >
< div class = "doc doc-object doc-module" >
< h2 id = "meanas.fdfd.farfield" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-module" > < / code > < span class = "doc doc-object-name doc-module-name" > meanas.fdfd.farfield< / span >
< a href = "#meanas.fdfd.farfield" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h2 >
< div class = "doc doc-contents first" >
< p > Functions for performing near-to-farfield transformation (and the reverse).< / p >
< div class = "doc doc-children" >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.farfield.near_to_farfield" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > near_to_farfield< / span >
< a href = "#meanas.fdfd.farfield.near_to_farfield" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > near_to_farfield< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > E_near< / span > < span class = "p" > :< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > H_near< / span > < span class = "p" > :< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > dx< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > dy< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > padded_size< / span > < span class = "p" > :< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "nb" > int< / span > < span class = "p" > ]< / span > < span class = "o" > |< / span > < span class = "nb" > int< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > dict< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "n" > Any< / span > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Compute the farfield, i.e. the distribution of the fields after propagation
through several wavelengths of uniform medium.< / p >
< p > The input fields should be complex phasors.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > E_near< / code >
< / td >
< td >
< code > < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > List of 2 ndarrays containing the 2D phasor field slices for the transverse
E fields (e.g. [Ex, Ey] for calculating the farfield toward the z-direction).< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > H_near< / code >
< / td >
< td >
< code > < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > List of 2 ndarrays containing the 2D phasor field slices for the transverse
H fields (e.g. [Hx, hy] for calculating the farfield towrad the z-direction).< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dx< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Cell size along x-dimension, in units of wavelength.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dy< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Cell size along y-dimension, in units of wavelength.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > padded_size< / code >
< / td >
< td >
< code > < span title = "list" > list< / span > [< span title = "int" > int< / span > ] | < span title = "int" > int< / span > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Shape of the output. A single integer < code > n< / code > will be expanded to < code > (n, n)< / code > .
Powers of 2 are most efficient for FFT computation.
Default is the smallest power of 2 larger than the input, for each axis.< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dict with keys< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > E_far< / code > : Normalized E-field farfield; multiply by
(i k exp(-i k r) / (4 pi r)) to get the actual field value.< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > H_far< / code > : Normalized H-field farfield; multiply by
(i k exp(-i k r) / (4 pi r)) to get the actual field value.< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > kx< / code > , < code > ky< / code > : Wavevector values corresponding to the x- and y- axes in E_far and H_far,
normalized to wavelength (dimensionless).< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > dkx< / code > , < code > dky< / code > : step size for kx and ky, normalized to wavelength.< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > theta< / code > : arctan2(ky, kx) corresponding to each (kx, ky).
This is the angle in the x-y plane, counterclockwise from above, starting from +x.< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > phi< / code > : arccos(kz / k) corresponding to each (kx, ky).
This is the angle away from +z.< / li >
< / ul >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< div class = "doc doc-object doc-function" >
< h3 id = "meanas.fdfd.farfield.far_to_nearfield" class = "doc doc-heading" >
< code class = "doc-symbol doc-symbol-heading doc-symbol-function" > < / code > < span class = "doc doc-object-name doc-function-name" > far_to_nearfield< / span >
< a href = "#meanas.fdfd.farfield.far_to_nearfield" class = "headerlink" title = "Permanent link" > ¶ < / a > < / h3 >
< div class = "doc-signature highlight" > < pre > < span > < / span > < code > < a id = "__codelineno-0-1" name = "__codelineno-0-1" href = "#__codelineno-0-1" > < / a > < span class = "nf" > far_to_nearfield< / span > < span class = "p" > (< / span >
< a id = "__codelineno-0-2" name = "__codelineno-0-2" href = "#__codelineno-0-2" > < / a > < span class = "n" > E_far< / span > < span class = "p" > :< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-3" name = "__codelineno-0-3" href = "#__codelineno-0-3" > < / a > < span class = "n" > H_far< / span > < span class = "p" > :< / span > < span class = "n" > cfdfield_t< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-4" name = "__codelineno-0-4" href = "#__codelineno-0-4" > < / a > < span class = "n" > dkx< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-5" name = "__codelineno-0-5" href = "#__codelineno-0-5" > < / a > < span class = "n" > dky< / span > < span class = "p" > :< / span > < span class = "nb" > float< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-6" name = "__codelineno-0-6" href = "#__codelineno-0-6" > < / a > < span class = "n" > padded_size< / span > < span class = "p" > :< / span > < span class = "nb" > list< / span > < span class = "p" > [< / span > < span class = "nb" > int< / span > < span class = "p" > ]< / span > < span class = "o" > |< / span > < span class = "nb" > int< / span > < span class = "o" > |< / span > < span class = "kc" > None< / span > < span class = "o" > =< / span > < span class = "kc" > None< / span > < span class = "p" > ,< / span >
< a id = "__codelineno-0-7" name = "__codelineno-0-7" href = "#__codelineno-0-7" > < / a > < span class = "p" > )< / span > < span class = "o" > -> < / span > < span class = "nb" > dict< / span > < span class = "p" > [< / span > < span class = "nb" > str< / span > < span class = "p" > ,< / span > < span class = "n" > Any< / span > < span class = "p" > ]< / span >
< / code > < / pre > < / div >
< div class = "doc doc-contents " >
< p > Compute the farfield, i.e. the distribution of the fields after propagation
through several wavelengths of uniform medium.< / p >
< p > The input fields should be complex phasors.< / p >
< p > < span class = "doc-section-title" > Parameters:< / span > < / p >
< table >
< thead >
< tr >
< th > Name< / th >
< th > Type< / th >
< th > Description< / th >
< th > Default< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > E_far< / code >
< / td >
< td >
< code > < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > List of 2 ndarrays containing the 2D phasor field slices for the transverse
E fields (e.g. [Ex, Ey] for calculating the nearfield toward the z-direction).
Fields should be normalized so that
E_far = E_far_actual / (i k exp(-i k r) / (4 pi r))< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > H_far< / code >
< / td >
< td >
< code > < span title = "meanas.fdmath.cfdfield_t" > cfdfield_t< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > List of 2 ndarrays containing the 2D phasor field slices for the transverse
H fields (e.g. [Hx, hy] for calculating the nearfield toward the z-direction).
Fields should be normalized so that
H_far = H_far_actual / (i k exp(-i k r) / (4 pi r))< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dkx< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > kx discretization, in units of wavelength.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > dky< / code >
< / td >
< td >
< code > < span title = "float" > float< / span > < / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > ky discretization, in units of wavelength.< / p >
< / div >
< / td >
< td >
< em > required< / em >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > padded_size< / code >
< / td >
< td >
< code > < span title = "list" > list< / span > [< span title = "int" > int< / span > ] | < span title = "int" > int< / span > | None< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Shape of the output. A single integer < code > n< / code > will be expanded to < code > (n, n)< / code > .
Powers of 2 are most efficient for FFT computation.
Default is the smallest power of 2 larger than the input, for each axis.< / p >
< / div >
< / td >
< td >
< code > None< / code >
< / td >
< / tr >
< / tbody >
< / table >
< p > < span class = "doc-section-title" > Returns:< / span > < / p >
< table >
< thead >
< tr >
< th > Type< / th >
< th > Description< / th >
< / tr >
< / thead >
< tbody >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< p > Dict with keys< / p >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > E< / code > : E-field nearfield< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > H< / code > : H-field nearfield< / li >
< / ul >
< / div >
< / td >
< / tr >
< tr class = "doc-section-item" >
< td >
< code > < span title = "dict" > dict< / span > [< span title = "str" > str< / span > , < span title = "typing.Any" > Any< / span > ]< / code >
< / td >
< td >
< div class = "doc-md-description" >
< ul >
< li > < code > dx< / code > , < code > dy< / code > : spatial discretization, normalized to wavelength (dimensionless)< / li >
< / ul >
< / div >
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< / div >
< / div >
< / div >
< / div >
< / article >
< / div >
< script > var target = document . getElementById ( location . hash . slice ( 1 ) ) ; target && target . name && ( target . checked = target . name . startsWith ( "__tabbed_" ) ) < / script >
< / div >
< button type = "button" class = "md-top md-icon" data-md-component = "top" hidden >
< svg xmlns = "http://www.w3.org/2000/svg" viewBox = "0 0 24 24" > < path d = "M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z" / > < / svg >
Back to top
< / button >
< / main >
< footer class = "md-footer" >
< div class = "md-footer-meta md-typeset" >
< div class = "md-footer-meta__inner md-grid" >
< div class = "md-copyright" >
Made with
< a href = "https://squidfunk.github.io/mkdocs-material/" target = "_blank" rel = "noopener" >
Material for MkDocs
< / a >
< / div >
< / div >
< / div >
< / footer >
< / div >
< div class = "md-dialog" data-md-component = "dialog" >
< div class = "md-dialog__inner md-typeset" > < / div >
< / div >
< script id = "__config" type = "application/json" > { "annotate" : null , "base" : "../.." , "features" : [ "navigation.indexes" , "navigation.sections" , "navigation.top" , "content.code.copy" , "toc.follow" ] , "search" : "../../assets/javascripts/workers/search.2c215733.min.js" , "tags" : null , "translations" : { "clipboard.copied" : "Copied to clipboard" , "clipboard.copy" : "Copy to clipboard" , "search.result.more.one" : "1 more on this page" , "search.result.more.other" : "# more on this page" , "search.result.none" : "No matching documents" , "search.result.one" : "1 matching document" , "search.result.other" : "# matching documents" , "search.result.placeholder" : "Type to start searching" , "search.result.term.missing" : "Missing" , "select.version" : "Select version" } , "version" : null } < / script >
< script src = "../../assets/javascripts/bundle.79ae519e.min.js" > < / script >
< script src = "../../js/print-site.js" > < / script >
< script src = "../../javascripts/mathjax.js" > < / script >
< script src = "../../assets/vendor/mathjax/startup.js" > < / script >
< / body >
< / html >