tem_init_data Subroutine

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


Source Code

  subroutine tem_init_data( conf, thandle, miescatter, mieexpansion )
    ! --------------------------------------------------------------------------
    !> lua state type
    type(flu_State) :: conf
    !> aotus parent handle
    integer, intent(in) :: thandle
    !> The description of the Mie-Scattering setup.
    type(tem_miescatter_type), intent(in) :: miescatter
    !> The expansion coefficients to be filled
    type(tem_mieexpansion_type), intent(out) :: mieexpansion
    ! --------------------------------------------------------------------------
    integer :: nCoeffs, n
    ! --------------------------------------------------------------------------

    ! Get the number of expansion coefficients to be used ....
    nCoeffs = tem_get_ncoeffs_miescat(conf,thandle)
    mieexpansion%nCoeffs = nCoeffs

    ! Calculate the expansion coefficients inside the cylinder
    allocate(mieexpansion%c_tot(-nCoeffs:nCoeffs))
    innerLoop: do n = -nCoeffs, nCoeffs

      ! C_n^{tot}
      mieexpansion%c_tot(n)                                                    &
        & = (0.0_rk,1.0_rk)**(-n) *                                            &
        & ( (miescatter%wavenumber_background /                                &
        &               miescatter%permeability_background)                    &
        & * bessel_jn_derivative(n,                                            &
        &               miescatter%wavenumber_background * miescatter%radius)  &
        & * hankel2_n(n,miescatter%wavenumber_background * miescatter%radius)  &
        & - (miescatter%wavenumber_background /                                &
        &               miescatter%permeability_background)                    &
        & * hankel2_n_derivative(n,                                            &
        &               miescatter%wavenumber_background * miescatter%radius)  &
        & * bessel_jn(n,miescatter%wavenumber_background * miescatter%radius)  &
        & )                                                                    &
        & /                                                                    &
        & (                                                                    &
        &   (miescatter%wavenumber_cylinder /                                  &
        &               miescatter%permeability_cylinder)                      &
        & * bessel_jn_derivative(n,                                            &
        &               miescatter%wavenumber_cylinder * miescatter%radius)    &
        & * hankel2_n(n,miescatter%wavenumber_background * miescatter%radius)  &
        & - (miescatter%wavenumber_background /                                &
        &               miescatter%permeability_background)&
        & * hankel2_n_derivative(n,                                            &
        &               miescatter%wavenumber_background * miescatter%radius)  &
        & * bessel_jn(n,miescatter%wavenumber_cylinder * miescatter%radius)    &
        & )

    end do innerLoop

    ! Calculate the expansion coefficients outside of the cylinder, for the
    ! scattered field
    allocate(mieexpansion%c_scat(-nCoeffs:nCoeffs))
    outerLoop: do n = -nCoeffs, nCoeffs

      ! C_n^{scat}
      mieexpansion%c_scat(n) &
      & = (0.0_rk,1.0_rk)**(-n) *                                              &
      & ( (miescatter%wavenumber_background /                                  &
      &               miescatter%permeability_background)                      &
      & * bessel_jn_derivative(n,                                              &
      &               miescatter%wavenumber_background*miescatter%radius)      &
      & * bessel_jn(n,miescatter%wavenumber_cylinder*miescatter%radius)        &
      & - (miescatter%wavenumber_cylinder/miescatter%permeability_cylinder)    &
      & * bessel_jn_derivative(n,                                              &
      &               miescatter%wavenumber_cylinder*miescatter%radius)        &
      & * bessel_jn(n,miescatter%wavenumber_background*miescatter%radius)      &
      & )                                                                      &
      & /                                                                      &
      & (                                                                      &
      &   (miescatter%wavenumber_cylinder/miescatter%permeability_cylinder)    &
      & * bessel_jn_derivative(n,                                              &
      &               miescatter%wavenumber_cylinder*miescatter%radius)        &
      & * hankel2_n(n,miescatter%wavenumber_background*miescatter%radius)      &
      & - (miescatter%wavenumber_background /                                  &
      &               miescatter%permeability_background)                      &
      & * hankel2_n_derivative(n,                                              &
      &               miescatter%wavenumber_background*miescatter%radius)      &
      & * bessel_jn(n,miescatter%wavenumber_cylinder*miescatter%radius)        &
      & )

    end do outerLoop

  end subroutine tem_init_data