Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Nektar
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Julia
Nektar
Commits
76ba87a6
Commit
76ba87a6
authored
Feb 10, 2014
by
Chris Cantwell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleaned up formatting.
parent
bf404c28
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
165 additions
and
134 deletions
+165
-134
utilities/PostProcessing/FieldConvert/ProcessQCriterion.cpp
utilities/PostProcessing/FieldConvert/ProcessQCriterion.cpp
+165
-134
No files found.
utilities/PostProcessing/FieldConvert/ProcessQCriterion.cpp
View file @
76ba87a6
...
@@ -47,25 +47,26 @@ namespace Nektar
...
@@ -47,25 +47,26 @@ namespace Nektar
namespace
Utilities
namespace
Utilities
{
{
ModuleKey
ProcessQCriterion
::
className
=
ModuleKey
ProcessQCriterion
::
className
=
GetModuleFactory
().
RegisterCreatorFunction
(
GetModuleFactory
().
RegisterCreatorFunction
(
ModuleKey
(
eProcessModule
,
"QCriterion"
),
ModuleKey
(
eProcessModule
,
"QCriterion"
),
ProcessQCriterion
::
create
,
"Computes Q-Criterion."
);
ProcessQCriterion
::
create
,
"Computes Q-Criterion."
);
ProcessQCriterion
::
ProcessQCriterion
(
FieldSharedPtr
f
)
:
ProcessModule
(
f
)
ProcessQCriterion
::
ProcessQCriterion
(
FieldSharedPtr
f
)
:
ProcessModule
(
f
)
{
{
}
}
ProcessQCriterion
::~
ProcessQCriterion
()
ProcessQCriterion
::~
ProcessQCriterion
()
{
{
}
}
void
ProcessQCriterion
::
Process
(
po
::
variables_map
&
vm
)
void
ProcessQCriterion
::
Process
(
po
::
variables_map
&
vm
)
{
{
if
(
m_f
->
m_verbose
)
if
(
m_f
->
m_verbose
)
{
{
cout
<<
"ProcessQCriterion: Calculating Q Criterion..."
<<
endl
;
cout
<<
"ProcessQCriterion: Calculating Q Criterion..."
<<
endl
;
}
}
int
i
,
j
;
int
i
,
j
;
int
expdim
=
m_f
->
m_graph
->
GetMeshDimension
();
int
expdim
=
m_f
->
m_graph
->
GetMeshDimension
();
int
spacedim
=
expdim
;
int
spacedim
=
expdim
;
...
@@ -77,146 +78,177 @@ namespace Nektar
...
@@ -77,146 +78,177 @@ namespace Nektar
int
nfields
=
m_f
->
m_fielddef
[
0
]
->
m_fields
.
size
();
int
nfields
=
m_f
->
m_fielddef
[
0
]
->
m_fields
.
size
();
if
(
spacedim
==
1
||
spacedim
==
2
)
if
(
spacedim
==
1
||
spacedim
==
2
)
{
{
cerr
<<
"
\n
Error: ProcessQCriterion must be computed for a 3D (or quasi-3D) case.
\n
"
<<
endl
;
cerr
<<
"
\n
Error: ProcessQCriterion must be computed for a 3D"
" (or quasi-3D) case.
\n
"
<<
endl
;
}
}
int
addfields
=
1
;
//For calculating Q-Criterion only 1 field must be added
//For calculating Q-Criterion only 1 field must be added
int
addfields
=
1
;
int
npoints
=
m_f
->
m_exp
[
0
]
->
GetNpoints
();
int
npoints
=
m_f
->
m_exp
[
0
]
->
GetNpoints
();
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
grad
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
grad
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
omega
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
omega
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
S
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
S
(
nfields
*
nfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield1
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield1
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield2
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield2
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield3
(
addfields
);
Array
<
OneD
,
Array
<
OneD
,
NekDouble
>
>
outfield3
(
addfields
);
m_f
->
m_exp
.
resize
(
nfields
+
addfields
);
m_f
->
m_exp
.
resize
(
nfields
+
addfields
);
for
(
i
=
0
;
i
<
nfields
*
nfields
;
++
i
)
for
(
i
=
0
;
i
<
nfields
*
nfields
;
++
i
)
{
{
grad
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
grad
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
}
}
for
(
i
=
0
;
i
<
addfields
;
++
i
)
for
(
i
=
0
;
i
<
addfields
;
++
i
)
{
{
outfield
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
//Will store the Q-Criterion
//Will store the Q-Criterion
outfield1
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield2
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield1
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield3
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield2
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
outfield3
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
omega
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
S
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
omega
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
S
[
i
]
=
Array
<
OneD
,
NekDouble
>
(
npoints
);
}
for
(
i
=
0
;
i
<
nfields
;
++
i
)
{
m_f
->
m_exp
[
i
]
->
PhysDeriv
(
m_f
->
m_exp
[
i
]
->
GetPhys
(),
grad
[
i
*
nfields
],
grad
[
i
*
nfields
+
1
],
grad
[
i
*
nfields
+
2
]);
}
// W_x = Wy - Vz
Vmath
::
Vsub
(
npoints
,
grad
[
2
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
2
],
1
,
outfield1
[
0
],
1
);
// W_x^2
Vmath
::
Vmul
(
npoints
,
outfield1
[
0
],
1
,
outfield1
[
0
],
1
,
outfield1
[
0
],
1
);
// W_y = Uz - Wx
Vmath
::
Vsub
(
npoints
,
grad
[
0
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
0
],
1
,
outfield2
[
0
],
1
);
// W_y^2
Vmath
::
Vmul
(
npoints
,
outfield2
[
0
],
1
,
outfield2
[
0
],
1
,
outfield2
[
0
],
1
);
// W_z = Vx - Uy
Vmath
::
Vsub
(
npoints
,
grad
[
1
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
1
],
1
,
outfield3
[
0
],
1
);
// W_z^2
Vmath
::
Vmul
(
npoints
,
outfield3
[
0
],
1
,
outfield3
[
0
],
1
,
outfield3
[
0
],
1
);
// add fields omega = 0.5*(W_x^2 + W_y^2 + W_z^2)
NekDouble
fac
=
0.5
;
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
omega
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
omega
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
omega
[
0
][
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
omega
[
k
][
0
],
1
,
&
omega
[
k
][
0
],
1
);
}
Vmath
::
Zero
(
npoints
,
&
outfield1
[
0
][
0
],
1
);
Vmath
::
Zero
(
npoints
,
&
outfield2
[
0
][
0
],
1
);
Vmath
::
Zero
(
npoints
,
&
outfield3
[
0
][
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
0
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
0
],
1
,
outfield1
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
1
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
1
],
1
,
outfield2
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
2
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
2
],
1
,
outfield3
[
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
S
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
// W_y + V_z
Vmath
::
Vadd
(
npoints
,
grad
[
2
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
2
],
1
,
outfield1
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield1
[
0
][
0
],
1
,
&
outfield1
[
0
][
0
],
1
);
// U_z + W_x
Vmath
::
Vadd
(
npoints
,
grad
[
0
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
0
],
1
,
outfield2
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
);
// V_x + U_y
Vmath
::
Vadd
(
npoints
,
grad
[
1
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
1
],
1
,
outfield3
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield2
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
outfield3
[
k
][
0
],
1
,
&
outfield3
[
k
][
0
],
1
);
}
Vmath
::
Vadd
(
npoints
,
&
outfield3
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
Vmath
::
Vsub
(
npoints
,
omega
[
0
],
1
,
S
[
0
],
1
,
outfield
[
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
outfield
[
k
][
0
],
1
,
&
outfield
[
k
][
0
],
1
);
}
}
for
(
i
=
0
;
i
<
nfields
;
++
i
)
{
m_f
->
m_exp
[
i
]
->
PhysDeriv
(
m_f
->
m_exp
[
i
]
->
GetPhys
(),
grad
[
i
*
nfields
],
grad
[
i
*
nfields
+
1
],
grad
[
i
*
nfields
+
2
]);
}
// W_x = Wy - Vz
Vmath
::
Vsub
(
npoints
,
grad
[
2
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
2
],
1
,
outfield1
[
0
],
1
);
// W_x^2
Vmath
::
Vmul
(
npoints
,
outfield1
[
0
],
1
,
outfield1
[
0
],
1
,
outfield1
[
0
],
1
);
// W_y = Uz - Wx
Vmath
::
Vsub
(
npoints
,
grad
[
0
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
0
],
1
,
outfield2
[
0
],
1
);
// W_y^2
Vmath
::
Vmul
(
npoints
,
outfield2
[
0
],
1
,
outfield2
[
0
],
1
,
outfield2
[
0
],
1
);
// W_z = Vx - Uy
Vmath
::
Vsub
(
npoints
,
grad
[
1
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
1
],
1
,
outfield3
[
0
],
1
);
// W_z^2
Vmath
::
Vmul
(
npoints
,
outfield3
[
0
],
1
,
outfield3
[
0
],
1
,
outfield3
[
0
],
1
);
// add fields omega = 0.5*(W_x^2 + W_y^2 + W_z^2)
NekDouble
fac
=
0.5
;
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
omega
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
omega
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
omega
[
0
][
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
omega
[
k
][
0
],
1
,
&
omega
[
k
][
0
],
1
);
}
Vmath
::
Zero
(
npoints
,
&
outfield1
[
0
][
0
],
1
);
Vmath
::
Zero
(
npoints
,
&
outfield2
[
0
][
0
],
1
);
Vmath
::
Zero
(
npoints
,
&
outfield3
[
0
][
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
0
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
0
],
1
,
outfield1
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
1
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
1
],
1
,
outfield2
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
grad
[
2
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
2
],
1
,
outfield3
[
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
S
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
// W_y + V_z
Vmath
::
Vadd
(
npoints
,
grad
[
2
*
nfields
+
1
],
1
,
grad
[
1
*
nfields
+
2
],
1
,
outfield1
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield1
[
0
][
0
],
1
,
&
outfield1
[
0
][
0
],
1
);
// U_z + W_x
Vmath
::
Vadd
(
npoints
,
grad
[
0
*
nfields
+
2
],
1
,
grad
[
2
*
nfields
+
0
],
1
,
outfield2
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
);
// V_x + U_y
Vmath
::
Vadd
(
npoints
,
grad
[
1
*
nfields
+
0
],
1
,
grad
[
0
*
nfields
+
1
],
1
,
outfield3
[
0
],
1
);
Vmath
::
Vmul
(
npoints
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield1
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
,
&
outfield2
[
0
][
0
],
1
);
Vmath
::
Vadd
(
npoints
,
&
outfield2
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
,
&
outfield3
[
0
][
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
outfield3
[
k
][
0
],
1
,
&
outfield3
[
k
][
0
],
1
);
}
Vmath
::
Vadd
(
npoints
,
&
outfield3
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
,
&
S
[
0
][
0
],
1
);
Vmath
::
Vsub
(
npoints
,
omega
[
0
],
1
,
S
[
0
],
1
,
outfield
[
0
],
1
);
for
(
int
k
=
0
;
k
<
addfields
;
++
k
)
{
Vmath
::
Smul
(
npoints
,
fac
,
&
outfield
[
k
][
0
],
1
,
&
outfield
[
k
][
0
],
1
);
}
for
(
i
=
0
;
i
<
addfields
;
++
i
)
for
(
i
=
0
;
i
<
addfields
;
++
i
)
{
{
m_f
->
m_exp
[
nfields
+
i
]
=
m_f
->
AppendExpList
();
m_f
->
m_exp
[
nfields
+
i
]
=
m_f
->
AppendExpList
();
m_f
->
m_exp
[
nfields
+
i
]
->
UpdatePhys
()
=
outfield
[
i
];
m_f
->
m_exp
[
nfields
+
i
]
->
UpdatePhys
()
=
outfield
[
i
];
m_f
->
m_exp
[
nfields
+
i
]
->
FwdTrans
(
outfield
[
i
],
m_f
->
m_exp
[
nfields
+
i
]
->
FwdTrans
(
outfield
[
i
],
m_f
->
m_exp
[
nfields
+
i
]
->
UpdateCoeffs
());
m_f
->
m_exp
[
nfields
+
i
]
->
UpdateCoeffs
());
}
}
vector
<
string
>
outname
;
vector
<
string
>
outname
;
outname
.
push_back
(
"Q"
);
outname
.
push_back
(
"Q"
);
std
::
vector
<
LibUtilities
::
FieldDefinitionsSharedPtr
>
FieldDef
std
::
vector
<
LibUtilities
::
FieldDefinitionsSharedPtr
>
FieldDef
=
m_f
->
m_exp
[
0
]
->
GetFieldDefinitions
();
=
m_f
->
m_exp
[
0
]
->
GetFieldDefinitions
();
std
::
vector
<
std
::
vector
<
NekDouble
>
>
FieldData
(
FieldDef
.
size
());
std
::
vector
<
std
::
vector
<
NekDouble
>
>
FieldData
(
FieldDef
.
size
());
for
(
j
=
0
;
j
<
nfields
+
addfields
;
++
j
)
for
(
j
=
0
;
j
<
nfields
+
addfields
;
++
j
)
{
{
for
(
i
=
0
;
i
<
FieldDef
.
size
();
++
i
)
for
(
i
=
0
;
i
<
FieldDef
.
size
();
++
i
)
...
@@ -227,16 +259,15 @@ namespace Nektar
...
@@ -227,16 +259,15 @@ namespace Nektar
}
}
else
else
{
{
FieldDef
[
i
]
->
m_fields
.
push_back
(
m_f
->
m_fielddef
[
0
]
->
m_fields
[
j
]);
FieldDef
[
i
]
->
m_fields
.
push_back
(
m_f
->
m_fielddef
[
0
]
->
m_fields
[
j
]);
}
}
m_f
->
m_exp
[
j
]
->
AppendFieldData
(
FieldDef
[
i
],
FieldData
[
i
]);
m_f
->
m_exp
[
j
]
->
AppendFieldData
(
FieldDef
[
i
],
FieldData
[
i
]);
}
}
}
}
m_f
->
m_fielddef
=
FieldDef
;
m_f
->
m_fielddef
=
FieldDef
;
m_f
->
m_data
=
FieldData
;
m_f
->
m_data
=
FieldData
;
}
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment