Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin
Panel
titleTable of Contents
Table of Contents
minLevel2
outlinetrue
indent30px
typeflat
separatornewline

Input Examples

A complete example for a lossless cavity

Code Block
  ModelInfo: {
    File: dds3.ncdf                             //mesh file. It is the file converted using acdtool
    BoundaryCondition: {                   //specify boundary conditions. The numbers here are sideset in cubit
      Magnetic: 1, 2                           //reference surfaces 1 and 2 are symmetric planes
      Electric: 3 4                               //set reference surfaces 3 and 4 to be electric boundary condition
      Exterior: 6                                 //surface group 6 (maybe many surfaces) is metal
   }
   SurfaceMaterial: {                          //for each metal (exterior) surface group, list the sigma values
      ReferenceNumber: 6
      Sigma: 5.8e7
    }
  }

  FiniteElement: {
     Order: 2                                     //set the finite element basis function order to be used.
     CurvedSurfaces: on
  }

  EigenSolver: {
      NumEigenvalues:     1                //want to compute 1 mode
      FrequencyShift: 		10.e9     //the eigenfrequency of the mode should be above 10GHz
  }

  CheckPoint: {
    Action: save
    Directory: eigens                         //eigenvectors are saved out into this directory
  }

  PostProcess: {
    Toggle: off                                   //postprocess switch
    ModeFile: dds                              //The prefix of the mode filename.
  }

  Log: thisrun.log                              //If you want more printout logged into the file

...

Code Block
  acdtool postprocess eigentomode eigens

A complete example about a cavity with lossy materials

Code Block
 ModelInfo: {
  File: ./pillbox.ncdf
  BoundaryCondition: {
    Electric: 1,2,3,4
    Exterior: 6
  }
   Material : {
     Attribute: 1
     Epsilon:   1.0
     Mu:        1.0
   }
   Material : {
      Attribute: 2
      Epsilon:   1.0
      Mu:        1.0
      EpsilonImag: -0.2        //lossy material
   }
 }

  FiniteElement: {
   Order: 1
   Curved Surfaces: off
  }

  PostProcess: {
    Toggle: off
    ModeFile: mode
    SymmetryFactor: 2
  }

  EigenSolver: {
    NumEigenvalues:     2
    FrequencyShift: 		5e9
  }

A complete example with periodic boundary conditions

Code Block
ModelInfo: {
File: c026ds-pbc.ncdf
  BoundaryCondition: {
    Magnetic: 1 2
    Periodic_M: 3   //master surface
    Periodic_S: 4   //slave surface, the mesh should be exactly same as those on the master surface
    Exterior: 6
    Theta: -150                 
File: c026ds-pbc.ncdf                           //phase
  }
}

FiniteElement: {
  Order: 2
  CurvedSurfaces: on
  ScalarPotential: 1 //use A-V formulation
}

PostProcess:
{
  Toggle: on
  ModeFile: mode
  SymmetryFactor:  8.
}
EigenSolver: {
    NumEigenvalues:     1
    FrequencyShift: 	10e9
}

A complete example with waveguide loaded cavity

Code Block

  ModelInfo: {
         File: cell1fourth.ncdf
    BoundaryCondition: {
     
  BoundaryConditionMagnetic: {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:  {
    MagneticOrder: 1 2         1
    Curved Surfaces: on
  }

  PostProcess: {
    Toggle: on
    ModeFile: test
  }

  EigenSolver: {
    NumEigenvalues:     1
    FrequencyShift: 		9.e9
  }

  CheckPoint: {
    Action: save
    Directory: eigens
  }


  Periodic_MPort: 3{
   //master surface
    Periodic_SReferenceNumber: 47     //slave surface, the meshthis number should bematch exactlysurface samegroups asin thosewaveguide onboundary thecondition.
 master surface  
    ExteriorOrigin: 6       0.0, 0.0415, 0.0    //the origin of the 2D port in the 3D coordinate system
        XDirection: 1.0, 0.0,    0.0    //the x axis of the 2D port in the 3D coordinate system
        YDirection: 0.0, 0.0,   -1.0 
  //the y Theta:axis -150of the 2D port in //phasethe 3D coordinate system
        ESolver: {
                Type: Analytic              //analytic expression is used
           
  }   Mode: {
                        WaveguideType: Rectangular     //it is a rectangular waveguide
                        ModeType: TE 1 0           
}         //load the TE10 mode
                        A: 0.028499                            //dimension of the waveguide in x
        

FiniteElement: {               B: 0.0134053                           //dimension of the waveguide in y
               
  Order: 2}
  CurvedSurfaces: on
  ScalarPotential: 1 //use A-V formulation}
}   }

Load TEM mode in a coax waveguide

Code Block

   Port: {
        ReferenceNumber: 2
        Origin:        0.0, 0.0, 0.011
        ESolver: {
                Type: Analytic
                    

PostProcess:
Mode: {
  Toggle: on                     WaveguideType: Coax
                        ModeType: TEM
                    
  ModeFile: mode A: 0.0011  //smaller radius
                        B: 0.0033  //larger radius
                }
        }
      
  SymmetryFactor:  8.
}
EigenSolver}

Load TE11 mode in a circular waveguide

Code Block

   Port: {
    NumEigenvalues:    ReferenceNumber: 12
     FrequencyShift: 	10e9
}

A complete example with waveguide loaded cavity

Code Block

  ModelInfoOrigin: {
     File: cell1fourth.ncdf0.0, 0.0, 0.1
    BoundaryCondition: {
   XDirection: 1.0,  0.0,  Magnetic: 1,2,3,4  0.0
      Exterior  YDirection: 6
0.0,  1.0,    Waveguide: 70.0
     //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:ESolver: {
                Type: Analytic
                Mode:  {
    Order:           1
    Curved Surfaces: on
  }

 Waveguide PostProcesstype: {Circular
       Toggle:  on
    ModeFile: test
  }

  EigenSolver: {
    NumEigenvalues: Mode type: TE 1 1
     FrequencyShift: 		9.e9
  }

  CheckPoint: {
    Action: save
    Directory: eigens
  }


  PortA: {0.03
        ReferenceNumber:  7     //this number}
 should match surface groups in waveguide boundary condition.}
   }

Load two TE modes in the same rectangular waveguide

Code Block

  Port: {
  Origin:     0.0, 0.0415, 0.0    //the origin of the 2D port in the 3D coordinate systemReference number: 9  // FPC
      Origin: 0.0, 0.198907, -0.4479152585
        XDirection:  -1.0, 0.0,    0.0
    //the x axis of the 2D port in the 3D coordinate systemYDirection: 0.0, 0.0, 1.0
      ESolver:  YDirection: 0.0, 0.0,{
     -1.0   //the y axis of the 2DType: portAnalytic
 in the 3D coordinate system
        ESolverMode: {
                Type: Analytic    WaveguideType: Rectangular
         //analytic expression is used
         ModeType: TE      Mode: {1 1
                        WaveguideTypeA: Rectangular0.1348935946
     //it is a rectangular waveguide
              B: 0.024973714999999970
         ModeType: TE 1 0}
     }
  }

  Port: {
      Reference number: 9  //load the TE10 modeFPC
      Origin:   0.0, 0.198907, -0.4479152585
      XDirection:  -1.0, 0.0, 0.0
      AYDirection: 0.028499  0, 0.0, 1.0
      ESolver: {
             Type: Analytic
     //dimension of the waveguide in x
   Mode:  {
                   B: 0.0134053 WaveguideType: Rectangular
                     ModeType: TE 2  //dimension0
 of the waveguide in y
                A: }0.1348935946
         }
   }

Load TEM mode in a coax waveguide

Code Block

   Port: {
        ReferenceNumberB: 20.024973714999999970
        Origin:     0.0, 0.0, 0.011}
        ESolver: {}
   }

Make a non-planar surface absorbing boundary

Code Block

    Port: {
    ReferenceNumber: 5   Type: Analytic
          //reference surface ID
    ModeOrigin: {
    0.0, 0.0, 0.0       //not used
    XDirection: 1.0, 0.0,    WaveguideType: Coax
0.0    //not used
    YDirection: 0.0, 1.0,    0.0    //not used
    ESolver: {
      ModeTypeType: TEMAnalytic
      Mode:{
                  A: 0.0011  //smaller radius
 Mode number: 1
                     B: 0.0033 Waveguide //larger radiustype: ABC
                }
       Mode }type: ABC
      }
    }
  }

...

LinearSolver options in EigenSolver container

  • 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:     

...

  •       

...

  •  

...

  •  

...

  • 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  

...

Load two TE modes in the same rectangular waveguide

...

  • //if the memory usage of the matrix factor in any process is larger than 1000MBytes,
          

...

  •  

...

  •  

...

  •   

...

  •  

...

  •       

...

  •  

...

  •  

...

  •  

...

  •       

...

  •   

...

  • //switch to use out-of-core solver.
      }
    

