-
Notifications
You must be signed in to change notification settings - Fork 1
/
helmholtz.pro
107 lines (96 loc) · 2.39 KB
/
helmholtz.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
// =========
// JACOBIAN
// =========
Jacobian {
{ Name JVol ; Case { { Region All ; Jacobian Vol ; } } }
{ Name JSur ; Case { { Region All ; Jacobian Sur ; } } }
}
// ======================
// INTEGRATION PARAMETERS
// ======================
Integration {
{ Name I1 ;
Case {
{ Type Gauss ;
Case {
{ GeoElement Point ; NumberOfPoints 1 ; }
{ GeoElement Line ; NumberOfPoints 4 ; }
{ GeoElement Triangle ; NumberOfPoints 6 ; }
{ GeoElement Quadrangle ; NumberOfPoints 7 ; }
{ GeoElement Tetrahedron ; NumberOfPoints 15 ; }
{ GeoElement Hexahedron ; NumberOfPoints 34 ; }
}
}
}
}
}
// ==============
// FUNCTION SPACE
// ==============
FunctionSpace{
{Name H_grad; Type Form0;
BasisFunction{
{Name u; NameOfCoef ui; Function BF_Node;
Support Region[{Omega, GammaInf}]; Entity NodesOf[All];}
}
Constraint{
}
}
}//End FunctionSpace
// ============
// FORMULATIONS
// ============
Formulation {
// Formulation for a Dirichlet boundary condition
{ Name Helmholtz; Type FemEquation;
Quantity{
{ Name u ; Type Local; NameOfSpace H_grad;}
}
Equation{
//Helmholtz equation
Galerkin{[Dof{Grad u}, {Grad u}];
In Omega; Jacobian JVol; Integration I1;}
Galerkin{[-k^2*n[]^2*Dof{u}, {u}];
In Omega; Jacobian JVol; Integration I1;}
Galerkin{[-f[], {u}];
In Source; Jacobian JVol; Integration I1;}
//Sommerfeld radiation condition (approx.)
Galerkin{[-I[]*k*n[]*Dof{u}, {u}];
In GammaInf; Jacobian JSur; Integration I1;}
}
}
}//End Formulation
// ===========
// RESOLUTIONS
// ===========
Resolution{
{Name WiFi;
System{ {Name A; NameOfFormulation Helmholtz; Type Complex; } }
Operation{
Generate[A];
Solve[A];
}
}
} // End Resolution
// ================
// POST-PROCESSINGS
// ================
PostProcessing{
{Name Wave; NameOfFormulation Helmholtz;
Quantity {
{Name u; Value {Local { [{u}] ; In Omega; Jacobian JVol; }}}
{Name uNorm; Value {Local { [Norm[{u}]] ; In Omega; Jacobian JVol; }}}
}
}
} // End Postprocessing.
// ===============
// POST-OPERATIONS
// ===============
PostOperation{
{Name Wave; NameOfPostProcessing Wave ;
Operation {
Print [u, OnElementsOf Omega, File "u.pos"];
Print [uNorm, OnElementsOf Omega, File "u_Abs.pos"];
}
}
} // End PostOperation