Electromagnetic Analysis Module

Electromagnetic Analysis Module for MMPP

Advanced electromagnetic analysis tools for FMR modes including: - Poynting vector analysis - Radiation patterns - Energy flow visualization - Q-factor analysis - Mode coupling analysis

class mmpp.fft.electromagnetic_analysis.ElectromagneticAnalysisConfig(mu_0=1.25663706127e-06, epsilon_0=8.8541878188e-12, c=299792458.0, gamma=221100.0, far_field_distance=0.001, radiation_theta_points=181, radiation_phi_points=361, figsize=(15, 10), dpi=150, poynting_colormap='cmc.hawaii', radiation_colormap='cmc.tokyo', energy_integration_method='simpson', q_factor_method='energy_decay')[source]

Bases: object

Configuration for electromagnetic analysis.

Parameters:
mu_0: float = 1.25663706127e-06
epsilon_0: float = 8.8541878188e-12
c: float = 299792458.0
gamma: float = 221100.0
far_field_distance: float = 0.001
radiation_theta_points: int = 181
radiation_phi_points: int = 361
figsize: tuple[float, float] = (15, 10)
dpi: int = 150
poynting_colormap: str = 'cmc.hawaii'
radiation_colormap: str = 'cmc.tokyo'
energy_integration_method: str = 'simpson'
q_factor_method: str = 'energy_decay'
__init__(mu_0=1.25663706127e-06, epsilon_0=8.8541878188e-12, c=299792458.0, gamma=221100.0, far_field_distance=0.001, radiation_theta_points=181, radiation_phi_points=361, figsize=(15, 10), dpi=150, poynting_colormap='cmc.hawaii', radiation_colormap='cmc.tokyo', energy_integration_method='simpson', q_factor_method='energy_decay')
Parameters:
class mmpp.fft.electromagnetic_analysis.PoyntingVectorAnalysis(config=None)[source]

Bases: object

Analysis of electromagnetic energy flow using Poynting vector.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize Poynting vector analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_poynting_vector(E_field, H_field)[source]

Compute Poynting vector S = (1/μ₀) * E × H

Return type:

ndarray

Parameters:

E_fieldnp.ndarray

Electric field array with shape (ny, nx, 3)

H_fieldnp.ndarray

Magnetic field array with shape (ny, nx, 3)

Returns:

: poynting_vector : np.ndarray

Poynting vector with shape (ny, nx, 3)

param E_field:

type E_field:

ndarray

param H_field:

type H_field:

ndarray

compute_energy_density(E_field, H_field, epsilon_r=1.0, mu_r=1.0)[source]

Compute electromagnetic energy density.

Return type:

dict[str, ndarray]

Parameters:

E_fieldnp.ndarray

Electric field array

H_fieldnp.ndarray

Magnetic field array

epsilon_rfloat

Relative permittivity

mu_rfloat

Relative permeability

Returns:

: energy_densities : dict

Dictionary with electric, magnetic, and total energy densities

param E_field:

type E_field:

ndarray

param H_field:

type H_field:

ndarray

param epsilon_r:

type epsilon_r:

float

param mu_r:

type mu_r:

float

visualize_energy_flow(poynting_vector, energy_density, extent=None, title='Electromagnetic Energy Flow')[source]

Visualize energy flow using Poynting vector and energy density.

Return type:

Figure

Parameters:

poynting_vectornp.ndarray

Poynting vector array (ny, nx, 3)

energy_densitynp.ndarray

Energy density array (ny, nx)

extenttuple, optional

Spatial extent [x_min, x_max, y_min, y_max]

titlestr

Plot title

Returns:

: fig : plt.Figure

Matplotlib figure

param poynting_vector:

type poynting_vector:

ndarray

param energy_density:

type energy_density:

ndarray

param extent:

type extent:

Optional[tuple[float, float, float, float]]

param title:

type title:

str

class mmpp.fft.electromagnetic_analysis.RadiationPatternAnalysis(config=None)[source]

Bases: object

Analysis of far-field radiation patterns.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize radiation pattern analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_far_field(current_density, spatial_extent, frequency)[source]

Compute far-field radiation pattern from current density.

Return type:

dict[str, ndarray]

Parameters:

current_densitynp.ndarray

Current density array (ny, nx, 3)

spatial_extenttuple

Spatial extent [x_min, x_max, y_min, y_max] in meters

frequencyfloat

Frequency in Hz

Returns:

: far_field : dict

Dictionary with theta, phi arrays and E_theta, E_phi components

param current_density:

type current_density:

ndarray

param spatial_extent:

type spatial_extent:

tuple[float, float, float, float]

param frequency:

type frequency:

float

visualize_radiation_pattern(far_field_data, title='Radiation Pattern')[source]

Visualize 3D radiation pattern.

Return type:

Figure

Parameters:

far_field_datadict

Far-field data from compute_far_field

titlestr

Plot title

Returns:

: fig : plt.Figure

Matplotlib figure

param far_field_data:

type far_field_data:

dict[str, ndarray]

param title:

type title:

str

class mmpp.fft.electromagnetic_analysis.QFactorAnalysis(config=None)[source]

Bases: object

Analysis of quality factor and mode losses.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize Q-factor analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_q_factor_spectral(frequencies, spectrum, peak_freq)[source]

Compute Q-factor from spectral width method.

Return type:

float

Parameters:

frequenciesnp.ndarray

Frequency array

spectrumnp.ndarray

Power spectrum

peak_freqfloat

Peak frequency

Returns:

: q_factor : float

Quality factor

param frequencies:

type frequencies:

ndarray

param spectrum:

type spectrum:

ndarray

param peak_freq:

type peak_freq:

float

compute_mode_lifetime(q_factor, frequency)[source]

Compute mode lifetime from Q-factor.

Return type:

float

Parameters:

q_factorfloat

Quality factor

frequencyfloat

Mode frequency in Hz

Returns:

: lifetime : float

Mode lifetime in seconds

param q_factor:

type q_factor:

float

param frequency:

type frequency:

float

mmpp.fft.electromagnetic_analysis.analyze_electromagnetic_properties(mode_data, config=None)[source]

Comprehensive electromagnetic analysis of FMR mode data.

Return type:

dict[str, Any]

Parameters:

mode_dataFMRModeData

Mode data to analyze

configElectromagneticAnalysisConfig, optional

Analysis configuration

Returns:

: analysis_results : dict

Dictionary containing all analysis results

param config:

type config:

Optional[ElectromagneticAnalysisConfig]

mmpp.fft.electromagnetic_analysis.create_comprehensive_em_report(mode_data, analysis_results, config=None)[source]

Create comprehensive electromagnetic analysis report.

Return type:

Figure

Parameters:

mode_dataFMRModeData

Original mode data

analysis_resultsdict

Results from analyze_electromagnetic_properties

configElectromagneticAnalysisConfig, optional

Configuration

Returns:

: fig : plt.Figure

Comprehensive report figure

param analysis_results:

type analysis_results:

dict[str, Any]

param config:

type config:

Optional[ElectromagneticAnalysisConfig]

Configuration

ElectromagneticAnalysisConfig

class mmpp.fft.electromagnetic_analysis.ElectromagneticAnalysisConfig(mu_0=1.25663706127e-06, epsilon_0=8.8541878188e-12, c=299792458.0, gamma=221100.0, far_field_distance=0.001, radiation_theta_points=181, radiation_phi_points=361, figsize=(15, 10), dpi=150, poynting_colormap='cmc.hawaii', radiation_colormap='cmc.tokyo', energy_integration_method='simpson', q_factor_method='energy_decay')[source]

Bases: object

Configuration for electromagnetic analysis.

