Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux
Commits
390eb09c
Commit
390eb09c
authored
Dec 22, 2016
by
Dennis Gläser
Browse files
[mpfa] a few minor changes
parent
fa5d5d7c
Changes
14
Hide whitespace changes
Inline
Side-by-side
dumux/discretization/cellcentered/mpfa/helper.hh
View file @
390eb09c
...
...
@@ -75,7 +75,7 @@ public:
unsigned
int
count
=
0
;
ScvfVector
scvfVector
({
nullptr
});
for
(
const
auto
&
scvf
:
scvfs
(
fvGeometry
))
for
(
auto
&
&
scvf
:
scvfs
(
fvGeometry
))
{
if
(
scvf
.
vertexIndex
()
==
vIdxGlobal
)
{
...
...
@@ -473,7 +473,7 @@ public:
auto
elementCenter
=
element
.
geometry
().
center
();
LocalIndexType
count
=
0
;
for
(
const
auto
&
scvf
:
scvfs
(
fvGeometry
))
for
(
auto
&
&
scvf
:
scvfs
(
fvGeometry
))
{
if
(
scvf
.
vertexIndex
()
==
vIdxGlobal
)
{
...
...
dumux/discretization/cellcentered/mpfa/lmethod/helper.hh
View file @
390eb09c
...
...
@@ -83,10 +83,6 @@ public:
fillEntitySeeds_
(
scvSeeds
,
outerScvSeeds
,
globalScvfIndices
,
problem
,
element
,
fvGeometry
,
scvf
);
// free unused memory
scvSeeds
.
shrink_to_fit
();
outerScvSeeds
.
shrink_to_fit
();
// return interaction volume seed
return
InteractionVolumeSeed
(
std
::
move
(
scvSeeds
),
std
::
move
(
outerScvSeeds
),
std
::
move
(
globalScvfIndices
));
}
...
...
@@ -139,19 +135,21 @@ private:
// make the first scv seed, we know this element will NOT be on the lowest local level
auto
scvfVector
=
Implementation
::
getScvFacesAtVertex
(
scvf
.
vertexIndex
(),
element
,
fvGeometry
);
auto
localScvfIdx
=
Implementation
::
getLocalFaceIndex
(
scvf
,
scvfVector
);
auto
globalScvIdx
=
scvf
.
insideScvIdx
();
scvSeeds
.
emplace_back
(
GlobalIndexSet
({
scvfVector
[
0
]
->
index
(),
scvfVector
[
1
]
->
index
()}),
global
ScvIdx
,
scvf
.
inside
ScvIdx
()
,
localScvfIdx
);
// get the surrounding elements and "outside" data
LocalIndexType
otherScvfIdx
=
localScvfIdx
==
1
?
0
:
1
;
LocalIndexType
otherScvfIdx
=
1
-
localScvfIdx
;
auto
e2
=
problem
.
model
().
globalFvGeometry
().
element
(
scvf
.
outsideScvIdx
());
auto
e3
=
problem
.
model
().
globalFvGeometry
().
element
(
scvfVector
[
otherScvfIdx
]
->
outsideScvIdx
());
auto
e2Geometry
=
localView
(
problem
.
model
().
globalFvGeometry
());
auto
e3Geometry
=
localView
(
problem
.
model
().
globalFvGeometry
());
e2Geometry
.
bindElement
(
e2
);
e3Geometry
.
bindElement
(
e3
);
auto
e2Scvfs
=
Implementation
::
getCommonAndNextScvFace
(
scvf
,
e2Geometry
,
/*clockwise?*/
localScvfIdx
==
1
);
auto
e3Scvfs
=
Implementation
::
getCommonAndNextScvFace
(
*
scvfVector
[
otherScvfIdx
],
e3Geometry
,
/*clockwise?*/
localScvfIdx
==
0
);
...
...
@@ -165,16 +163,17 @@ private:
otherScvfIdx
);
// Outer seed for e3, we know the local common scvf index will be localScvfIdx in 2d
const
auto
&
f3
=
*
e3Scvfs
[
localScvfIdx
]
;
outerScvSeeds
.
emplace_back
(
f3
.
inside
ScvIdx
(),
f3
.
index
());
outerScvSeeds
.
emplace_back
(
e3Scvfs
[
localScvfIdx
]
->
insideScvIdx
(),
e3Scvfs
[
local
Scv
f
Idx
]
->
index
());
// Outer seed for outside of e2, we know the local scvf index here will be localScvfIdx in 2d
auto
e4
=
problem
.
model
().
globalFvGeometry
().
element
(
e2Scvfs
[
localScvfIdx
]
->
outsideScvIdx
());
auto
e4Geometry
=
localView
(
problem
.
model
().
globalFvGeometry
());
e4Geometry
.
bindElement
(
e4
);
auto
e4Scvfs
=
Implementation
::
getCommonAndNextScvFace
(
*
e2Scvfs
[
localScvfIdx
],
e4Geometry
,
/*clockwise?*/
localScvfIdx
==
1
);
const
auto
&
f4
=
*
e4Scvfs
[
otherScvfIdx
];
outerScvSeeds
.
emplace_back
(
f4
.
insideScvIdx
(),
f4
.
index
());
outerScvSeeds
.
emplace_back
(
e4Scvfs
[
otherScvfIdx
]
->
insideScvIdx
(),
e4Scvfs
[
otherScvfIdx
]
->
index
());
}
};
...
...
dumux/discretization/cellcentered/mpfa/lmethod/interactionvolume.hh
View file @
390eb09c
...
...
@@ -131,11 +131,10 @@ public:
std
::
array
<
Matrix
,
2
>
M
;
M
[
0
]
=
assembleMatrix_
(
getTensor
,
interactionRegions_
[
0
]);
M
[
1
]
=
assembleMatrix_
(
getTensor
,
interactionRegions_
[
1
]);
const
auto
id
=
MpfaHelper
::
selectionCriterion
(
interactionRegions_
[
0
],
interactionRegions_
[
1
],
M
[
0
],
M
[
1
]);
const
auto
&
ir
=
interactionRegions_
[
id
];
auto
id
=
MpfaHelper
::
selectionCriterion
(
interactionRegions_
[
0
],
interactionRegions_
[
1
],
M
[
0
],
M
[
1
]);
postSolve_
(
interactionRegions_
[
id
]);
T_
=
M
[
id
];
postSolve_
(
ir
);
}
}
...
...
@@ -259,9 +258,9 @@ private:
if
(
regionUnique_
)
{
interactionRegions_
.
reserve
(
1
);
const
auto
&
scvSeed1
=
seed
.
scvSeed
(
0
);
const
auto
&
scvSeed2
=
seed
.
outerScvSeed
(
0
);
const
auto
&
scvSeed3
=
seed
.
outerScvSeed
(
1
);
auto
&
&
scvSeed1
=
seed
.
scvSeed
(
0
);
auto
&
&
scvSeed2
=
seed
.
outerScvSeed
(
0
);
auto
&
&
scvSeed3
=
seed
.
outerScvSeed
(
1
);
auto
e1
=
globalFvGeometry
.
element
(
scvSeed1
.
globalIndex
());
auto
e2
=
globalFvGeometry
.
element
(
scvSeed2
.
globalIndex
());
auto
e3
=
globalFvGeometry
.
element
(
scvSeed3
.
globalIndex
());
...
...
@@ -271,10 +270,10 @@ private:
else
{
interactionRegions_
.
reserve
(
2
);
const
auto
&
scvSeed1
=
seed
.
scvSeed
(
0
);
const
auto
&
scvSeed2
=
seed
.
scvSeed
(
1
);
const
auto
&
outerScvSeed1
=
seed
.
outerScvSeed
(
0
);
const
auto
&
outerScvSeed2
=
seed
.
outerScvSeed
(
1
);
auto
&
&
scvSeed1
=
seed
.
scvSeed
(
0
);
auto
&
&
scvSeed2
=
seed
.
scvSeed
(
1
);
auto
&
&
outerScvSeed1
=
seed
.
outerScvSeed
(
0
);
auto
&
&
outerScvSeed2
=
seed
.
outerScvSeed
(
1
);
auto
e1
=
globalFvGeometry
.
element
(
scvSeed1
.
globalIndex
());
auto
e2
=
globalFvGeometry
.
element
(
scvSeed2
.
globalIndex
());
auto
e3
=
globalFvGeometry
.
element
(
outerScvSeed1
.
globalIndex
());
...
...
dumux/discretization/cellcentered/mpfa/lmethod/interactionvolumeseed.hh
View file @
390eb09c
...
...
@@ -75,9 +75,12 @@ public:
for
(
auto
&&
localScvSeed
:
outerScvSeeds
())
globalIndices
.
push_back
(
localScvSeed
.
globalIndex
());
// make the entries unique
std
::
sort
(
globalIndices
.
begin
(),
globalIndices
.
end
());
globalIndices
.
erase
(
std
::
unique
(
globalIndices
.
begin
(),
globalIndices
.
end
()),
globalIndices
.
end
());
// make the entries unique if interaction region is not uniquely defined
if
(
!
isUnique
())
{
std
::
sort
(
globalIndices
.
begin
(),
globalIndices
.
end
());
globalIndices
.
erase
(
std
::
unique
(
globalIndices
.
begin
(),
globalIndices
.
end
()),
globalIndices
.
end
());
}
return
globalIndices
;
}
...
...
dumux/discretization/cellcentered/mpfa/lmethod/localsubcontrolentityseeds.hh
View file @
390eb09c
...
...
@@ -82,10 +82,10 @@ public:
scvfIndexGlobal_
(
scvSeed
.
globalScvfIndices
()[
scvSeed
.
contiFaceLocalIdx
()])
{}
const
GlobalIndexType
globalIndex
()
const
GlobalIndexType
globalIndex
()
const
{
return
scvIndexGlobal_
;
}
const
GlobalIndexType
globalScvfIndex
()
const
GlobalIndexType
globalScvfIndex
()
const
{
return
scvfIndexGlobal_
;
}
private:
...
...
dumux/discretization/cellcentered/mpfa/omethod/helper.hh
View file @
390eb09c
...
...
@@ -159,8 +159,8 @@ private:
const
ScvfPointerVector
&
scvfVector
,
std
::
vector
<
ScvSeedType
>&
scvSeeds
,
std
::
vector
<
ScvfSeedType
>&
scvfSeeds
,
const
GlobalIndexType
scvIdx0
,
const
bool
clockWise
=
false
)
GlobalIndexType
scvIdx0
,
bool
clockWise
=
false
)
{
// extract the actual local indices from the containers
LocalIndexType
localScvIdx
=
scvSeeds
.
size
();
...
...
@@ -220,8 +220,8 @@ private:
auto
outsideScvfVector
=
Implementation
::
getCommonAndNextScvFace
(
curScvf
,
outsideFvGeometry
,
clockWise
);
GlobalIndexType
commonFaceCoordIdx
=
clockWise
?
0
:
1
;
GlobalIndexType
nextFaceCoordIdx
=
clockWise
?
1
:
0
;
auto
&
commonScvf
=
*
outsideScvfVector
[
commonFaceCoordIdx
];
auto
&
nextScvf
=
*
outsideScvfVector
[
nextFaceCoordIdx
];
auto
&
&
commonScvf
=
*
outsideScvfVector
[
commonFaceCoordIdx
];
auto
&
&
nextScvf
=
*
outsideScvfVector
[
nextFaceCoordIdx
];
// create local scv face entity of the current scvf
LocalIndexType
outsideLocalScvIdx
=
localScvIdx
+
1
;
...
...
@@ -377,7 +377,7 @@ private:
for
(
int
coordDir
=
0
;
coordDir
<
dim
;
++
coordDir
)
{
const
auto
&
actualScvf
=
*
scvfVector
[
coordDir
];
auto
&
&
actualScvf
=
*
scvfVector
[
coordDir
];
// if scvf is on a boundary, we create the scvfSeed and make no neighbor
if
(
actualScvf
.
boundary
())
...
...
@@ -405,8 +405,8 @@ private:
// find scvf in outside corresponding to the actual scvf
auto
outsideScvfVector
=
Implementation
::
getScvFacesAtVertex
(
vIdxGlobal
,
outsideElement
,
outsideFvGeometry
);
auto
commonFaceLocalIdx
=
Implementation
::
getCommonFaceLocalIndex
(
actualScvf
,
outsideScvfVector
);
const
auto
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
const
auto
outsideScvfIdx
=
outsideScvf
.
index
();
auto
&
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
auto
outsideScvfIdx
=
outsideScvf
.
index
();
// check if the outside scv already exists and get its local index
bool
outsideScvExists
=
false
;
...
...
@@ -415,8 +415,7 @@ private:
{
if
(
scvSeed
.
globalIndex
()
==
outsideGlobalScvIdx
)
{
outsideScvExists
=
true
;
break
;
outsideScvExists
=
true
;
break
;
}
// keep track of local index
outsideLocalScvIdx
++
;
...
...
@@ -657,8 +656,7 @@ private:
{
if
(
scvSeed
.
globalIndex
()
==
outsideGlobalScvIdx
)
{
outsideExists
=
true
;
break
;
outsideExists
=
true
;
break
;
}
// keep track of local index
outsideLocalScvIdx
++
;
...
...
@@ -678,7 +676,7 @@ private:
// find scvf in outside corresponding to the actual scvf
auto
outsideScvfVector
=
Implementation
::
getScvFacesAtVertex
(
vIdxGlobal
,
outsideElement
,
outsideFvGeometry
);
auto
commonFaceLocalIdx
=
Implementation
::
getCommonFaceLocalIndex
(
actualScvf
,
outsideScvfVector
);
const
auto
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
auto
&
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
// create scvf seed
scvfSeeds
.
emplace_back
(
actualScvf
,
...
...
@@ -725,7 +723,7 @@ private:
// find scvf in outside corresponding to the actual scvf
auto
outsideScvfVector
=
Implementation
::
getScvFacesAtVertex
(
vIdxGlobal
,
outsideElement
,
outsideFvGeometry
);
auto
commonFaceLocalIdx
=
Implementation
::
getCommonFaceLocalIndex
(
actualScvf
,
outsideScvfVector
);
const
auto
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
auto
&
&
outsideScvf
=
*
outsideScvfVector
[
commonFaceLocalIdx
];
// make scv face seed
scvfSeeds
.
emplace_back
(
actualScvf
,
...
...
dumux/discretization/cellcentered/mpfa/omethod/interactionvolume.hh
View file @
390eb09c
...
...
@@ -142,9 +142,9 @@ public:
createLocalEntities_
(
seed
);
// reserve memory
const
auto
numLocalScvs
=
localScvs_
.
size
();
const
auto
numLocalScvfs
=
localScvfs_
.
size
();
const
auto
maxNumVolVars
=
numLocalScvs
+
numLocalScvfs
;
auto
numLocalScvs
=
localScvs_
.
size
();
auto
numLocalScvfs
=
localScvfs_
.
size
();
auto
maxNumVolVars
=
numLocalScvs
+
numLocalScvfs
;
volVarsStencil_
=
seed
.
globalScvIndices
();
// boundary vol vars are placed at the end
volVarsStencil_
.
reserve
(
maxNumVolVars
);
volVarsPositions_
.
reserve
(
maxNumVolVars
);
...
...
@@ -152,12 +152,12 @@ public:
fluxFaceIndexSet_
.
reserve
(
numLocalScvfs
);
// the positions where the vol vars are defined at (required for the gravitational acceleration)
for
(
const
auto
&
localScv
:
localScvs_
)
for
(
auto
&
&
localScv
:
localScvs_
)
volVarsPositions_
.
push_back
(
localScv
.
center
());
// eventually add dirichlet vol var indices and set up local index sets of flux and dirichlet faces
LocalIndexType
localScvfIdx
=
0
;
for
(
const
auto
&
localScvf
:
localScvfs_
)
for
(
auto
&
&
localScvf
:
localScvfs_
)
{
// eventually add vol var index and corresponding position
if
(
localScvf
.
faceType
()
==
MpfaFaceTypes
::
dirichlet
)
...
...
@@ -203,20 +203,20 @@ public:
T_
+=
D
;
}
void
assembleNeumannFluxes
(
const
unsigned
int
eqIdx
)
void
assembleNeumannFluxes
(
unsigned
int
eqIdx
)
{
if
(
!
onBoundary
()
||
GET_PROP_VALUE
(
TypeTag
,
UseTpfaBoundary
))
return
;
LocalIndexType
fluxFaceIdx
=
0
;
for
(
const
auto
localFluxFaceIdx
:
fluxFaceIndexSet_
)
for
(
auto
localFluxFaceIdx
:
fluxFaceIndexSet_
)
{
const
auto
&
localScvf
=
localScvf_
(
localFluxFaceIdx
);
auto
&
&
localScvf
=
localScvf_
(
localFluxFaceIdx
);
const
auto
faceType
=
localScvf
.
faceType
();
if
(
faceType
==
MpfaFaceTypes
::
neumann
)
{
const
auto
&
element
=
localElement_
(
localScvf
.
insideLocalScvIndex
());
const
auto
&
globalScvf
=
fvGeometry_
().
scvf
(
localScvf
.
insideGlobalScvfIndex
());
auto
&
&
element
=
localElement_
(
localScvf
.
insideLocalScvIndex
());
auto
&
&
globalScvf
=
fvGeometry_
().
scvf
(
localScvf
.
insideGlobalScvfIndex
());
auto
neumannFlux
=
problem_
().
neumann
(
element
,
this
->
fvGeometry_
(),
this
->
elemVolVars_
(),
globalScvf
)[
eqIdx
];
neumannFlux
*=
globalScvf
.
area
();
...
...
@@ -237,7 +237,7 @@ public:
auto
scvfGlobalIdx
=
scvf
.
index
();
LocalIndexType
localIdx
=
0
;
for
(
const
auto
&
localScvf
:
localScvfs_
)
for
(
auto
&
&
localScvf
:
localScvfs_
)
{
if
(
localScvf
.
insideGlobalScvfIndex
()
==
scvfGlobalIdx
)
return
LocalFaceData
(
localIdx
,
localScvf
.
insideLocalScvIndex
(),
false
);
...
...
@@ -257,10 +257,10 @@ public:
typename
std
::
enable_if
<
(
d
<
dw
),
LocalFaceData
>::
type
getLocalFaceData
(
const
SubControlVolumeFace
&
scvf
)
const
{
const
auto
scvfGlobalIdx
=
scvf
.
index
();
auto
scvfGlobalIdx
=
scvf
.
index
();
LocalIndexType
localFaceIdx
=
0
;
for
(
const
auto
&
localScvf
:
localScvfs_
)
for
(
auto
&
&
localScvf
:
localScvfs_
)
{
if
(
localScvf
.
insideGlobalScvfIndex
()
==
scvfGlobalIdx
)
return
LocalFaceData
(
localFaceIdx
,
localScvf
.
insideLocalScvIndex
(),
false
);
...
...
@@ -271,7 +271,7 @@ public:
return
LocalFaceData
(
localFaceIdx
,
localScvf
.
outsideLocalScvIndex
(),
true
);
// Now we have to find wich local scv is the one the global scvf is embedded in
const
auto
scvGlobalIdx
=
scvf
.
insideScvIdx
();
auto
scvGlobalIdx
=
scvf
.
insideScvIdx
();
for
(
auto
localScvIdx
:
localScvf
.
outsideLocalScvIndices
())
if
(
localScv_
(
localScvIdx
).
globalIndex
()
==
scvGlobalIdx
)
return
LocalFaceData
(
localFaceIdx
,
localScvIdx
,
true
);
...
...
@@ -311,16 +311,16 @@ public:
DynamicVector
tij
(
volVarsStencil
().
size
(),
0.0
);
// get the local scv and iterate over local coordinates
const
std
::
size_t
numLocalScvs
=
localScvs_
.
size
();
const
auto
&
localScv
=
localScv_
(
localFaceData
.
localScvIndex
);
const
auto
&
localScvf
=
localScvf_
(
localFaceData
.
localScvfIndex
);
std
::
size_t
numLocalScvs
=
localScvs_
.
size
();
auto
&
&
localScv
=
localScv_
(
localFaceData
.
localScvIndex
);
auto
&
&
localScvf
=
localScvf_
(
localFaceData
.
localScvfIndex
);
auto
idxInOutside
=
this
->
findLocalIndex
(
localScvf
.
outsideLocalScvIndices
(),
localFaceData
.
localScvIndex
);
const
auto
&
wijk
=
wijk_
[
localFaceData
.
localScvfIndex
][
idxInOutside
+
1
];
auto
&
&
wijk
=
wijk_
[
localFaceData
.
localScvfIndex
][
idxInOutside
+
1
];
for
(
int
localDir
=
0
;
localDir
<
dim
;
localDir
++
)
{
auto
localScvfIdx
=
localScv
.
localScvfIndex
(
localDir
);
const
auto
&
localScvf
=
localScvf_
(
localScvfIdx
);
auto
&
&
localScvf
=
localScvf_
(
localScvfIdx
);
// add entries from the face unknowns
if
(
localScvf
.
faceType
()
!=
MpfaFaceTypes
::
dirichlet
)
...
...
@@ -393,17 +393,17 @@ private:
localScvs_
.
reserve
(
numScvs
);
localScvfs_
.
reserve
(
numScvfs
);
for
(
const
auto
&
scvSeed
:
seed
.
scvSeeds
())
for
(
auto
&
&
scvSeed
:
seed
.
scvSeeds
())
{
auto
element
=
problem_
().
model
().
globalFvGeometry
().
element
(
scvSeed
.
globalIndex
());
localScvs_
.
emplace_back
(
LocalScvType
(
problem_
(),
element
,
fvGeometry_
(),
scvSeed
));
localElements_
.
emplace_back
(
std
::
move
(
element
));
}
for
(
const
auto
&
scvfSeed
:
seed
.
scvfSeeds
())
for
(
auto
&
&
scvfSeed
:
seed
.
scvfSeeds
())
{
// we have to use the "inside" scv face here
const
auto
&
scvf
=
fvGeometry_
().
scvf
(
scvfSeed
.
insideGlobalScvfIndex
());
auto
&
&
scvf
=
fvGeometry_
().
scvf
(
scvfSeed
.
insideGlobalScvfIndex
());
localScvfs_
.
emplace_back
(
LocalScvfType
(
scvfSeed
,
scvf
));
}
}
...
...
@@ -422,16 +422,16 @@ private:
// loop over the local faces
LocalIndexType
rowIdx
=
0
;
for
(
const
auto
&
localScvf
:
localScvfs_
)
for
(
auto
&
&
localScvf
:
localScvfs_
)
{
auto
faceType
=
localScvf
.
faceType
();
bool
hasUnknown
=
faceType
!=
MpfaFaceTypes
::
dirichlet
;
LocalIndexType
idxInFluxFaces
=
hasUnknown
?
this
->
findLocalIndex
(
fluxScvfIndexSet_
(),
rowIdx
)
:
-
1
;
// get diffusion tensor in "positive" sub volume
const
auto
posLocalScvIdx
=
localScvf
.
insideLocalScvIndex
();
const
auto
&
posLocalScv
=
localScv_
(
posLocalScvIdx
);
const
auto
&
posGlobalScv
=
fvGeometry_
().
scv
(
posLocalScv
.
globalIndex
());
auto
posLocalScvIdx
=
localScvf
.
insideLocalScvIndex
();
auto
&
&
posLocalScv
=
localScv_
(
posLocalScvIdx
);
auto
&
&
posGlobalScv
=
fvGeometry_
().
scv
(
posLocalScv
.
globalIndex
());
auto
element
=
localElement_
(
posLocalScvIdx
);
auto
tensor
=
getTensor
(
element
,
elemVolVars_
()[
posGlobalScv
],
posGlobalScv
);
...
...
@@ -443,7 +443,7 @@ private:
for
(
int
localDir
=
0
;
localDir
<
dim
;
localDir
++
)
{
auto
curLocalScvfIdx
=
posLocalScv
.
localScvfIndex
(
localDir
);
const
auto
&
curLocalScvf
=
localScvf_
(
curLocalScvfIdx
);
auto
&
&
curLocalScvf
=
localScvf_
(
curLocalScvfIdx
);
// First, add the entries associated with face pressures (unkown or dirichlet)
if
(
curLocalScvf
.
faceType
()
!=
MpfaFaceTypes
::
dirichlet
)
...
...
@@ -482,8 +482,8 @@ private:
unsigned
int
indexInOutsideData
=
0
;
for
(
auto
negLocalScvIdx
:
localScvf
.
outsideLocalScvIndices
())
{
const
auto
&
negLocalScv
=
localScv_
(
negLocalScvIdx
);
const
auto
&
negGlobalScv
=
fvGeometry_
().
scv
(
negLocalScv
.
globalIndex
());
auto
&
&
negLocalScv
=
localScv_
(
negLocalScvIdx
);
auto
&
&
negGlobalScv
=
fvGeometry_
().
scv
(
negLocalScv
.
globalIndex
());
auto
negElement
=
localElement_
(
negLocalScvIdx
);
auto
negTensor
=
getTensor
(
negElement
,
elemVolVars_
()[
negGlobalScv
],
negGlobalScv
);
...
...
@@ -494,7 +494,7 @@ private:
if
(
dim
<
dimWorld
)
{
// outside scvf
auto
&&
outsideScvf
=
fvGeometry_
().
scvf
(
localScvf
.
outsideGlobalScvfInd
ices
()[
indexInOutsideData
]
);
auto
&&
outsideScvf
=
fvGeometry_
().
scvf
(
localScvf
.
outsideGlobalScvfInd
ex
(
indexInOutsideData
)
);
auto
negNormal
=
outsideScvf
.
unitOuterNormal
();
negNormal
*=
-
1.0
;
negWijk
=
calculateOmegas_
(
negLocalScv
,
negNormal
,
localScvf
.
area
(),
negTensor
);
...
...
@@ -509,7 +509,7 @@ private:
for
(
int
localDir
=
0
;
localDir
<
dim
;
localDir
++
)
{
auto
curLocalScvfIdx
=
negLocalScv
.
localScvfIndex
(
localDir
);
const
auto
&
curLocalScvf
=
localScvf_
(
curLocalScvfIdx
);
auto
&
&
curLocalScvf
=
localScvf_
(
curLocalScvfIdx
);
if
(
curLocalScvf
.
faceType
()
!=
MpfaFaceTypes
::
dirichlet
)
{
...
...
@@ -558,12 +558,12 @@ private:
// Loop over all the faces, in this case these are all dirichlet boundaries
LocalIndexType
rowIdx
=
0
;
for
(
const
auto
&
localScvf
:
localScvfs_
)
for
(
auto
&
&
localScvf
:
localScvfs_
)
{
// get diffusion tensor in "positive" sub volume
const
auto
posLocalScvIdx
=
localScvf
.
insideLocalScvIndex
();
const
auto
&
posLocalScv
=
localScv_
(
posLocalScvIdx
);
const
auto
&
posGlobalScv
=
fvGeometry_
().
scv
(
posLocalScv
.
globalIndex
());
auto
posLocalScvIdx
=
localScvf
.
insideLocalScvIndex
();
auto
&
&
posLocalScv
=
localScv_
(
posLocalScvIdx
);
auto
&
&
posGlobalScv
=
fvGeometry_
().
scv
(
posLocalScv
.
globalIndex
());
auto
element
=
localElement_
(
posLocalScvIdx
);
auto
tensor
=
getTensor
(
element
,
elemVolVars_
()[
posGlobalScv
],
posGlobalScv
);
...
...
dumux/discretization/cellcentered/mpfa/omethod/interactionvolumeseed.hh
View file @
390eb09c
...
...
@@ -82,7 +82,6 @@ public:
globalIndices
.
push_back
(
scvfIdxGlobal
);
}
globalIndices
.
shrink_to_fit
();
return
globalIndices
;
}
...
...
dumux/discretization/cellcentered/mpfa/omethod/localsubcontrolentities.hh
View file @
390eb09c
...
...
@@ -141,41 +141,32 @@ public:
area_
(
scvf
.
area
())
{}
const
GlobalIndexType
insideGlobalScvfIndex
()
const
GlobalIndexType
insideGlobalScvfIndex
()
const
{
return
scvfSeed_
().
insideGlobalScvfIndex
();
}
GlobalIndexType
insideGlobalScvIndex
()
const
{
return
scvfSeed_
().
insideGlobalScvIndex
();
}
LocalIndexType
insideLocalScvIndex
()
const
{
return
scvfSeed_
().
insideLocalScvIndex
();
}
const
GlobalIndexSet
&
outsideGlobalScvfIndices
()
const
{
return
scvfSeed_
().
outsideGlobalScvfIndices
();
}
const
GlobalIndexType
outsideGlobalScvfIndex
()
const
{
assert
(
scvfSeed_
().
outsideGlobalScvfIndices
().
size
()
==
1
&&
"outside scvf index not uniquely defined"
);
return
scvfSeed_
().
outsideGlobalScvfIndices
()[
0
];
}
const
LocalIndexType
insideLocalScvIndex
()
const
{
return
scvfSeed_
().
insideLocalScvIndex
();
}
const
GlobalIndexSet
&
outsideGlobalScvIndices
()
const
{
return
scvfSeed_
().
outsideGlobalScvIndices
();
}
const
LocalIndexSet
&
outsideLocalScvIndices
()
const
{
return
scvfSeed_
().
outsideLocalScvIndices
();
}
const
LocalIndexType
outsideLocalScvIndex
()
const
{
assert
(
scvfSeed_
().
outsideLocalScvIndices
().
size
()
==
1
&&
"outside local scv index not uniquely defined"
);
return
scvfSeed_
().
outsideLocalScvIndices
()[
0
];
}
GlobalIndexType
outsideGlobalScvfIndex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
scvfSeed_
().
outsideGlobalScvfIndex
(
outsideIdx
);
}
const
GlobalIndexType
in
sideGlobalScvIndex
()
const
{
return
scvfSeed_
().
in
sideGlobalScvIndex
();
}
GlobalIndexType
out
sideGlobalScvIndex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
scvfSeed_
().
out
sideGlobalScvIndex
(
outsideIdx
);
}
const
GlobalIndexSet
&
outsideGlobalScvIndices
()
const
{
return
scvfSeed_
().
outsideGlobalScvIndices
();
}
const
GlobalIndexType
outsideGlobalScvIndex
()
const
{
assert
(
scvfSeed_
().
outsideGlobalScvIndices
().
size
()
==
1
&&
"outside scv index not uniquely defined"
);
return
scvfSeed_
().
outsideGlobalScvIndices
()[
0
];
}
LocalIndexType
outsideLocalScvIndex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
scvfSeed_
().
outsideLocalScvIndex
(
outsideIdx
);
}
MpfaFaceTypes
faceType
()
const
{
return
scvfSeed_
().
faceType
();
}
...
...
dumux/discretization/cellcentered/mpfa/omethod/localsubcontrolentityseeds.hh
View file @
390eb09c
...
...
@@ -123,30 +123,33 @@ public:
outsideGlobalScvfIndices_
.
reserve
(
size
);
}
const
GlobalIndexType
insideGlobalScvfIndex
()
const
GlobalIndexType
insideGlobalScvfIndex
()
const
{
return
insideScvfGlobalIdx_
;
}
const
GlobalIndexSet
&
outsideGlobalScvfIndices
()
const
{
return
outsideGlobalScvfIndices_
;
}
const
GlobalIndexType
outsideGlobalScvfIndex
()
const
{
assert
(
outsideGlobalScvfIndices_
.
size
()
==
1
&&
"outside global scvf index not uniquely defined"
);
return
outsideGlobalScvfIndices_
[
0
];
}
GlobalIndexType
insideGlobalScvIndex
()
const
{
return
insideScvGlobalIdx_
;
}
const
LocalIndexType
insideLocalScvIndex
()
const
LocalIndexType
insideLocalScvIndex
()
const
{
return
insideScvLocalIdx_
;
}
const
Loc
alIndex
Set
&
outside
Loc
alScvInd
ices
(
)
const
{
return
outside
Loc
alScvIndices_
;
}
Glob
alIndex
Type
outside
Glob
alScv
f
Ind
ex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
outside
Glob
alScv
f
Indices_
[
outsideIdx
]
;
}
const
GlobalIndexType
insideGlobalScvIndex
()
const
{
return
insideScvGlobalIdx_
;
}
GlobalIndexType
outsideGlobalScvIndex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
outsideGlobalScvIndices_
[
outsideIdx
];
}
LocalIndexType
outsideLocalScvIndex
(
unsigned
int
outsideIdx
=
0
)
const
{
return
outsideLocalScvIndices_
[
outsideIdx
];
}
const
GlobalIndexSet
&
outsideGlobalScvfIndices
()
const
{
return
outsideGlobalScvfIndices_
;
}
const
GlobalIndexSet
&
outsideGlobalScvIndices
()
const
{
return
outsideGlobalScvIndices_
;
}
const
LocalIndexSet
&
outsideLocalScvIndices
()
const
{
return
outsideLocalScvIndices_
;
}
MpfaFaceTypes
faceType
()
const
{
return
faceType_
;
}
...
...
dumux/discretization/cellcentered/mpfa/omethodfps/helper.hh
View file @
390eb09c
...
...
@@ -30,10 +30,11 @@ namespace Dumux
/*!
* \ingroup Mpfa
* \brief Helper class to get the required information on an interaction volume.
*
Specialization for
the
M
pfa-
O
method
in two dimensions
.
*
We simply forward to
the
m
pfa-
o
method
here
.
*/
template
<
class
TypeTag
,
int
dim
,
int
dimWorld
>
class
MpfaMethodHelper
<
TypeTag
,
MpfaMethods
::
oMethodFps
,
dim
,
dimWorld
>
:
public
MpfaMethodHelper
<
TypeTag
,
MpfaMethods
::
oMethod
,
dim
,
dimWorld
>
class
MpfaMethodHelper
<
TypeTag
,
MpfaMethods
::
oMethodFps
,
dim
,
dimWorld
>
:
public
MpfaMethodHelper
<
TypeTag
,
MpfaMethods
::
oMethod
,
dim
,
dimWorld
>
{};
}
// end namespace
...
...
dumux/discretization/cellcentered/mpfa/omethodfps/interactionvolume.hh
View file @
390eb09c
...
...
@@ -147,7 +147,7 @@ public:
this
->
T_
+=
mc
.
BF
;
}
void
assembleNeumannFluxes
(
const
unsigned
int
eqIdx
)
void
assembleNeumannFluxes
(
unsigned
int
eqIdx
)
{
ParentType
::
assembleNeumannFluxes
(
eqIdx
);
...
...
@@ -156,7 +156,7 @@ public:
auto
&
neumannFluxes
=
this
->
neumannFluxes_
;