tem_miescatter_module Module

This module gathers the definition of the analytical solution by scattering of an electromagnetic wave at a dielectric sphere/cylinder. The solution is given by means of Mie-series. The solution is given in: Cai, W., & Deng, S. (2003). An upwinding embedded boundary method for Maxwell's equations in media with material interfaces: 2D case. Journal of Computational Physics, 190(1), 159-183. doi:10.1016/S0021-9991(03)00269-9


Uses

  • module~~tem_miescatter_module~2~~UsesGraph module~tem_miescatter_module~2 tem_miescatter_module aot_table_module aot_table_module module~tem_miescatter_module~2->aot_table_module aotus_module aotus_module module~tem_miescatter_module~2->aotus_module flu_binding flu_binding module~tem_miescatter_module~2->flu_binding module~env_module env_module module~tem_miescatter_module~2->module~env_module module~tem_aux_module tem_aux_module module~tem_miescatter_module~2->module~tem_aux_module module~tem_logging_module tem_logging_module module~tem_miescatter_module~2->module~tem_logging_module module~tem_param_module tem_param_module module~tem_miescatter_module~2->module~tem_param_module module~env_module->aotus_module module~env_module->flu_binding iso_fortran_env iso_fortran_env module~env_module->iso_fortran_env mpi mpi module~env_module->mpi module~tem_aux_module->aot_table_module module~tem_aux_module->aotus_module module~tem_aux_module->flu_binding module~tem_aux_module->module~env_module module~tem_aux_module->module~tem_logging_module module~soi_revision_module soi_revision_module module~tem_aux_module->module~soi_revision_module module~tem_comm_env_module tem_comm_env_module module~tem_aux_module->module~tem_comm_env_module module~tem_lua_requires_module tem_lua_requires_module module~tem_aux_module->module~tem_lua_requires_module module~tem_tools_module tem_tools_module module~tem_aux_module->module~tem_tools_module module~tem_aux_module->mpi module~tem_logging_module->aot_table_module module~tem_logging_module->aotus_module module~tem_logging_module->module~env_module module~tem_param_module->module~env_module module~tem_comm_env_module->mpi module~tem_lua_requires_module->aot_table_module module~tem_lua_requires_module->aotus_module module~tem_lua_requires_module->flu_binding module~tem_lua_requires_module->module~env_module iso_c_binding iso_c_binding module~tem_lua_requires_module->iso_c_binding module~tem_tools_module->module~env_module

Used by

  • module~~tem_miescatter_module~2~~UsedByGraph module~tem_miescatter_module~2 tem_miescatter_module module~tem_spacetime_fun_module tem_spacetime_fun_module module~tem_spacetime_fun_module->module~tem_miescatter_module~2 module~tem_spatial_module tem_spatial_module module~tem_spacetime_fun_module->module~tem_spatial_module module~tem_spatial_module->module~tem_miescatter_module~2 module~tem_bc_module tem_bc_module module~tem_bc_module->module~tem_spacetime_fun_module module~tem_varmap_module tem_varMap_module module~tem_bc_module->module~tem_varmap_module module~tem_derived_module tem_derived_module module~tem_derived_module->module~tem_spacetime_fun_module module~tem_spacetime_var_module tem_spacetime_var_module module~tem_derived_module->module~tem_spacetime_var_module module~tem_variable_module tem_variable_module module~tem_derived_module->module~tem_variable_module module~tem_operation_var_module tem_operation_var_module module~tem_derived_module->module~tem_operation_var_module module~tem_face_module tem_face_module module~tem_face_module->module~tem_spacetime_fun_module module~tem_ini_condition_module tem_ini_condition_module module~tem_ini_condition_module->module~tem_spatial_module module~tem_depend_module tem_depend_module module~tem_ini_condition_module->module~tem_depend_module module~tem_spacetime_var_module->module~tem_spacetime_fun_module module~tem_spacetime_var_module->module~tem_spatial_module module~tem_spacetime_var_module->module~tem_variable_module module~tem_surfacedata_module tem_surfaceData_module module~tem_surfacedata_module->module~tem_spacetime_fun_module module~tem_variable_module->module~tem_spacetime_fun_module module~tem_varmap_module->module~tem_spacetime_fun_module module~tem_varmap_module->module~tem_spacetime_var_module module~hvs_output_module hvs_output_module module~hvs_output_module->module~tem_varmap_module module~tem_restart_module tem_restart_module module~hvs_output_module->module~tem_restart_module module~tem_convergence_module tem_convergence_module module~tem_convergence_module->module~tem_varmap_module module~tem_depend_module->module~tem_varmap_module module~tem_operation_var_module->module~tem_variable_module module~tem_operation_var_module->module~tem_varmap_module module~tem_restart_module->module~tem_varmap_module module~tem_tracking_module tem_tracking_module module~tem_tracking_module->module~tem_varmap_module module~tem_tracking_module->module~hvs_output_module module~tem_abortcriteria_module tem_abortCriteria_module module~tem_abortcriteria_module->module~tem_convergence_module module~tem_general_module tem_general_module module~tem_general_module->module~tem_restart_module module~tem_simcontrol_module tem_simControl_module module~tem_simcontrol_module->module~tem_convergence_module