Parameters:
mu_0: float = 1.25663706127e-06
epsilon_0: float = 8.8541878188e-12
c: float = 299792458.0
gamma: float = 221100.0
far_field_distance: float = 0.001
radiation_theta_points: int = 181
radiation_phi_points: int = 361
figsize: tuple[float, float] = (15, 10)
dpi: int = 150
poynting_colormap: str = 'cmc.hawaii'
radiation_colormap: str = 'cmc.tokyo'
energy_integration_method: str = 'simpson'
q_factor_method: str = 'energy_decay'
__init__(mu_0=1.25663706127e-06, epsilon_0=8.8541878188e-12, c=299792458.0, gamma=221100.0, far_field_distance=0.001, radiation_theta_points=181, radiation_phi_points=361, figsize=(15, 10), dpi=150, poynting_colormap='cmc.hawaii', radiation_colormap='cmc.tokyo', energy_integration_method='simpson', q_factor_method='energy_decay')
Parameters:

Analysis Classes

PoyntingVectorAnalysis

class mmpp.fft.electromagnetic_analysis.PoyntingVectorAnalysis(config=None)[source]

Bases: object

Analysis of electromagnetic energy flow using Poynting vector.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize Poynting vector analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_poynting_vector(E_field, H_field)[source]

Compute Poynting vector S = (1/μ₀) * E × H

Return type:

ndarray

Parameters:

E_fieldnp.ndarray

Electric field array with shape (ny, nx, 3)

H_fieldnp.ndarray

Magnetic field array with shape (ny, nx, 3)

Returns:

: poynting_vector : np.ndarray

Poynting vector with shape (ny, nx, 3)

param E_field:

type E_field:

ndarray

param H_field:

type H_field:

ndarray

compute_energy_density(E_field, H_field, epsilon_r=1.0, mu_r=1.0)[source]

Compute electromagnetic energy density.

Return type:

dict[str, ndarray]

Parameters:

E_fieldnp.ndarray

Electric field array

H_fieldnp.ndarray

Magnetic field array

epsilon_rfloat

Relative permittivity

mu_rfloat

Relative permeability

Returns:

: energy_densities : dict

Dictionary with electric, magnetic, and total energy densities

param E_field:

type E_field:

ndarray

param H_field:

type H_field:

ndarray

param epsilon_r:

type epsilon_r:

float

param mu_r:

type mu_r:

float

visualize_energy_flow(poynting_vector, energy_density, extent=None, title='Electromagnetic Energy Flow')[source]

Visualize energy flow using Poynting vector and energy density.

Return type:

Figure

Parameters:

poynting_vectornp.ndarray

Poynting vector array (ny, nx, 3)

energy_densitynp.ndarray

Energy density array (ny, nx)

extenttuple, optional

Spatial extent [x_min, x_max, y_min, y_max]

titlestr

Plot title

Returns:

: fig : plt.Figure

Matplotlib figure

param poynting_vector:

type poynting_vector:

ndarray

param energy_density:

type energy_density:

ndarray

param extent:

type extent:

Optional[tuple[float, float, float, float]]

param title:

type title:

str

RadiationPatternAnalysis

class mmpp.fft.electromagnetic_analysis.RadiationPatternAnalysis(config=None)[source]

Bases: object

Analysis of far-field radiation patterns.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize radiation pattern analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_far_field(current_density, spatial_extent, frequency)[source]

Compute far-field radiation pattern from current density.

Return type:

dict[str, ndarray]

Parameters:

current_densitynp.ndarray

Current density array (ny, nx, 3)

spatial_extenttuple

Spatial extent [x_min, x_max, y_min, y_max] in meters

frequencyfloat

Frequency in Hz

Returns:

: far_field : dict

Dictionary with theta, phi arrays and E_theta, E_phi components

param current_density:

type current_density:

ndarray

param spatial_extent:

type spatial_extent:

tuple[float, float, float, float]

param frequency:

type frequency:

float

visualize_radiation_pattern(far_field_data, title='Radiation Pattern')[source]

Visualize 3D radiation pattern.

Return type:

Figure

Parameters:

far_field_datadict

Far-field data from compute_far_field

titlestr

Plot title

Returns:

: fig : plt.Figure

Matplotlib figure

param far_field_data:

type far_field_data:

dict[str, ndarray]

param title:

type title:

str

QFactorAnalysis

class mmpp.fft.electromagnetic_analysis.QFactorAnalysis(config=None)[source]

Bases: object

Analysis of quality factor and mode losses.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

__init__(config=None)[source]

Initialize Q-factor analysis.

Parameters:

config (Optional[ElectromagneticAnalysisConfig])

compute_q_factor_spectral(frequencies, spectrum, peak_freq)[source]

Compute Q-factor from spectral width method.

Return type:

float

Parameters:

frequenciesnp.ndarray

Frequency array

spectrumnp.ndarray

Power spectrum

peak_freqfloat

Peak frequency

Returns:

: q_factor : float

Quality factor

param frequencies:

type frequencies:

ndarray

param spectrum:

type spectrum:

ndarray

param peak_freq:

type peak_freq:

float

compute_mode_lifetime(q_factor, frequency)[source]

Compute mode lifetime from Q-factor.

Return type:

float

Parameters:

q_factorfloat

Quality factor

frequencyfloat

Mode frequency in Hz

Returns:

: lifetime : float

Mode lifetime in seconds

param q_factor:

type q_factor:

float

param frequency:

type frequency:

float

Analysis Functions

mmpp.fft.electromagnetic_analysis.analyze_electromagnetic_properties(mode_data, config=None)[source]

Comprehensive electromagnetic analysis of FMR mode data.

Return type:

dict[str, Any]

Parameters:

mode_dataFMRModeData

Mode data to analyze

configElectromagneticAnalysisConfig, optional

Analysis configuration

Returns:

: analysis_results : dict

Dictionary containing all analysis results

param config:

type config:

Optional[ElectromagneticAnalysisConfig]

mmpp.fft.electromagnetic_analysis.create_comprehensive_em_report(mode_data, analysis_results, config=None)[source]

Create comprehensive electromagnetic analysis report.

Return type:

Figure

Parameters:

mode_dataFMRModeData

Original mode data

analysis_resultsdict

Results from analyze_electromagnetic_properties

configElectromagneticAnalysisConfig, optional

Configuration

Returns:

: fig : plt.Figure

Comprehensive report figure

param analysis_results:

type analysis_results:

dict[str, Any]

param config:

type config:

Optional[ElectromagneticAnalysisConfig]

Usage Examples

Basic Electromagnetic Analysis

import mmpp
from mmpp.fft.electromagnetic_analysis import ElectromagneticAnalyzer

# Load data and get mode
db = mmpp.open('/path/to/data')
result = db.find(solver=3)[0]

# Get mode data at specific frequency
mode_data = result.fft.modes.get_mode(frequency=2.5)

# Create electromagnetic analyzer
analyzer = ElectromagneticAnalyzer()

# Analyze electromagnetic fields
em_results = analyzer.analyze_mode(mode_data)

print(f"Electric energy: {em_results['energy_densities']['electric'].sum():.2e} J/m³")
print(f"Magnetic energy: {em_results['energy_densities']['magnetic'].sum():.2e} J/m³")

Comprehensive Analysis with Visualization

from mmpp.fft.electromagnetic_analysis import comprehensive_electromagnetic_analysis

# Perform full analysis with visualization
analysis_results = comprehensive_electromagnetic_analysis(
    mode_data,
    include_far_field=True,
    include_energy_analysis=True,
    include_visualization=True
)

# Results include:
# - Energy density maps
# - Poynting vector field
# - Far-field radiation patterns
# - Current density analysis

Far-Field Radiation Analysis

# Compute far-field radiation pattern
far_field = analyzer.compute_far_field(
    mode_data.current_density,
    frequency=2.5,
    spatial_extent=mode_data.extent
)

# Visualize radiation pattern
fig = analyzer.visualize_radiation_pattern(
    far_field,
    title="Mode Radiation Pattern at 2.5 GHz"
)