... | @@ -55,19 +55,24 @@ For the creation of the volume conductor, there are 2 possible ways: |
... | @@ -55,19 +55,24 @@ For the creation of the volume conductor, there are 2 possible ways: |
|
|
|
|
|
1.)
|
|
1.)
|
|
- **'volume_conductor.grid.filename' = string**
|
|
- **'volume_conductor.grid.filename' = string**
|
|
The mesh can be passed using on eof the folloing file formats: .msh (gmsh file format), .dgf (DUNE file format), or .geo (SimBio file format)
|
|
The mesh can be passed using one of the following file formats: .msh (gmsh file format), .dgf (DUNE file format), or .geo (SimBio file format)
|
|
|
|
|
|
- **'volume_conductor.tensors.filename' = string**
|
|
- **'volume_conductor.tensors.filename' = string**
|
|
The conductivities can be passed using these file formats: a plain text file listing the conductivities in the order of the labels (e.g., using endings .dat or .cond), or .knw (SimBio file format)**
|
|
The conductivities can be passed using these file formats: a plain text file listing the conductivities in the order of the labels (e.g., using endings .dat or .cond), or .knw (SimBio file format)**
|
|
|
|
|
|
2.)
|
|
2.)
|
|
- **'volume_conductor.grid.elements' = int (#elements x 4 (tet.) or 8 (hex.)**
|
|
- **'volume_conductor.grid.elements' = int (#elements x 4 (tet.) or 8 (hex.)**
|
|
Each element is defined by the indices of nodes that belong to it, the lowest node index is assumed to be 0.
|
|
Each element is defined by the indices of nodes that belong to it, the lowest node index is assumed to be 0.
|
|
|
|
|
|
- **'volume_conductor.grid.nodes' = double (#nodes x 3)**
|
|
- **'volume_conductor.grid.nodes' = double (#nodes x 3)**
|
|
List of node positions
|
|
List of node positions
|
|
|
|
|
|
- **'volume_conductor.tensors.labels' = int (#elements x 1)**
|
|
- **'volume_conductor.tensors.labels' = int (#elements x 1)**
|
|
Index defining to which tissue type an element belongs (starting at 0).
|
|
Index defining to which tissue type an element belongs (starting at 0).
|
|
|
|
|
|
- **'volume_conductor.tensors.conductivities' = double (#labels x 1)**
|
|
- **'volume_conductor.tensors.conductivities' = double (#labels x 1)**
|
|
Isotropic conductivities are passed, corresponding to the order of labels defined above.
|
|
Isotropic conductivities are passed, corresponding to the order of labels defined above.
|
|
|
|
|
|
- **'volume_conductor.tensors.tensors' = double (#labels x 9)**
|
|
- **'volume_conductor.tensors.tensors' = double (#labels x 9)**
|
|
Anisotropic conductivity tensors are given row/column-wise for each labels.
|
|
Anisotropic conductivity tensors are given row/column-wise for each labels.
|
|
|
|
|
... | @@ -76,43 +81,55 @@ For the creation of the volume conductor, there are 2 possible ways: |
... | @@ -76,43 +81,55 @@ For the creation of the volume conductor, there are 2 possible ways: |
|
The number of compartments (tissue types)
|
|
The number of compartments (tissue types)
|
|
|
|
|
|
- **'grid.cells = int (3 x 1)'**
|
|
- **'grid.cells = int (3 x 1)'**
|
|
Number of cells of fundamental mesh in each dimension
|
|
Number of cells of fundamental mesh in each dimension
|
|
|
|
|
|
- **'grid.lower_left' = double (3 x 1)**
|
|
- **'grid.lower_left' = double (3 x 1)**
|
|
Lower left corner coordinate of fundamental mesh
|
|
Lower left corner coordinate of fundamental mesh
|
|
|
|
|
|
- **'grid.upper_right' = double (3 x 1)**
|
|
- **'grid.upper_right' = double (3 x 1)**
|
|
Upper right corner coordinate of fundamental mesh
|
|
Upper right corner coordinate of fundamental mesh
|
|
|
|
|
|
- **'grid.refinements' = int (default:0)**
|
|
- **'grid.refinements' = int (default:0)**
|
|
Number of times to refine the grid
|
|
Number of times to refine the grid
|
|
|
|
|
|
|
|
- **'domain.domains' = string (#tissues)**
|
|
|
|
List of domain names, e.g. 'skin', 'skull', 'brain'
|
|
|
|
|
|
|
|
- **'domain.*domain in domains*.positions' = string**
|
|
|
|
For each domain listed above, the arrangement of each domain in comparison to other domains is specified (interior/exterior relative to the other domains), for instance, for the outer skin layer this might be 'iee'.
|
|
|
|
|
|
- **'domain.domains' = string**
|
|
- **'domain.level_sets = string (#tissues)**
|
|
List of domain names, e.g. 'skin skull brain'
|
|
For each domain listed above, a surface name is indicated, e.g., 'outer_skin', 'skin_skull, 'skull_brain'
|
|
- **'domain.'domain in domains'.positions' = string**
|
|
|
|
Arrangement of each domain in comparison to other domains.
|
|
|
|
|
|
|
|
- **'domain.level_sets = strings**
|
|
- **'domain.*level_set in level_sets*.type' : {'sphere', 'image'}'**
|
|
List of surface names, e.g., 'outer_skin, 'skin_skull, skull_brain'
|
|
For each level_set listed above, the type is indicated as sphere or image (in case of realistic data).
|
|
- **'domain.'level_set in leve_sets'.type' : {'sphere', 'image'}'**
|
|
|
|
The type of the level set: sphere or image (in case of realistic data).
|
|
|
|
|
|
|
|
If 'sphere is chosen, the characteristics of the sphere are indicated:
|
|
If 'sphere' is chosen, the characteristics of the sphere are indicated:
|
|
- **'domain.'level_set in leve_sets'.center' : double**
|
|
- **'domain.*level_set in level_sets*.center' : double (3 x 1)**
|
|
Coordinates of the sphere center.
|
|
Coordinates of the sphere center.
|
|
- **'domain.'level_set in leve_sets'.radius' : double**
|
|
- **'domain.*level_set in level_sets*.radius' : double**
|
|
Radii of each spherical layer.
|
|
Radii of each spherical layer.
|
|
|
|
|
|
If 'image' is chosen, the level set information is passed:
|
|
If 'image' is chosen, the level set information is passed:
|
|
- **'domain.'level_set in leve_sets'.data' : double**
|
|
- **'domain.*level_set in leve_sets*.data' : double (N x N x N)**
|
|
Signed distance function indicating the distance to each surface.
|
|
For a given number of nodes per dimension N, at each point the signed distance function indicating the distance to each surface is given.
|
|
|
|
|
|
## Solver parameters
|
|
## Solver parameters
|
|
|
|
|
|
For both DG and UDG, the solver requires additional parameters:
|
|
For both DG and UDG, the solver requires additional parameters:
|
|
- **'solver.edge_norm_type' : {'structured', 'face', 'cell', 'houston', 'fundamentalcell'}**
|
|
- **'solver.edge_norm_type' : {'structured', 'face', 'cell', 'houston', 'fundamentalcell'} (default: 'houston')**
|
|
|
|
Edge norm providers for interior penalty DG schemes
|
|
|
|
|
|
- **'solver.penalty' : double**
|
|
- **'solver.penalty' : double**
|
|
- **'solver.weights' : {'constant', 'tensorOnly', 'annavarapu', 'barrau'}**
|
|
Parameter in penalty term that is added to the discrete analogue of the weak formulation in the DG method
|
|
|
|
|
|
|
|
- **'solver.weights' : {'constant', 'tensorOnly', ...}**
|
|
|
|
There are different options how to weight the penalty and flux terms on the internal boundaries, 'constant' implies no weighting for the penalty and a 0.5 average of the fluxes, while 'tensorOnly' implies harmonic average for penalty weight and weighting of the flux only based on the tensors of the the inside and outside cells.
|
|
|
|
|
|
- **'solver.scheme' : {'sipg', 'nipg', 'obb'}**
|
|
- **'solver.scheme' : {'sipg', 'nipg', 'obb'}**
|
|
|
|
DG scheme: (standard) Symmetric Interior Penalty Galerkin (SIPG), non-symmetric interior penalty method (NIPG), Oden–Babuška–Baumann (OBB)
|
|
|
|
|
|
For UDG, the conductivities the dollowing parameters are necessary as well:
|
|
For UDG, the conductivities the following parameters are necessary as well:
|
|
- **'solver.conductivities' = double (#compartmentsx1)'**
|
|
- **'solver.conductivities' = double (#compartmentsx1)'**
|
|
The conductivity values for each tissue in the same order as the compartments.
|
|
The conductivity values for each tissue in the same order as the compartments.
|
|
- **'solver.intorderadd' = int**
|
|
- **'solver.intorderadd' = int**
|
... | | ... | |