Interfaces

  • private subroutine tem_load_miescatter(conf, thandle, me)

    load gauss pulse variables to set initial condition

    Arguments

    Type IntentOptional Attributes Name
    type(flu_State) :: conf

    lua state type

    integer, intent(in) :: thandle

    aotus parent handle

    type(tem_miescatter_field_type), intent(out) :: me

    Global gauss pulse data type

  • private subroutine tem_load_miescatter(conf, thandle, me)

    load gauss pulse variables to set initial condition

    Arguments

    Type IntentOptional Attributes Name
    type(flu_State) :: conf

    lua state type

    integer, intent(in) :: thandle

    aotus parent handle

    type(tem_miescatter_field_type), intent(out) :: me

    Global gauss pulse data type

  • private subroutine tem_load_miescatter(conf, thandle, me)

    load gauss pulse variables to set initial condition

    Arguments

    Type IntentOptional Attributes Name
    type(flu_State) :: conf

    lua state type

    integer, intent(in) :: thandle

    aotus parent handle

    type(tem_miescatter_field_type), intent(out) :: me

    Global gauss pulse data type


Derived Types

type, public ::  tem_miescatter_field_type

Parameters of the solution for Mie-Scatter at dielectric cylinder (infinite height in z direction).

Components

Type Visibility Attributes Name Initial
type(tem_miescatter_type), public :: miescatter

Parameter of the geometrical and material setup

type(tem_mieexpansion_type), public :: mieexpansion

The expansion parameters for the scattered solution

type, private ::  tem_miescatter_type

Parameters of the solution for Mie-Scatter at dielectric cylinder (infinite height in z direction)

Components

Type Visibility Attributes Name Initial
real(kind=rk), public :: center(2) = [0.0_rk, 0.0_rk]

The center of the cylinder (in the x-y plane)

real(kind=rk), public :: radius = 1.0_rk

The radius of the cylinder

real(kind=rk), public :: permeability_background = 1.0_rk

Permeability (mu) of the background.

real(kind=rk), public :: permitivity_background = 1.0_rk

Permitivity (epsilon) of the background.

real(kind=rk), public :: permeability_cylinder = 1.0_rk

Permeability (mu) of the cylinder.

real(kind=rk), public :: permitivity_cylinder = 1.0_rk

Permitivity (epsilon) of the cylinder.

real(kind=rk), public :: wavenumber_background

Wave number for the background

real(kind=rk), public :: wavenumber_cylinder

Wave number for the cylinder

real(kind=rk), public :: omega = 2.0_rk*PI*1.0_rk

Angular frequency ( = 2 * pi * f , where f is the original frequency in Hertz)

type, private ::  tem_mieexpansion_type

Expansion data for the Mier scatter solution.

Components

Type Visibility Attributes Name Initial
integer, public :: nCoeffs

The number of expansion coefficients

complex(kind=rk), public, allocatable :: c_tot(:)

Expansion coefficients inside the cylinder

complex(kind=rk), public, allocatable :: c_scat(:)

Expansion coefficients outside the cylinder (for the scattered field)


Functions

public function tem_eval_miescatter_displz(me, coord, time, n) result(res)

Evaluate displacement field (z component) for Mie-Scattering of electromagnetic wave at dielectric cylinder.

Arguments

Type IntentOptional Attributes Name
type(tem_miescatter_field_type), intent(in) :: me

The function to evaluate

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

real(kind=rk), intent(in) :: time

The time to evaluate the function at.

integer, intent(in) :: n

Number of points to evaluate the function for.

Return Value real(kind=rk), (n)

return value of the function

public function tem_eval_miescatter_magnx(me, coord, time, n) result(res)

Evaluate magnetic field (x-component) for Mie-Scattering of electromagnetic wave at dielectric cylinder.

Arguments

Type IntentOptional Attributes Name
type(tem_miescatter_field_type), intent(in) :: me

The function to evaluate

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

real(kind=rk), intent(in) :: time

The time to evaluate the function at.

integer, intent(in) :: n

Number of points to evaluate the function for.

Return Value real(kind=rk), (n)

return value of the function

public function tem_eval_miescatter_magny(me, coord, time, n) result(res)

Evaluate magnetic field (y-component) for Mie-Scattering of electromagnetic wave at dielectric cylinder.

Arguments

Type IntentOptional Attributes Name
type(tem_miescatter_field_type), intent(in) :: me

The function to evaluate

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

real(kind=rk), intent(in) :: time

The time to evaluate the function at.

integer, intent(in) :: n

Number of points to evaluate the function for.

Return Value real(kind=rk), (n)

return value of the function

private function tem_eval_miescatter_magnangular(me, coord, time, n) result(res)

Evaluate magnetizing field (angular-component) for Mie-Scattering of electromagnetic wave at dielectric cylinder.

Arguments

Type IntentOptional Attributes Name
type(tem_miescatter_field_type), intent(in) :: me

The function to evaluate

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

real(kind=rk), intent(in) :: time

The time to evaluate the function at.

integer, intent(in) :: n

Number of points to evaluate the function for.

Return Value real(kind=rk), (n)

return value of the function

private function tem_eval_miescatter_magnradial(me, coord, time, n) result(res)

Evaluate magnetizing field (radial-component) for Mie-Scattering of electromagnetic wave at dielectric cylinder.

Arguments

Type IntentOptional Attributes Name
type(tem_miescatter_field_type), intent(in) :: me

The function to evaluate

real(kind=rk), intent(in) :: coord(n,3)

barycentric Ids of an elements. 1st index goes over number of elements and 2nd index goes over x,y,z coordinates

real(kind=rk), intent(in) :: time

The time to evaluate the function at.

integer, intent(in) :: n

Number of points to evaluate the function for.

Return Value real(kind=rk), (n)

return value of the function

private function cart2polar(x, y) result(polar)

Convert from cartesian coordinates (in the x-y plane) to polar coordinates (radius,angle)

Arguments

Type IntentOptional Attributes Name
real(kind=rk) :: x

X coordinate

real(kind=rk) :: y

Y coordinate

Return Value real(kind=rk), (2)

Polar coordinates, radius (first entry) and angle (second entry)

private function bessel_jn_derivative(n, x) result(der)

Compute derivative for Bessel function of first kind of order n.

Arguments

Type IntentOptional Attributes Name
integer :: n

The order of the function.

real(kind=rk), intent(in) :: x

The evaluation point.

Return Value real(kind=rk)

The function value.

private function hankel2_n_derivative(n, x) result(der)

Compute derivative for Hankel function of second kind of order n.

Arguments

Type IntentOptional Attributes Name
integer :: n

The order of the function.

real(kind=rk), intent(in) :: x

The evaluation point.

Return Value complex(kind=rk)

The function value.

private function hankel2_n(n, x) result(val)

Compute Hankel function of second kind of order n.

Arguments

Type IntentOptional Attributes Name
integer :: n

The order of the function.

real(kind=rk), intent(in) :: x

The evaluation point.

Return Value complex(kind=rk)

The function value.

private function tem_get_ncoeffs_miescat(conf, thandle) result(nCoeffs)

JZ: Currently, we read the number of necessary coefficients from the lua script. However, there are also some automatic ways to estimate the number of coefficients necessary to obtain a certain numerical accuaracy, e.g. in [Wiscombe1980] .

Read more…

Arguments

Type IntentOptional Attributes Name
type(flu_State) :: conf

lua state type

integer, intent(in) :: thandle

aotus parent handle

Return Value integer

The number of coefficients necessary for the Fourier series


Subroutines

private subroutine tem_load_miescatter(conf, thandle, me)

load gauss pulse variables to set initial condition

Arguments

Type IntentOptional Attributes Name
type(flu_State) :: conf

lua state type

integer, intent(in) :: thandle

aotus parent handle

type(tem_miescatter_field_type), intent(out) :: me

Global gauss pulse data type

private subroutine tem_init_data(conf, thandle, miescatter, mieexpansion)

Init the expansion coefficients for the Mie-Scattering.

Arguments

Type IntentOptional Attributes Name
type(flu_State) :: conf

lua state type

integer, intent(in) :: thandle

aotus parent handle

type(tem_miescatter_type), intent(in) :: miescatter

The description of the Mie-Scattering setup.

type(tem_mieexpansion_type), intent(out) :: mieexpansion

The expansion coefficients to be filled