NeoN
A framework for CFD software
Loading...
Searching...
No Matches
include
NeoN
dsl
implicit.hpp
Go to the documentation of this file.
1
// SPDX-FileCopyrightText: 2023 - 2026 NeoN authors
2
//
3
// SPDX-License-Identifier: MIT
4
5
#pragma once
6
7
#include "
NeoN/core/primitives/scalar.hpp
"
8
#include "
NeoN/dsl/spatialOperator.hpp
"
9
#include "
NeoN/dsl/temporalOperator.hpp
"
10
#include "
NeoN/dsl/ddt.hpp
"
11
12
// TODO: decouple from fvcc
13
#include "
NeoN/finiteVolume/cellCentred/fields/volumeField.hpp
"
14
#include "
NeoN/finiteVolume/cellCentred/operators/ddtOperator.hpp
"
15
#include "
NeoN/finiteVolume/cellCentred/operators/divOperator.hpp
"
16
#include "
NeoN/finiteVolume/cellCentred/operators/laplacianOperator.hpp
"
17
#include "
NeoN/finiteVolume/cellCentred/operators/sourceTerm.hpp
"
18
19
namespace
fvcc
=
NeoN::finiteVolume::cellCentred
;
20
21
namespace
NeoN::dsl::imp
22
{
23
24
// TODO all arguments could be const
25
template
<
typename
ValueType>
26
TemporalOperator<ValueType>
ddt
(
fvcc::VolumeField<ValueType>
& phi)
27
{
28
return
fvcc::DdtOperator
(
dsl::Operator::Type::Implicit
, phi);
29
}
30
31
// Density-weighted temporal operator ddt(rho, phi): diagonal uses rho, rhs uses
32
// oldTime(rho), giving the conservative (rho_n*phi - rho_o*phi_o)/dt form.
33
template
<
typename
ValueType>
34
TemporalOperator<ValueType>
ddt
(
fvcc::VolumeField<scalar>
& rho,
fvcc::VolumeField<ValueType>
& phi)
35
{
36
return
fvcc::DdtOperator<ValueType>
(
dsl::Operator::Type::Implicit
, rho, phi);
37
}
38
39
template
<
typename
ValueType>
40
SpatialOperator<ValueType>
41
source
(
fvcc::VolumeField<scalar>
& coeff,
fvcc::VolumeField<ValueType>
& phi)
42
{
43
return
SpatialOperator<ValueType>
(
fvcc::SourceTerm
(
dsl::Operator::Type::Implicit
, coeff, phi));
44
}
45
46
// SuSp: sign-aware implicit source — max(coeff, 0) on the diagonal, min(coeff, 0)
47
// explicitly to the rhs. Keeps the matrix diagonally dominant for a coefficient of
48
// either sign (e.g. the kOmegaSST cross-diffusion term).
49
template
<
typename
ValueType>
50
SpatialOperator<ValueType>
susp
(
fvcc::VolumeField<scalar>
& coeff,
fvcc::VolumeField<ValueType>
& phi)
51
{
52
return
SpatialOperator<ValueType>
(
53
fvcc::SourceTerm
(
dsl::Operator::Type::Implicit
, coeff, phi,
true
)
54
);
55
}
56
57
template
<
typename
ValueType>
58
SpatialOperator<ValueType>
59
div
(
fvcc::SurfaceField<scalar>
& faceFlux,
fvcc::VolumeField<ValueType>
& phi)
60
{
61
return
SpatialOperator<ValueType>
(
62
fvcc::DivOperator
(
dsl::Operator::Type::Implicit
, faceFlux, phi)
63
);
64
}
65
66
template
<
typename
ValueType>
67
SpatialOperator<ValueType>
68
laplacian
(
fvcc::SurfaceField<scalar>
& gamma,
fvcc::VolumeField<ValueType>
& phi)
69
{
70
return
SpatialOperator<ValueType>
(
71
fvcc::LaplacianOperator<ValueType>
(
dsl::Operator::Type::Implicit
, gamma, phi)
72
);
73
}
74
75
}
// namespace NeoN
NeoN::dsl::Operator::Type::Implicit
@ Implicit
NeoN::dsl::SpatialOperator
Definition
spatialOperator.hpp:67
NeoN::dsl::TemporalOperator
Definition
temporalOperator.hpp:78
NeoN::finiteVolume::cellCentred::DdtOperator
Definition
ddtOperator.hpp:29
NeoN::finiteVolume::cellCentred::DivOperator
Definition
divOperator.hpp:84
NeoN::finiteVolume::cellCentred::LaplacianOperator
Definition
laplacianOperator.hpp:91
NeoN::finiteVolume::cellCentred::SourceTerm
Definition
sourceTerm.hpp:20
NeoN::finiteVolume::cellCentred::SurfaceField
Represents a surface field in a finite volume method.
Definition
surfaceField.hpp:28
NeoN::finiteVolume::cellCentred::VolumeField
Represents a volume field in a finite volume method.
Definition
volumeField.hpp:31
ddtOperator.hpp
ddt.hpp
divOperator.hpp
laplacianOperator.hpp
NeoN::dsl::imp
Definition
implicit.hpp:22
NeoN::dsl::imp::source
SpatialOperator< ValueType > source(fvcc::VolumeField< scalar > &coeff, fvcc::VolumeField< ValueType > &phi)
Definition
implicit.hpp:41
NeoN::dsl::imp::ddt
TemporalOperator< ValueType > ddt(fvcc::VolumeField< ValueType > &phi)
Definition
implicit.hpp:26
NeoN::dsl::imp::div
SpatialOperator< ValueType > div(fvcc::SurfaceField< scalar > &faceFlux, fvcc::VolumeField< ValueType > &phi)
Definition
implicit.hpp:59
NeoN::dsl::imp::susp
SpatialOperator< ValueType > susp(fvcc::VolumeField< scalar > &coeff, fvcc::VolumeField< ValueType > &phi)
Definition
implicit.hpp:50
NeoN::dsl::imp::laplacian
SpatialOperator< ValueType > laplacian(fvcc::SurfaceField< scalar > &gamma, fvcc::VolumeField< ValueType > &phi)
Definition
implicit.hpp:68
NeoN::finiteVolume::cellCentred
Definition
fieldCollection.hpp:21
scalar.hpp
sourceTerm.hpp
spatialOperator.hpp
temporalOperator.hpp
volumeField.hpp
Generated by
1.9.8