Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
L
LDD-for-two-phase-flow-systems
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
Container registry
Model registry
Operate
Environments
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
David Seus
LDD-for-two-phase-flow-systems
Commits
3a7fc0d5
Commit
3a7fc0d5
authored
Mar 8, 2019
by
David Seus
Browse files
Options
Downloads
Patches
Plain Diff
add init_boundary_markers, add support for rel perm as callable object
parent
4b6ac188
No related branches found
No related tags found
No related merge requests found
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
domainPatch.py
+81
-21
81 additions, 21 deletions
domainPatch.py
with
81 additions
and
21 deletions
domainPatch.py
+
81
−
21
View file @
3a7fc0d5
...
...
@@ -17,7 +17,9 @@ Assumed is the use of python 3.6
import
dolfin
as
df
import
mshr
import
numpy
as
np
# import domainPatch as dp
import
typing
as
tp
# Interface = tp.NewType('Interface', tp.any)
#import domainPatch as domainPatch
...
...
@@ -48,6 +50,9 @@ class DomainPatch(df.SubDomain):
present (isRichards == False) viscosity[1] is
assumed to be the viscosity of the non-wetting phase.
interfaces: #type tp.List[dp.Interface] List of Interface class
objects from the LDDsimulation
class.
has_interface #type tp.List[int]: list of indices (w.r.t. the global
numbering of interfaces in
LDDsimulation.interfaces) indicating
...
...
@@ -69,25 +74,31 @@ class DomainPatch(df.SubDomain):
## Public Variables
self.isRichards #type bool set by input, see above
self.mesh #type df.Mesh set by input, see above
self.porosity #type float set by input, see above
self.viscosity #type tp.List[float] set by input, see above
self.has_interface #type tp.List[int] set by input, see above
self.L #type tp.List[float] set by input, see above
self.lambda_param #type tp.List[float] set by input, see above
self.function_space #type tp.Dict[str: df.Function] function space
isRichards #type bool set by input, see above
mesh #type df.Mesh set by input, see above
porosity #type float set by input, see above
viscosity #type tp.List[float] set by input, see above
interfaces: #type tp.List[dp.Interface] set by input, see above
has_interface #type tp.List[int] set by input, see above
L #type tp.List[float] set by input, see above
lambda_param #type tp.List[float] set by input, see above
function_space #type tp.Dict[str: df.Function] function space
used for wetting
and nonwetting
pressures. This is
set by
self._init_function_space()
parent_mesh_index #type np.array parent vertex map of the submesh.
boundary_marker #type df.MeshFunction marker function to mark all
boundaries of the subdomain.
The marker value marking
interface i with global index
has_interface[i] will be
has_interface[i] aswell.
## Public Methods
"""
# default class variable values
tol
:
float
=
df
.
DOLFIN_EPS
### constructor
def
__init__
(
self
,
#
...
...
@@ -95,9 +106,12 @@ class DomainPatch(df.SubDomain):
mesh
:
df
.
Mesh
,
#
porosity
:
float
,
#
viscosity
:
tp
.
List
[
float
],
#
# tp.List[Interface] doesn't work, because it hasen't been defined yet.
interfaces
:
tp
.
List
[
object
],
#
has_interface
:
tp
.
List
[
int
],
#
L
:
tp
.
List
[
float
],
#
lambda_param
:
tp
.
List
[
float
],
#
relative_permeability
:
tp
.
Callable
[...,
None
]
#
):
# because we declare our own __init__ method for the derived class BoundaryPart,
# we overwrite the __init__-method of the parent class df.SubDomain. However,
...
...
@@ -109,11 +123,15 @@ class DomainPatch(df.SubDomain):
self
.
mesh
=
mesh
self
.
porosity
=
porosity
self
.
viscosity
=
viscosity
self
.
interface
=
interfaces
self
.
has_interface
=
has_interface
self
.
L
=
L
self
.
lambda_param
=
lambda_param
self
.
relative_permeability
=
relative_permeability
self
.
_init_function_space
()
self
.
_init_dof_and_vertex_maps
()
self
.
_init_boundary_markers
()
# END constructor
...
...
@@ -124,7 +142,8 @@ class DomainPatch(df.SubDomain):
"""
create function space for solution and trial functions
Note that P1 FEM is hard coded here, as it is assumed in other methods
aswell.
aswell. This method sets the class variable
self.function_space
"""
if
self
.
isRichards
:
self
.
function_space
=
{
'
wetting
'
:
df
.
FunctionSpace
(
self
.
mesh
,
'
P
'
,
1
)}
...
...
@@ -133,6 +152,47 @@ class DomainPatch(df.SubDomain):
'
wetting
'
:
df
.
FunctionSpace
(
self
.
mesh
,
'
P
'
,
1
),
#
'
nonwetting
'
:
df
.
FunctionSpace
(
self
.
mesh
,
'
P
'
,
1
)
#
}
def
_init_dof_and_vertex_maps
(
self
)
->
None
:
"""
calculate dof maps and the vertex to parent map.
This method sets the class Variables
self.parent_mesh_index
self.dof2vertex
self.vertex2dof
"""
mesh_data
=
self
.
mesh
.
data
()
self
.
parent_mesh_index
=
mesh_data
.
array
(
'
parent_vertex_indices
'
,
0
)
if
self
.
isRichards
:
self
.
dof2vertex
=
{
#
'
wetting
'
:
df
.
dof_to_vertex_map
(
self
.
function_space
[
'
wetting
'
])
#
}
self
.
vertex2dof
=
{
#
'
wetting
'
:
df
.
vertex_to_dof_map
(
self
.
function_space
[
'
wetting
'
])
#
}
else
:
self
.
dof2vertex
=
{
#
'
wetting
'
:
df
.
dof_to_vertex_map
(
self
.
function_space
[
'
wetting
'
]),
#
'
nonwetting
'
:
df
.
dof_to_vertex_map
(
self
.
function_space
[
'
nonwetting
'
])
#
}
self
.
vertex2dof
=
{
#
'
wetting
'
:
df
.
vertex_to_dof_map
(
self
.
function_space
[
'
wetting
'
]),
#
'
nonwetting
'
:
df
.
vertex_to_dof_map
(
self
.
function_space
[
'
nonwetting
'
])
#
}
def
_init_boundary_markers
(
self
)
->
None
:
"""
define boundary markers
This method sets the class Variables
self.boundary_marker
"""
self
.
boundary_marker
=
df
.
MeshFunction
(
'
size_t
'
,
self
.
mesh
,
self
.
mesh
.
topology
().
dim
()
-
1
)
self
.
boundary_marker
.
set_all
(
0
)
for
glob_index
in
self
.
has_interface
:
# each interface gets marked with the global interface index.
self
.
interface
[
glob_index
].
mark
(
self
.
boundary_marker
,
glob_index
)
# END is_Richards
# END OF CLASS DomainPatch
...
...
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