Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
  ModelInfo: {
    File: cell1fourth.ncdf
    BoundaryCondition: {
      Magnetic: 1,2,3,4
      Exterior: 6
      Waveguide: 7    //for each number appeared here, it should have at least one Port container later.
                      //Absorbing and Waveguide have the same effects. Omega3P internally will figure out
 which BC to use.
    }
  }

  FiniteElement: {
    Order:     //which BC     1to use.
    Curved Surfaces: on}
  }

  PostProcessFiniteElement: {
    Toggle: on
    ModeFileOrder: test
  }

  EigenSolver: {
    NumEigenvalues:     1
    Curved FrequencyShiftSurfaces: 		9.e9on
  }

  CheckPointEigenSolver: {
    ActionNumEigenvalues: save1
    DirectoryFrequencyShift: eigens9.e9
  }


  Port: {
    ReferenceNumber: 7     //this number should match surface groups in waveguide boundary condition.
    NumberOfModes: 1
  }

...

  • The first option is that user does not provide anything. The EigenSolver container in the input file looks like:
    Code Block
      EigenSolver: {
        NumEigenvalues:     1
        FrequencyShift:        1
        FrequencyShift:  10.e9
        Tolerance: 1.e-8
      }
    
    In this case, Omega3P will use the default option for linear solver for solving shifted linear systems
  • The second option is to use float version of the sparse direct solver.
    Code Block
      EigenSolver: {
        NumEigenvalues:     1
        FrequencyShift:             10.e9
        Preconditioner: MUMPSFLOAT //use the float version. memory usage reduced into half.
      }
    
  • The third option is to use Krylov subspace method with different preconditioner.
    Code Block
      EigenSolver: {
        NumEigenvalues:     1
        FrequencyShift:             10.e9
        Preconditioner: MP      //this use p-version of multilevel preconditioner.
      }
    
    The code will choose either CG (real matrices) or GMRES (complex matrices) and the p-version
    of multilevel precondtioner as the solver for shifted linear systems.
  • The fourth option is to use out-of-core sparse direct solver (an experimental feature).
    Code Block
      EigenSolver: {
        NumEigenvalues:     1
        FrequencyShift:             10.e9
        Memory: 1000  //if the memory usage of the matrix factor in any process is larger than 1000MBytes,
                                //switch to use out-of-core solver.
      }
    

...

  1. Inside ModelInfo.BoundaryCondition define a set of boundary surfaces as Exterior.
    For each of the boundary surfaces, have a corresponding SurfaceMaterial container inside ModelInfo.
    For example:
    Code Block
     ModelInfo: {
      File: .dds3.ncdf
    
      BoundaryCondition: {
        Magnetic: 1, 2, 3, 4
        Exterior: 6   // sideset 6 is defined as Exterior BC.
      }
    
      SurfaceMaterial: {        // have a separate for each number in Exterior BC
        ReferenceNumber: 6  //the corresponding sideset in Exterior BC
        Sigma: 5.8e7            //electrical conductivity of the material
      }
     }
    
    After you run omega3p with the input file, you will get a file called "output" under the same directory. Inside the file, it has a summary of results such as:
    Code Block
                Mode : {
                    TotalEnergy : 4.4270939088102e-12
                    QualityFactor : 6478.5096350252
                    File : ./dds.l0.1.144469E+10.m0
                    PowerLoss : 4.9139118623939e-05
                    Frequency : 11444685657.626
                }
    
    
    The number after QualityFactor is the one you are looking for. This method uses perturbation theory and has advantage that it is very simple. The computation associated with it is minimal.
  2. Inside ModelInfo.BoundaryCondition, define the set of surfaces as Impedance (instead of Exterior in method 1).
    Set the HFormulation to be 1 (this is very important). Also, have a set of corresponding SurfaceMaterials inside ModelInfo as those in method 1. For example:
    Code Block
     ModelInfo: {
    
      File: dds3.ncdf
    
      BoundaryCondition: {
        HFormulation: 1
        Magnetic: 1, 2, 3, 4
        Impedance: 6
      }
    
      SurfaceMaterial: {
        ReferenceNumber: 6
        Sigma: 5.8e7
      }
     }
    
    After you run omega3p with the input, in the output file, you will see
    Code Block
            Mode = {
                TotalEnergy = { 6.2827077634198e-07, 0 },
                ExternalQ = 6579.1486638005,
                QualityFactor = inf,
                File = './dds.l0.R1.144619E+10I8.698837E+05.m0',
                PowerLoss = 0,
                Frequency = { 11446188331.641, 869883.69746227 }
            }
    
    The number after ExternalQ is the wall loss Q you are looking for. During the omega3p run, it should also print out the Q information such as
    Code Block
    COMMIT MODE: 0 FREQ = (11446188331.64141,869883.6974622669)	 k = (239.8943683519209,0.01823141417003215)	 Q = 6579.148663800495
    
    Note that this method set an impedance boundary condition on those surfaces and make the eigenvalue problem complex and nonlinear. It takes more time and memory to solve the problem. But the field will be in the right phase (even close to the boundary surfaces).

...