Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
models
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
documentation
models
Commits
fd98faf7
Commit
fd98faf7
authored
6 years ago
by
Guillaume Demesy
Browse files
Options
Downloads
Patches
Plain Diff
add .pro
parent
c1603302
No related branches found
No related tags found
No related merge requests found
Pipeline
#1948
canceled
6 years ago
Stage: test
Changes
1
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
NonLinearEVP/NonLinearEVP.pro
+540
-0
540 additions, 0 deletions
NonLinearEVP/NonLinearEVP.pro
with
540 additions
and
0 deletions
NonLinearEVP/NonLinearEVP.pro
0 → 100644
+
540
−
0
View file @
fd98faf7
///////////////////////////////////
//// Author : Guillaume Demesy ////
//// .pro ////
///////////////////////////////////
Include
"NonLinearEVP_data.geo"
;
Group
{
// Domains
Om_1
=
Region
[
100
]
;
//in (dispersive)
Om_2inter
=
Region
[
101
];
// out (non dispersive)
pmltop
=
Region
[
102
];
// pml top
pmlbot
=
Region
[
103
];
// pml top
Om
=
Region
[{
Om_1
,
Om_2inter
,
pmltop
,
pmlbot
}];
Om_nopml
=
Region
[{
Om_1
,
Om_2inter
}];
Om_pml
=
Region
[{
pmltop
,
pmlbot
}];
Om_2
=
Region
[{
Om_pml
,
Om_2inter
}];
// non dispersive
// Boundaries
SurfBlochLeft
=
Region
[
1001
];
SurfBlochRight
=
Region
[
1002
];
Surfpml
=
Region
[{
1003
,
1004
}];
Bound
=
Region
[{
1005
}];
PrintPoint
=
Region
[
10000
];
}
Function
{
I
[]
=
Complex
[
0
,
1
];
siwt
=
-
1.
;
a_pml
=
1.
;
b_pml
=
-
siwt
;
sx
[
Om_pml
]
=
1.
;
sy
[
Om_pml
]
=
Complex
[
a_pml
,
b_pml
];
sx
[
Om_nopml
]
=
1.
;
sy
[
Om_nopml
]
=
1.
;
sz
=
1
;
PML_Tensor
[]
=
TensorDiag
[
sz
*
sy
[]
/
sx
[],
sx
[]
*
sz
/
sy
[],
sx
[]
*
sy
[]
/
sz
];
mur
[]
=
TensorDiag
[
1
,
1
,
1
]
*
PML_Tensor
[];
epsr_nod
[]
=
TensorDiag
[
1
,
1
,
1
]
*
PML_Tensor
[];
term_o3_3cc_1
[]
=
Complex
[
-
eps_oo_1
,
0
];
term_o3_2cc_1
[]
=
Complex
[
0
,
-
eps_oo_1
*
gam_1
];
term_o3_1cc_1
[]
=
Complex
[
om_d_1
^
2
,
0
];
term_o3_1rr_1
[]
=
cel
^
2
*
Complex
[
1
,
0
];
term_o3_0rr_1
[]
=
cel
^
2
*
Complex
[
0
,
gam_1
];
term_o3_3cc_2
[]
=
-
1
*
epsr_nod
[];
term_o3_2cc_2
[]
=
-
1
*
epsr_nod
[]
*
Complex
[
0
,
gam_2
];
term_o3_1cc_2
[]
=
Complex
[
om_d_2
^
2
,
0
];
term_o3_1rr_2
[]
=
cel
^
2
*
Complex
[
1
,
0
];
term_o3_0rr_2
[]
=
cel
^
2
*
Complex
[
0
,
gam_2
];
term_o3_3cc
[
Om_1
]
=
term_o3_3cc_1
[];
term_o3_2cc
[
Om_1
]
=
term_o3_2cc_1
[];
term_o3_1cc
[
Om_1
]
=
term_o3_1cc_1
[];
term_o3_1rr
[
Om_1
]
=
term_o3_1rr_1
[];
term_o3_0rr
[
Om_1
]
=
term_o3_0rr_1
[];
term_o3_3cc
[
Om_2
]
=
term_o3_3cc_2
[];
term_o3_2cc
[
Om_2
]
=
term_o3_2cc_2
[];
term_o3_1cc
[
Om_2
]
=
term_o3_1cc_2
[];
term_o3_1rr
[
Om_2
]
=
term_o3_1rr_2
[];
term_o3_0rr
[
Om_2
]
=
term_o3_0rr_2
[];
dephx
[]
=
Complex
[
Cos
[
kx
*
a_lat
]
,
Sin
[
kx
*
a_lat
]];
// dephy[] = Complex[ Cos[ky*a_lat] , Sin[ky*a_lat]];
// bidon
EigFilter
[]
=
(
Norm
[
$
EigenvalueReal
]
>
1e-150
);
//Auxialiary Field resolution coefficients
eps_inf
[]
=
TensorDiag
[
1.
,
1.
,
1.
]
*
eps_oo_1
;
Om_D
[]
=
TensorDiag
[
1
,
1
,
1
]
*
Sqrt
[
om_d_1
^
2
/
(
2.
)];
Gamma_d
[]
=
TensorDiag
[
1
,
1
,
1
]
*
gam_1
;
}
Constraint
{
{
Name
BlochX
;
Case
{
{
Region
SurfBlochRight
;
Type
LinkCplx
;
RegionRef
SurfBlochLeft
;
Coefficient
dephx
[];
Function
Vector
[
$
X
-
a_lat
,
$
Y
,
$
Z
]
;
}
}
}
{
Name
Dirichlet
;
Type
Assign
;
Case
{
{
Region
Surfpml
;
Value
0.
;
}
}
}
// div condition
{
Name
Constraint_cInt
;
Type
Assign
;
Case
{
}
}
{
Name
Constraint_Int
;
Type
Assign
;
Case
{
{
Region
Bound
;
Value
0.
;
}
}
}
}
Jacobian
{
{
Name
JVol
;
Case
{
{
Region
All
;
Jacobian
Vol
;
}
}
}
{
Name
JSur
;
Case
{
{
Region
All
;
Jacobian
Sur
;
}
}
}
{
Name
JLin
;
Case
{
{
Region
All
;
Jacobian
Lin
;
}
}
}
}
Integration
{
{
Name
Int_1
;
Case
{
{
Type
Gauss
;
Case
{
{
GeoElement
Point
;
NumberOfPoints
1
;
}
{
GeoElement
Line
;
NumberOfPoints
4
;
}
{
GeoElement
Triangle
;
NumberOfPoints
6
;
}
}
}
}
}
}
FunctionSpace
{
{
Name
Hgrad_perp
;
Type
Form1P
;
BasisFunction
{
{
Name
un
;
NameOfCoef
un
;
Function
BF_PerpendicularEdge_1N
;
Support
Region
[
Om
];
Entity
NodesOf
[
All
];
}
{
Name
un2
;
NameOfCoef
un2
;
Function
BF_PerpendicularEdge_2E
;
Support
Region
[
Om
];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
{
Name
un3
;
NameOfCoef
un3
;
Function
BF_PerpendicularEdge_2F
;
Support
Region
[
Om
];
Entity
FacetsOf
[
All
];
}
{
Name
un4
;
NameOfCoef
un4
;
Function
BF_PerpendicularEdge_3E
;
Support
Region
[
Om
];
Entity
EdgesOf
[
All
];
}
{
Name
un5
;
NameOfCoef
un5
;
Function
BF_PerpendicularEdge_3F
;
Support
Region
[
Om
];
Entity
FacetsOf
[
All
];
}
EndIf
}
Constraint
{
{
NameOfCoef
un
;
EntityType
NodesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un2
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
If
(
flag_o2
==
1
)
{
NameOfCoef
un3
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un4
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un5
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
EndIf
}
}
{
Name
Hcurl
;
Type
Form1
;
BasisFunction
{
{
Name
sn
;
NameOfCoef
un
;
Function
BF_Edge
;
Support
Region
[
Om
];
Entity
EdgesOf
[
All
];
}
{
Name
sn2
;
NameOfCoef
un2
;
Function
BF_Edge_2E
;
Support
Region
[
Om
];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
{
Name
sn3
;
NameOfCoef
un3
;
Function
BF_Edge_3F_a
;
Support
Region
[
Om
];
Entity
FacetsOf
[
All
];
}
{
Name
sn4
;
NameOfCoef
un4
;
Function
BF_Edge_3F_b
;
Support
Region
[
Om
];
Entity
FacetsOf
[
All
];
}
{
Name
sn5
;
NameOfCoef
un5
;
Function
BF_Edge_4E
;
Support
Region
[
Om
];
Entity
EdgesOf
[
All
];
}
// BF_Edge_3F_a, BF_Edge_3F_b, BF_Edge_4E
EndIf
}
Constraint
{
{
NameOfCoef
un
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un2
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un2
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
If
(
flag_o2
==
1
)
{
NameOfCoef
un3
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un4
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un5
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un3
;
EntityType
FacetsOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un4
;
EntityType
FacetsOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un5
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
EndIf
}
}
{
Name
Hcurl_aD
;
Type
Form1
;
BasisFunction
{
{
Name
sn
;
NameOfCoef
un
;
Function
BF_Edge
;
Support
Region
[
Om_1
];
Entity
EdgesOf
[
All
];
}
{
Name
sn2
;
NameOfCoef
un2
;
Function
BF_Edge_2E
;
Support
Region
[
Om_1
];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
{
Name
sn3
;
NameOfCoef
un3
;
Function
BF_Edge_3F_a
;
Support
Region
[
Om_1
];
Entity
FacetsOf
[
All
];
}
{
Name
sn4
;
NameOfCoef
un4
;
Function
BF_Edge_3F_b
;
Support
Region
[
Om_1
];
Entity
FacetsOf
[
All
];
}
{
Name
sn5
;
NameOfCoef
un5
;
Function
BF_Edge_4E
;
Support
Region
[
Om_1
];
Entity
EdgesOf
[
All
];
}
// BF_Edge_3F_a, BF_Edge_3F_b, BF_Edge_4E
EndIf
}
}
{
Name
Hcurl_1
;
Type
Form1
;
BasisFunction
{
{
Name
sn
;
NameOfCoef
un
;
Function
BF_Edge
;
Support
Region
[{
Om_1
,
Bound
}];
Entity
EdgesOf
[
All
];
}
{
Name
sn2
;
NameOfCoef
un2
;
Function
BF_Edge_2E
;
Support
Region
[{
Om_1
,
Bound
}];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
{
Name
sn3
;
NameOfCoef
un3
;
Function
BF_Edge_3F_a
;
Support
Region
[{
Om_1
,
Bound
}];
Entity
FacetsOf
[
All
];
}
{
Name
sn4
;
NameOfCoef
un4
;
Function
BF_Edge_3F_b
;
Support
Region
[{
Om_1
,
Bound
}];
Entity
FacetsOf
[
All
];
}
{
Name
sn5
;
NameOfCoef
un5
;
Function
BF_Edge_4E
;
Support
Region
[{
Om_1
,
Bound
}];
Entity
EdgesOf
[
All
];
}
// BF_Edge_3F_a, BF_Edge_3F_b, BF_Edge_4E
EndIf
}
}
{
Name
Hcurl_2
;
Type
Form1
;
BasisFunction
{
{
Name
sn
;
NameOfCoef
un
;
Function
BF_Edge
;
Support
Region
[{
Om_2
,
Bound
}];
Entity
EdgesOf
[
All
];
}
{
Name
sn2
;
NameOfCoef
un2
;
Function
BF_Edge_2E
;
Support
Region
[{
Om_2
,
Bound
}];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
{
Name
sn3
;
NameOfCoef
un3
;
Function
BF_Edge_3F_a
;
Support
Region
[{
Om_2
,
Bound
}];
Entity
FacetsOf
[
All
];
}
{
Name
sn4
;
NameOfCoef
un4
;
Function
BF_Edge_3F_b
;
Support
Region
[{
Om_2
,
Bound
}];
Entity
FacetsOf
[
All
];
}
{
Name
sn5
;
NameOfCoef
un5
;
Function
BF_Edge_4E
;
Support
Region
[{
Om_2
,
Bound
}];
Entity
EdgesOf
[
All
];
}
// BF_Edge_3F_a, BF_Edge_3F_b, BF_Edge_4E
EndIf
}
Constraint
{
{
NameOfCoef
un
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un2
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un2
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
If
(
flag_o2
==
1
)
{
NameOfCoef
un3
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un4
;
EntityType
FacetsOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un5
;
EntityType
EdgesOf
;
NameOfConstraint
BlochX
;
}
{
NameOfCoef
un3
;
EntityType
FacetsOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un4
;
EntityType
FacetsOf
;
NameOfConstraint
Dirichlet
;
}
{
NameOfCoef
un5
;
EntityType
EdgesOf
;
NameOfConstraint
Dirichlet
;
}
EndIf
}
}
{
Name
Hcurl_l
;
Type
Form1
;
BasisFunction
{
{
Name
sn
;
NameOfCoef
un
;
Function
BF_Edge
;
Support
Region
[
Bound
];
Entity
EdgesOf
[
All
];
}
{
Name
sn2
;
NameOfCoef
un2
;
Function
BF_Edge_2E
;
Support
Region
[
Bound
];
Entity
EdgesOf
[
All
];
}
If
(
flag_o2
==
1
)
// { Name sn3; NameOfCoef un3; Function BF_Edge_3F_a; Support Region[Bound]; Entity FacetsOf[All]; }
// { Name sn4; NameOfCoef un4; Function BF_Edge_3F_b; Support Region[Bound]; Entity FacetsOf[All]; }
{
Name
sn5
;
NameOfCoef
un5
;
Function
BF_Edge_4E
;
Support
Region
[
Bound
];
Entity
EdgesOf
[
All
];
}
EndIf
}
Constraint
{
If
(
flag_o2
==
1
)
EndIf
}
}
}
Formulation
{
{
Name
modal_Aux_E
;
Type
FemEquation
;
Quantity
{
{
Name
e
;
Type
Local
;
NameOfSpace
Hcurl
;}
{
Name
eaD
;
Type
Local
;
NameOfSpace
Hcurl_aD
;}
}
Equation
{
Galerkin
{
[
1.
*
cel
^
2
/
mur
[]
*
Dof
{
Curl
e
},
{
Curl
e
}
]
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1
*-
epsr_nod
[]
*
Dof
{
e
}
,
{
e
}
]
;
Order
2
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
[
1
*
2.
*
om_d_1
/
Sqrt
[
2
]
*
Dof
{
e
}
,
{
eaD
}
]
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
[
-
I
[]
*
gam_1
*
Dof
{
eaD
}
,
{
eaD
}
]
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
Om_D
[]
*
Dof
{
eaD
}
,
{
e
}
]
;
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*-
Dof
{
eaD
}
,
{
eaD
}
]
;
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
{
Name
modal_helmholtz_Lag_E
;
Type
FemEquation
;
Quantity
{
{
Name
u_1
;
Type
Local
;
NameOfSpace
Hcurl_1
;}
{
Name
u_2
;
Type
Local
;
NameOfSpace
Hcurl_2
;}
{
Name
lambda
;
Type
Local
;
NameOfSpace
Hcurl_l
;}
}
Equation
{
Galerkin
{
[
1.
*
term_o3_0rr_1
[]
/
mur
[]
*
Dof
{
Curl
u_1
},{
Curl
u_1
}];
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
term_o3_1cc_1
[]
*
Dof
{
u_1
}
,{
u_1
}
];
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
term_o3_1rr_1
[]
/
mur
[]
*
Dof
{
Curl
u_1
},{
Curl
u_1
}];
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
term_o3_2cc_1
[]
*
Dof
{
u_1
}
,{
u_1
}
];
Order
2
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
I
[]
*
term_o3_3cc_1
[]
*
Dof
{
u_1
}
,{
u_1
}
];
Order
3
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
[
1.
*
term_o3_0rr_2
[]
/
mur
[]
*
Dof
{
Curl
u_2
},{
Curl
u_2
}];
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
term_o3_1cc_2
[]
*
Dof
{
u_2
}
,{
u_2
}
];
Order
1
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
term_o3_1rr_2
[]
/
mur
[]
*
Dof
{
Curl
u_2
},{
Curl
u_2
}];
Order
1
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1
*
term_o3_2cc_2
[]
*
Dof
{
u_2
}
,{
u_2
}
];
Order
2
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
I
[]
*
term_o3_3cc_2
[]
*
Dof
{
u_2
}
,{
u_2
}
];
Order
3
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
[
1.
*
term_o3_0rr_1
[]
*
1e8
*
Dof
{
lambda
}
,
{
u_1
}
]
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
Galerkin
{
[
1.
*
-
term_o3_0rr_2
[]
*
1e8
*
Dof
{
lambda
}
,
{
u_2
}
]
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
term_o3_1rr_1
[]
*
1e8
*
Dof
{
lambda
}
,
{
u_1
}
]
;
Order
1
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
-
term_o3_1rr_2
[]
*
1e8
*
Dof
{
lambda
}
,
{
u_2
}
]
;
Order
1
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
Galerkin
{
[
Dof
{
u_1
}
*
1e8
,
{
lambda
}
]
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
Galerkin
{
[
-
Dof
{
u_2
}
*
1e8
,
{
lambda
}
]
;
In
Bound
;
Jacobian
JLin
;
Integration
Int_1
;}
}
}
{
Name
modal_helmholtz_PEP_E
;
Type
FemEquation
;
Quantity
{{
Name
u
;
Type
Local
;
NameOfSpace
Hcurl
;}}
Equation
{
Galerkin
{
[
1.
*
cel
^
2
/
mur
[]
*
I
[]
*
gam_1
*
Dof
{
Curl
u
},
{
Curl
u
}];
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
cel
^
2
/
mur
[]
*
Dof
{
Curl
u
},
{
Curl
u
}];
Order
1
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
om_d_1
^
2
*
Dof
{
u
}
,
{
u
}
];
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
I
[]
*-
eps_oo_1
*
gam_1
*
Dof
{
u
}
,
{
u
}
];
Order
2
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
I
[]
*
-
eps_oo_1
*
Dof
{
u
}
,
{
u
}
];
Order
3
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
-
epsr_nod
[]
*
I
[]
*
gam_1
*
Dof
{
u
}
,
{
u
}
];
Order
2
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
I
[]
*
-
epsr_nod
[]
*
Dof
{
u
}
,
{
u
}
];
Order
3
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
{
Name
modal_helmholtz_PEP_E_nleig
;
Type
FemEquation
;
Quantity
{{
Name
u
;
Type
Local
;
NameOfSpace
Hcurl
;}}
Equation
{
Galerkin
{
Eig
[
1
/
mur
[]
*
Dof
{
Curl
u
},
{
Curl
u
}
];
Rational
1
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
epsr_nod
[]
/
cel
^
2
*
Dof
{
u
},
{
u
}
];
Rational
2
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
epsr_nod
[]
/
cel
^
2
*
Dof
{
u
},
{
u
}
];
Rational
3
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
{
Name
modal_helmholtz_PEP_h
;
Type
FemEquation
;
Quantity
{{
Name
u
;
Type
Local
;
NameOfSpace
Hgrad_perp
;}}
Equation
{
Galerkin
{
[
1.
*
1
/
epsr_nod
[]
*
-
om_d_1
^
2
*
Dof
{
Curl
u
},
{
Curl
u
}
];
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
1
/
epsr_nod
[]
*
I
[]
*
eps_oo_1
*
gam_1
*
Dof
{
Curl
u
},
{
Curl
u
}
];
Order
1
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
1
/
epsr_nod
[]
*
eps_oo_1
*
Dof
{
Curl
u
},
{
Curl
u
}
];
Order
2
;
In
Om_2
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
I
[]
*
1
/
epsr_nod
[]
*
I
[]
*
gam_1
*
Dof
{
Curl
u
},
{
Curl
u
}
];
Order
1
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
1
/
epsr_nod
[]
*
Dof
{
Curl
u
},
{
Curl
u
}
];
Order
2
;
In
Om_1
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
-
1.
*
mur
[]
/
cel
^
2
*
om_d_1
^
2
*
Dof
{
u
},
{
u
}
];
Order
2
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
I
[]
*
-
mur
[]
/
cel
^
2
*
I
[]
*
eps_oo_1
*
gam_1
*
Dof
{
u
},
{
u
}
];
Order
3
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
Galerkin
{
Eig
[
1.
*
-
mur
[]
/
cel
^
2
*
eps_oo_1
*
Dof
{
u
},
{
u
}
];
Order
4
;
In
Om
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
}
Resolution
{
{
Name
res_PEP_E
;
System
{
{
Name
M1
;
NameOfFormulation
modal_helmholtz_PEP_E
;
Type
ComplexValue
;
}
}
Operation
{
GenerateSeparate
[
M1
];
EigenSolve
[
M1
,
neig
,
eig_target_re
,
eig_target_im
];
// Print[M1];
}
}
{
Name
res_NEP_E
;
System
{{
Name
M1
;
NameOfFormulation
modal_helmholtz_PEP_E_nleig
;
Type
ComplexValue
;
}}
Operation
{
GenerateSeparate
[
M1
];
// // Fan rational (iw)
// (2*Pi*cel/lambda_vp)
EigenSolve
[
M1
,
neig
,
eig_target_re
,
eig_target_im
,
EigFilter
[],
{
{
1
},
{
-
eps_oo_1
,
gam_1
*
eps_oo_1
,
-
om_d_1
^
2
,
0
},
{
-
1
,
0
,
0
}
}
,
{
{
1
},
{
1
,
-
gam_1
},
{
1
}
}
];
}
}
{
Name
res_Lag_E
;
System
{
{
Name
M1
;
NameOfFormulation
modal_helmholtz_Lag_E
;
Type
ComplexValue
;
}
}
Operation
{
GenerateSeparate
[
M1
];
EigenSolve
[
M1
,
neig
,
eig_target_re
,
eig_target_im
];
// Print[M1];
}
}
{
Name
res_PEP_h
;
System
{
{
Name
M1
;
NameOfFormulation
modal_helmholtz_PEP_h
;
Type
ComplexValue
;
}
}
Operation
{
GenerateSeparate
[
M1
];
EigenSolve
[
M1
,
neig
,
eig_target_re
,
eig_target_im
];
// Print[M1];
}
}
{
Name
res_Aux_E
;
System
{
{
Name
M1
;
NameOfFormulation
modal_Aux_E
;
Type
ComplexValue
;
}
}
Operation
{
GenerateSeparate
[
M1
];
EigenSolve
[
M1
,
neig
,
eig_target_re
,
eig_target_im
,
EigFilter
[]];
}
}
}
PostProcessing
{
{
Name
postpro_eigenvectors_PEP_E
;
NameOfFormulation
modal_helmholtz_PEP_E
;
Quantity
{
{
Name
intnormu_pml
;
Value
{
Integral
{
[
Norm
[{
u
}]
]
;
In
Om_pml
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
{
Name
intnormu_nopml
;
Value
{
Integral
{
[
Norm
[{
u
}]
]
;
In
Om_nopml
;
Jacobian
JSur
;
Integration
Int_1
;}
}
}
{
Name
u
;
Value
{
Local
{
[
{
u
}
]
;
In
Om
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesReal
;
Value
{
Local
{
[
$
EigenvalueReal
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesImag
;
Value
{
Local
{
[
$
EigenvalueImag
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
}
}
{
Name
postpro_eigenvectors_NEP_E
;
NameOfFormulation
modal_helmholtz_PEP_E_nleig
;
Quantity
{
{
Name
u
;
Value
{
Local
{
[
{
u
}
]
;
In
Om
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesReal
;
Value
{
Local
{
[
$
EigenvalueReal
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesImag
;
Value
{
Local
{
[
$
EigenvalueImag
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
}
}
{
Name
postpro_eigenvectors_Lag_E
;
NameOfFormulation
modal_helmholtz_Lag_E
;
Quantity
{
{
Name
u_1
;
Value
{
Local
{
[
{
u_1
}
]
;
In
Om_1
;
Jacobian
JSur
;
}
}
}
{
Name
u_2
;
Value
{
Local
{
[
{
u_2
}
]
;
In
Om_2
;
Jacobian
JSur
;
}
}
}
{
Name
lambda
;
Value
{
Local
{
[
{
lambda
}
]
;
In
Bound
;
Jacobian
JLin
;
}
}
}
{
Name
EigenValuesReal
;
Value
{
Local
{
[
$
EigenvalueReal
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesImag
;
Value
{
Local
{
[
$
EigenvalueImag
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
}
}
{
Name
postpro_eigenvectors_PEP_h
;
NameOfFormulation
modal_helmholtz_PEP_h
;
Quantity
{
{
Name
u
;
Value
{
Local
{
[
{
u
}
]
;
In
Om
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesReal
;
Value
{
Local
{
[
$
EigenvalueReal
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesImag
;
Value
{
Local
{
[
$
EigenvalueImag
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
}
}
{
Name
postpro_eigenvectors_Aux_E
;
NameOfFormulation
modal_Aux_E
;
Quantity
{
{
Name
e
;
Value
{
Local
{
[
{
e
}
]
;
In
Om
;
Jacobian
JSur
;
}
}
}
{
Name
eaD
;
Value
{
Local
{
[
{
eaD
}
]
;
In
Om_1
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesReal
;
Value
{
Local
{
[
$
EigenvalueReal
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
{
Name
EigenValuesImag
;
Value
{
Local
{
[
$
EigenvalueImag
];
In
PrintPoint
;
Jacobian
JSur
;
}
}
}
}
}
}
PostOperation
{
{
Name
postop_PEP_E
;
NameOfPostProcessing
postpro_eigenvectors_PEP_E
;
Operation
{
Print
[
EigenValuesReal
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesReal.dat"
];
Print
[
EigenValuesImag
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesImag.dat"
];
If
(
flag_outEigvec
==
1
)
Print
[
u
,
OnElementsOf
Om
,
File
"u_PEP_E.pos"
,
Name
"Electric eigen-field (PEP-E)"
];
EndIf
}
}
{
Name
postop_NEP_E
;
NameOfPostProcessing
postpro_eigenvectors_NEP_E
;
Operation
{
Print
[
EigenValuesReal
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesReal.dat"
];
Print
[
EigenValuesImag
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesImag.dat"
];
If
(
flag_outEigvec
==
1
)
Print
[
u
,
OnElementsOf
Om
,
File
"u_NEP_E.pos"
,
Name
"Electric eigen-field NEP-E"
];
EndIf
}
}
{
Name
postop_Lag_E
;
NameOfPostProcessing
postpro_eigenvectors_Lag_E
;
Operation
{
Print
[
EigenValuesReal
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesReal.dat"
];
Print
[
EigenValuesImag
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesImag.dat"
];
If
(
flag_outEigvec
==
1
)
Print
[
u_1
,
OnElementsOf
Om_1
,
File
"u1_Lag_E.pos"
,
Name
"Electric eigen-field 1 (Lag-E)"
];
Print
[
u_2
,
OnElementsOf
Om_2
,
File
"u2_Lag_E.pos"
,
Name
"Electric eigen-field 2 (Lag-E)"
];
Print
[
lambda
,
OnElementsOf
Bound
,
File
"lam_Lag_E.pos"
,
Name
"Lagrange multiplier (Lag-E)"
];
EndIf
}
}
{
Name
postop_PEP_h
;
NameOfPostProcessing
postpro_eigenvectors_PEP_h
;
Operation
{
Print
[
EigenValuesReal
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesReal.dat"
];
Print
[
EigenValuesImag
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesImag.dat"
];
If
(
flag_outEigvec
==
1
)
Print
[
u
,
OnElementsOf
Om
,
File
"u_PEP_h.pos"
,
Name
"Magnetic eigen-field (PEP-h)"
];
EndIf
}
}
{
Name
postop_Aux_E
;
NameOfPostProcessing
postpro_eigenvectors_Aux_E
;
Operation
{
Print
[
EigenValuesReal
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesReal.dat"
];
Print
[
EigenValuesImag
,
OnElementsOf
PrintPoint
,
Format
TimeTable
,
File
"EigenValuesImag.dat"
];
If
(
flag_outEigvec
==
1
)
Print
[
eaD
,
OnElementsOf
Om_1
,
File
"u_Aux_EaD.pos"
,
Name
"Auxiliary Field Aux-E"
];
Print
[
e
,
OnElementsOf
Om
,
File
"u_Aux_E.pos"
,
Name
"E Aux-E"
];
EndIf
}
}
}
// In the list of changes of PETSc 3.9
// http://www.mcs.anl.gov/petsc/documentation/changes/39.html
// MatSolverPackage is replaced with MatSolverType
//
// So you have to change in the command line option:
// -st_pc_factor_mat_solver_package mumps
// to:
// -st_pc_factor_mat_solver_type mumps
// fine tuning slecp options
// -pep_ncv 600 (set size of the Krylov subspace)
// -pep_mpd 600
// -pep_toar_locking 0 ("do not take an EV for granted")
eig_tol
=
1e-6
;
slepc_options_nep_pol
=
" -nep_max_it 1000 -nep_type nleigs -nep_target_magnitude "
;
// Warning slepc > 3.8 : -nep_nleigs_rational => -nep_rational
// slepc_options_nep_rat = Sprintf(" -nep_max_it 1000 -nep_type nleigs -nep_nleigs_rational -nep_target_magnitude -nep_tol %.10f ",eig_tol);
slepc_options_nep_rat
=
Sprintf
(
" -nep_max_it 1000 -nep_type nleigs -nep_rational -nep_target_magnitude -nep_tol %.10f "
,
eig_tol
);
// Warning petsc > 3.9 st_pc_factor_mat_solver_package => st_pc_factor_mat_solver_type
// slepc_options_st = "-solve -st_type sinvert -st_ksp_type preonly -st_pc_type lu -st_pc_factor_mat_solver_type mumps -petsc_prealloc 200 -pos";
slepc_options_st
=
"-solve -st_type sinvert -st_ksp_type preonly -st_pc_type lu -st_pc_factor_mat_solver_package mumps -petsc_prealloc 200 -pos"
;
slepc_options_pep
=
Sprintf
(
" -pep_max_it 400 -pep_target_magnitude -pep_tol %.10f "
,
eig_tol
);
If
(
flag_res
==
0
)
which_res
=
"Aux_E"
;
str_slepc_options
=
StrCat
(
slepc_options_st
,
slepc_options_pep
);
EndIf
If
(
flag_res
==
1
)
which_res
=
"PEP_E"
;
str_slepc_options
=
StrCat
(
slepc_options_st
,
slepc_options_pep
);
EndIf
If
(
flag_res
==
2
)
which_res
=
"NEP_E"
;
str_slepc_options
=
StrCat
(
slepc_options_nep_rat
);
EndIf
If
(
flag_res
==
3
)
which_res
=
"Lag_E"
;
str_slepc_options
=
StrCat
(
slepc_options_st
,
slepc_options_pep
);
EndIf
If
(
flag_res
==
4
)
which_res
=
"PEP_h"
;
str_slepc_options
=
StrCat
(
slepc_options_st
,
slepc_options_pep
);
EndIf
// redirect converged eigenvalues at runtime to some textfile
str_slepc_options
=
StrCat
(
str_slepc_options
,
" -nep_monitor_all :temp_eigenvalues.txt "
);
DefineConstant
[
R_
=
{
StrCat
(
"res_"
,
which_res
),
Name
"GetDP/1ResolutionChoices"
,
Visible
1
},
C_
=
{
Sprintf
(
StrCat
(
"-solve -pos -v2 "
,
str_slepc_options
,
slepc_options_rg
)),
Name
"GetDP/9ComputeCommand"
,
Visible
1
},
P_
=
{
StrCat
(
"postop_"
,
which_res
),
Name
"GetDP/2PostOperationChoices"
,
Visible
1
}];
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment