Isolated Slit and Groove

This tutorial example follows a benchmark setup investigated by P. Lalanne et al. [1]. Performance of FEM for the same setup has also been demonstrated [2]. The benchmark setup consists of computing the near field in an isolated (i.e., non-periodic) pattern illuminated by a plane wave. The geometry consists of an isolated, sub-wavelength slit in a silver film on a substrate with a neighboring, parallel groove in the silver film. This setup is illuminated by a plane wave at perpendicular incidence from above and with in-plane electric field polarization (resp. out-of-plane magnetic field polarization). The energy flux of light transmitted through the slit to a detector region placed a specific distance below the slit is detected and normalized to the energy flux through the slit, computed in a second simulation where the groove is not present. Due to the geometrical, source and material properties plasmonic effects lead to a very critical dependence of normalized transmission on the physical parameters. This makes accurate computation of normalized transmission a challenging benchmark problem.

Triangular meshes of the slit-groove setup (left) and the slit setup (right) used for normalization. Grey: Silver film, blue: substrate, red: detector region, green: air. Note the prerefinement of the mesh at metal corners:

mesh1

mesh2

Computed field intensities, with (right) and without (left) parts of the FEM mesh (top row: \log(I), bottom row: \Re(H_z), pseudo color scale):

f1

f2

f3

f4

Definition of the geometry (please note CornerRefinement in the definitions for slit and groove):

  • layout.jcm [ASCII]

      1Layout2D {
      2  UnitOfLength = 1e-09
      3  MeshOptions {
      4    MinimumMeshAngle = 28
      5    MaximumSideLength = 50
      6  }
      7  Objects {       
      8    Parallelogram {
      9      Name = "CD"
     10      DomainId = 1
     11      Priority = ComputationalDomain
     12      Width = 900
     13      Height = 950
     14      Boundary {
     15        Class = Transparent
     16      }
     17    }
     18    Parallelogram {
     19      Name = "Substrate"
     20      DomainId = 2
     21      Priority = 3
     22      Width = 900
     23      Height = 400
     24      Port = South
     25      Alignment {
     26        Parent {
     27          Domain = "CD"
     28          Port = South
     29        }
     30        Orientation = Parallel
     31        Displacement = [0 0]
     32      }
     33    }
     34    Parallelogram {
     35      Name = "Ag"
     36      DomainId = 3
     37      Priority = 2
     38      Width = 900
     39      Height = 400
     40      Port = South
     41      Alignment {
     42        Parent {
     43          Domain = "Substrate"
     44          Port = North
     45        }
     46        Orientation = AntiParallel
     47        Displacement = [0 0]
     48      }
     49    } 
     50    Parallelogram {
     51      Name = "Groove"
     52      DomainId = 1
     53      Priority = 4
     54      Width = 100
     55      Height = 100
     56      Port = North
     57      Alignment {
     58        Parent {
     59          Domain = "Ag"
     60          Port = North
     61        }
     62        Orientation = Parallel
     63        Displacement = [250 0]
     64      }
     65      MeshOptions {
     66        CornerRefinement {
     67          MaximumSideLength = 0.1
     68          Progression = 3
     69        }
     70      }
     71    } 
     72    Parallelogram {
     73      Name = "Slit"
     74      DomainId = 1
     75      Priority = 4
     76      Width = 100
     77      Height = 400
     78      Port = North
     79      Alignment {
     80        Parent {
     81          Domain = "Ag"
     82          Port = North
     83        }
     84        Orientation = Parallel
     85        Displacement = [-250 0]
     86      }
     87      MeshOptions {
     88        CornerRefinement {
     89          MaximumSideLength = 0.1
     90          Progression = 3
     91        }
     92      }
     93    }
     94    Parallelogram {
     95      Name = "Detector"
     96      DomainId = 4
     97      Priority = 4
     98      Width = 200
     99      Height = 20
    100      Port = South
    101      Alignment {
    102        Parent {
    103          Domain = "Slit"
    104          Port = South
    105        }
    106        Orientation = Parallel
    107        Displacement = [0 -400]
    108      }
    109    }
    110  }
    111}
    

Definition of material properties:

  • materials.jcm [ASCII]

     1
     2Material {
     3  Name = "Air"
     4  DomainId = 1
     5  RelPermittivity = 1
     6  RelPermeability = 1.0
     7}
     8Material {
     9  Name = "Glass"
    10  DomainId = 2
    11  RelPermittivity = 2.25
    12  RelPermeability = 1.0
    13}
    14Material {
    15  Name = "Ag"
    16  DomainId = 3
    17  RelPermittivity = (-33.22, 1.17)
    18  RelPermeability = 1.0
    19}
    20Material {
    21  Name = "Detector_Glass"
    22  DomainId = 4
    23  RelPermittivity = 2.25
    24  RelPermeability = 1.0
    25}
    26
    

Definition of source properties:

  • sources.jcm [ASCII]

     1SourceBag {
     2  Source {
     3    MagneticFieldStrength {
     4      PlaneWave {
     5        Incidence = FromAbove
     6        3DTo2D = yes
     7        ThetaPhi = [0 0]
     8	Lambda0 = 8.52e-07
     9        SP = [1 0]
    10      }
    11    }
    12  }
    13}
    14
    

Alternatively, the source could be defined as plane wave with ElectricFieldStrength and P polarization.

Project type, accuracy settings and post-process definitions:

  • project.jcmp [ASCII]

     1Project {
     2  InfoLevel = -1
     3  StorageFormat = Binary
     4  Electromagnetics {
     5    TimeHarmonic {
     6      Scattering {
     7        FieldComponents = Magnetic
     8        Accuracy {
     9          FiniteElementDegree = 3
    10          Precision = 0.001
    11          Refinement {
    12            MaxNumberSteps = 0
    13          }
    14        }
    15      }
    16    }
    17  }
    18}
    19
    20PostProcess {
    21  FluxIntegration {
    22    FieldBagPath = "project_results/fieldbag.jcm"
    23    OutputFileName = "project_results/flux4.jcm"
    24    OutputQuantity = ElectromagneticFieldEnergyFlux
    25    InterfaceType = ExteriorDomain
    26    DomainIdPairs = [4 4]
    27  }
    28}
    29
    

The post-process computes the energy flux from the domain with DomainId = 4 to the adjacent exterior domain with DomainId = 4.

The data_analysis folder also contains a script for performing simulations with and without the groove (for normalizing the energy flux, according to the benchmark problem). The script also allows to change numerical and physical project parameters, e.g., for checking the accuracy. Some exemplary field distributions are displayed below.