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 } |
Once Omega3P run is successfully completed, eignvectors are stored in subdirectory <tt>eigens</tt>. User can convert them to mode files to be visualized using paraview. The following is the command to do that:
acdtool postprocess eigentomode eigens |
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 } EigenSolver: { NumEigenvalues: 2 FrequencyShift: 5e9 } |
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 //phase } } FiniteElement: { Order: 2 CurvedSurfaces: on } EigenSolver: { NumEigenvalues: 1 FrequencyShift: 10e9 } |
ModelInfo: { File: cell1fourth.ncdf BoundaryCondition: { Magnetic: 1,2,3,4 Exterior: 6 Waveguide: 7 //Automatic numerical waveguide port solution will be generated per default //Absorbing: 7 //First-order absorbing boundary condition. Default cutoff is 0 } } FiniteElement: { Order: 1 Curved Surfaces: on } EigenSolver: { NumEigenvalues: 1 FrequencyShift: 9.e9 } Port: { ReferenceNumber: 7 NumberOfModes: 3 // this whole 'Port' container is only needed if you want to load more than 1 mode on a port //CutoffFrequency: 5.6e9 // this is only for Absorbing boundary conditions specified above. Can be used to have the same cutoff as another waveguide mode for faster solution } |
Omega3p normally uses a numerical solution for each port but if you need to specify the polarization of the waveguide you can give an analytic solution instead.
From the last example we could have used:
Port: { ReferenceNumber: 7 //this number should match surface groups in waveguide boundary condition. Origin: 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 axis of the 2D port in the 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 B: 0.0134053 //dimension of the waveguide in y } } } |
Port: { ReferenceNumber: 2 Origin: 0.0, 0.0, 0.011 ESolver: { Type: Analytic Mode: { WaveguideType: Coax ModeType: TEM A: 0.0011 //smaller radius B: 0.0033 //larger radius } } } |
Port: { ReferenceNumber: 2 Origin: 0.0, 0.0, 0.1 XDirection: 1.0, 0.0, 0.0 YDirection: 0.0, 1.0, 0.0 ESolver: { Type: Analytic Mode: { Waveguide type: Circular Mode type: TE 1 1 A: 0.03 } } } |
Port: { Reference number: 9 // FPC Origin: 0.0, 0.198907, -0.4479152585 XDirection: -1.0, 0.0, 0.0 YDirection: 0.0, 0.0, 1.0 ESolver: { Type: Analytic Mode: { WaveguideType: Rectangular ModeType: TE 1 1 A: 0.1348935946 B: 0.024973714999999970 } } } Port: { Reference number: 9 // FPC Origin: 0.0, 0.198907, -0.4479152585 XDirection: -1.0, 0.0, 0.0 YDirection: 0.0, 0.0, 1.0 ESolver: { Type: Analytic Mode: { WaveguideType: Rectangular ModeType: TE 2 0 A: 0.1348935946 B: 0.024973714999999970 } } } |
LinearSolver options in EigenSolver container |
EigenSolver: { NumEigenvalues: 1 FrequencyShift: 10.e9 Tolerance: 1.e-8 } |
EigenSolver: { NumEigenvalues: 1 FrequencyShift: 10.e9 Preconditioner: MUMPSFLOAT //use the float version. memory usage reduced into half. } |
EigenSolver: { NumEigenvalues: 1 FrequencyShift: 10.e9 Preconditioner: MP //this use p-version of multilevel preconditioner. } |
There are two ways to do so. Each way has its advantage and disadvantage.
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 } } |
Mode : { TotalEnergy : 4.4270939088102e-12 QualityFactor : 6478.5096350252 File : ./dds.l0.1.144469E+10.m0 PowerLoss : 4.9139118623939e-05 Frequency : 11444685657.626 } |
ModelInfo: { File: dds3.ncdf BoundaryCondition: { HFormulation: 1 Magnetic: 1, 2, 3, 4 Impedance: 6 } SurfaceMaterial: { ReferenceNumber: 6 Sigma: 5.8e7 } } |
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 } } |
COMMIT MODE: 0 FREQ = (11446188331.64141,869883.6974622669) k = (239.8943683519209,0.01823141417003215) Q = 6579.148663800495 |
Both methods should give you converged Q results if mesh is dense enough.