FAQ

How to calculate Wallloss Quality Factor?

There are two ways to do so. Each way has its advantage and disadvantage.

  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 

...

  1. Exterior 

...

  1. BC
        ReferenceNumber: 6  //the corresponding sideset in Exterior BC
        Sigma: 5.8e7    

...

  1.  

...

  1.  

...

  1.  

...

  1.      //electrical conductivity of the material
      }
     

...

  1. }
    
    After that, make sure you toggle the PostProcess on.
    Code Block
    
     PostProcess: {
      Toggle: on   // this should be on for computing wallloss Q
      ModeFile: ./dds
     }
    
    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
    
             

...

  1.    

...

  1. Mode : {

...

  1. 
          

...

  1.  

...

  1.  

...

  1.   

...

  1.  

...

  1.      TotalEnergy 

...

  1. : 

...

  1. 4.4270939088102e-12
          

...

  1.    

...

  1.  

...

  1.  

...

  1.      QualityFactor 

...

  1. : 

...

  1. 6478.5096350252
               

...

  1.      File 

...

  1. : 

...

  1. ./dds.l0.1.144469E+10.m0
                 

...

  1.  

...

  1.   PowerLoss 

...

  1. : 4.9139118623939e-05
                    

...

  1. Frequency 

...

  1. : 

...

  1. 11444685657.626
                

...

Make a non-planar surface absorbing boundary

Code Block

  Port: {
    ReferenceNumber: 5              //reference surface ID
    Origin:     0.0, 0.0, 0.0       //not used
    XDirection: 1.0, 0.0,    0.0    //not used
    YDirection: 0.0, 1.0,    0.0    //not used
    ESolver: {
      Type: Analytic
      Mode:{
                       Mode number: 1
                       Waveguide type: ABC
                       Mode type: ABC
      }
    }
  }

LinearSolver options in EigenSolver container

  • 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:             10.e9
      }
    
    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. 
      }
    

...

  1. }
    
    
    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

...

  1. : {
        

...

  1. ReferenceNumber: 6
        Sigma: 5.8e7
      

...

  1. }
     }
    
    After you run omega3p with the input, in the output file, you will see
    Code Block
    
        

...

  1.     Mode = {
           

...

  1.     

...

  1.  

...

  1. TotalEnergy = { 6.2827077634198e-07, 0 },
     

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.      ExternalQ = 6579.1486638005,
                QualityFactor = inf,
                File = './dds.l0.R1.144619E+10I8.698837E+05.m0',
                PowerLoss = 0,
         

...

  1.     

...

  1.  

...

  1.   

...

  1. Frequency 

...

  1. = 

...

  1. { 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).

Both methods should give you converged Q results if mesh is dense enough.