Skip to content

Commit

Permalink
Merge pull request #2901 from TomFischer/AddFurtherBulkElementMappings
Browse files Browse the repository at this point in the history
Add bulk element mappings for triangles.
  • Loading branch information
bilke authored Apr 16, 2020
2 parents d658b62 + 5179a17 commit fd52f38
Show file tree
Hide file tree
Showing 15 changed files with 278 additions and 6 deletions.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ pipeline {
// Doxygen is handled by gcc4 parser as well
tools: [gcc4(name: 'Doxygen', id: 'doxygen',
pattern: 'build/DoxygenWarnings.log')],
unstableTotalAll: 1
unstableTotalAll: 2
}
success {
publishHTML(target: [allowMissing: false, alwaysLinkToLastBuild: true,
Expand Down
26 changes: 25 additions & 1 deletion MeshLib/Elements/MapBulkElementPoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,25 @@

namespace MeshLib
{
MathLib::Point3d getBulkElementPoint(MeshLib::Tri const& /*tri*/,
std::size_t const face_id,
MathLib::WeightedPoint1D const& wp)
{
switch (face_id)
{
case 0:
return MathLib::Point3d{std::array<double, 3>{{wp[0], 0.0, 0.0}}};
case 1:
return MathLib::Point3d{
std::array<double, 3>{{1 - wp[0], wp[0], 0.0}}};
case 2:
return MathLib::Point3d{
std::array<double, 3>{{0.0, 1 - wp[0], 0.0}}};
default:
OGS_FATAL("Invalid face id '{:d}' for the tri.", face_id);
}
}

MathLib::Point3d getBulkElementPoint(MeshLib::Quad const& /*quad*/,
std::size_t const face_id,
MathLib::WeightedPoint1D const& wp)
Expand Down Expand Up @@ -74,7 +93,7 @@ MathLib::Point3d getBulkElementPoint(MeshLib::Tet const& /*tet*/,
std::array<double, 3>{{1 - wp[0] - wp[1], wp[0], wp[1]}}};
case 3:
return MathLib::Point3d{
std::array<double, 3>{{0, 1 - wp[0], wp[1]}}};
std::array<double, 3>{{0, wp[1], wp[0]}}};
default:
OGS_FATAL("Invalid face id '{:d}' for the tetrahedron.", face_id);
}
Expand Down Expand Up @@ -117,6 +136,11 @@ MathLib::Point3d getBulkElementPoint(MeshLib::Mesh const& mesh,
MeshLib::Quad const& quad(*dynamic_cast<MeshLib::Quad const*>(element));
return getBulkElementPoint(quad, bulk_face_id, wp);
}
if (element->getCellType() == MeshLib::CellType::TRI3)
{
MeshLib::Tri const& tri = *static_cast<MeshLib::Tri const*>(element);
return getBulkElementPoint(tri, bulk_face_id, wp);
}
OGS_FATAL("Wrong cell type '{:s}' or functionality not yet implemented.",
MeshLib::CellType2String(element->getCellType()));
}
Expand Down
21 changes: 19 additions & 2 deletions MeshLib/Elements/MapBulkElementPoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,30 @@

namespace MeshLib
{
/// \page BulkMappingDocuPage
/// [Documentation](https://www.opengeosys.org/pdf/BulkElementMappings.pdf) for
/// the mapping of a point given in local coordinates of a boundary face/element
/// to the corresponding bulk element point.

/// Maps the given lower dimensional boundary point \c wp of a line, i.e. the 1d
/// integration point given in local coordinates of a line, to higher
/// dimensional point of the triangle face (defined by the triangle element and
/// the face id) also in local coordinates of the triangle element.
/// \param tri the triangle element
/// \param face_id the id of the triangle face the point will be mapped on
/// \param wp the integration point of the lower dimensional element
/// \return the mapped point
MathLib::Point3d getBulkElementPoint(MeshLib::Tri const& tri,
std::size_t const face_id,
MathLib::WeightedPoint1D const& wp);

/// Maps the given lower dimensional boundary point \c wp of a line, i.e. the 1d
/// gauss point given in local coordinates of a line, to higher dimensional
/// integration point given in local coordinates of a line, to higher dimensional
/// point of the quad face (defined by the quad element and the face id) also in
/// local coordinates of the quad face.
/// \param quad the quad element
/// \param face_id the id of the quad face the point will be mapped on
/// \param wp the gauss point of the lower dimensional element
/// \param wp the integration point of the lower dimensional element
/// \return the mapped point
MathLib::Point3d getBulkElementPoint(MeshLib::Quad const& quad,
std::size_t const face_id,
Expand Down
2 changes: 1 addition & 1 deletion ProcessLib/ComponentTransport/Tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ AddTest(
)

AddTest(
NAME 2D_ComponentTransport_NonAdvective_OpenBoundary
NAME 3D_ComponentTransport_NonAdvective_OpenBoundary
PATH Parabolic/ComponentTransport/OpenBoundaryWithTets
EXECUTABLE ogs
EXECUTABLE_ARGS box_flow.prj
Expand Down
17 changes: 16 additions & 1 deletion ProcessLib/LiquidFlow/Tests.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ AddTest(
)

AddTest(
NAME LiquidFlow_Flux_2D
NAME LiquidFlow_Flux_2D_Quads
PATH Parabolic/LiquidFlow/Flux/2D
EXECUTABLE ogs
EXECUTABLE_ARGS square_1e1_calculatesurfaceflux.prj
Expand All @@ -395,6 +395,21 @@ AddTest(
LF_square_1e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu LF_square_1e1_surfaceflux_pcs_0_ts_2_t_0.864000.vtu pressure pressure 1e-7 1e-13
)

AddTest(
NAME LiquidFlow_Flux_2D_Tris
PATH Parabolic/LiquidFlow/Flux/2D
EXECUTABLE ogs
EXECUTABLE_ARGS square_1.8e1_calculatesurfaceflux.prj
WRAPPER time
TESTER vtkdiff
REQUIREMENTS NOT OGS_USE_MPI
DIFF_DATA
square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000_expected.vtu square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.432000.vtu specific_flux specific_flux 1e-7 1e-13
square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000_expected.vtu square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux_t_0.864000.vtu specific_flux specific_flux 1e-7 1e-13
LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000_expected.vtu LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_1_t_0.432000.vtu pressure pressure 1e-7 1e-13
LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000_expected.vtu LF_square_1x1_tri_1.8e1_surfaceflux_pcs_0_ts_2_t_0.864000.vtu pressure pressure 1e-7 1e-13
)

#AddTest(
# NAME LiquidFlow_SimpleSynthetics_constraint_dirichlet_bc
# PATH Parabolic/LiquidFlow/SimpleSynthetics
Expand Down
Git LFS file not shown
Git LFS file not shown
Original file line number Diff line number Diff line change
@@ -0,0 +1,192 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<OpenGeoSysProject>
<meshes>
<mesh>square_1x1_tri_1.8e1.vtu</mesh>
<mesh>square_1x1_tri_1.8e1_complete_boundary.vtu</mesh>
<mesh>square_1x1_tri_1.8e1_left.vtu</mesh>
<mesh>square_1x1_tri_1.8e1_right.vtu</mesh>
</meshes>
<processes>
<process>
<name>LiquidFlow</name>
<type>LIQUID_FLOW</type>
<integration_order>2</integration_order>
<darcy_gravity>
<!-- axis_id: 0, 1, or the dimension of space minus one -->
<axis_id>0</axis_id>
<!-- g>=0. g=0: non gravity term -->
<g>0.</g>
</darcy_gravity>
<process_variables>
<process_variable>pressure</process_variable>
</process_variables>
<secondary_variables>
<secondary_variable internal_name="darcy_velocity" output_name="v"/>
</secondary_variables>
<calculatesurfaceflux>
<mesh>square_1x1_tri_1.8e1_complete_boundary</mesh>
<property_name>specific_flux</property_name>
<output_mesh>square_1x1_tri_1.8e1_complete_boundary_left_right_dirichlet_specific_flux.vtu</output_mesh>
</calculatesurfaceflux>
</process>
</processes>
<time_loop>
<processes>
<process ref="LiquidFlow">
<nonlinear_solver>basic_picard</nonlinear_solver>
<convergence_criterion>
<type>DeltaX</type>
<norm_type>NORM2</norm_type>
<abstol>1.e-10</abstol>
</convergence_criterion>
<time_discretization>
<type>BackwardEuler</type>
</time_discretization>
<time_stepping>
<type>FixedTimeStepping</type>
<t_initial> 0.0 </t_initial>
<t_end> 0.864 </t_end>
<timesteps>
<pair>
<repeat>2</repeat>
<delta_t>0.432</delta_t>
</pair>
</timesteps>
</time_stepping>
</process>
</processes>
<output>
<type>VTK</type>
<prefix>LF_square_1x1_tri_1.8e1_surfaceflux</prefix>
<timesteps>
<pair>
<repeat> 1 </repeat>
<each_steps> 1 </each_steps>
</pair>
</timesteps>
<variables>
<variable> pressure </variable>
<variable> v </variable>
</variables>
</output>
</time_loop>
<media>
<medium id="0">
<phases>
<phase>
<type>AqueousLiquid</type>
<properties>
<property>
<name>viscosity</name>
<type>Constant</type>
<value> 1.295e-4 </value>
</property>
<property>
<name>density</name>
<type>Constant</type>
<value> 78.68 </value>
</property>
</properties>
</phase>
</phases>
<properties>
<property>
<name>permeability</name>
<type>Constant</type>
<value>9.2e-12 0 0 9.2e-12</value>
</property>
<property>
<name>reference_temperature</name>
<type>Constant</type>
<value>293.15</value>
</property>
<property>
<name>porosity</name>
<type>Constant</type>
<value>1</value>
</property>
<property>
<name>storage</name>
<type>Constant</type>
<value> 8.05e-10 </value>
</property>
</properties>
</medium>
</media>
<parameters>
<parameter>
<name>p0</name>
<type>Constant</type>
<value>5e6</value>
</parameter>
<parameter>
<name>p_Dirichlet_left</name>
<type>Constant</type>
<value>1e7</value>
</parameter>
<parameter>
<name>p_Dirichlet_right</name>
<type>Constant</type>
<value>1e6</value>
</parameter>
<parameter>
<name>constant_porosity_parameter</name>
<type>Constant</type>
<value>1</value>
</parameter>
<parameter>
<name>kappa1</name>
<type>Constant</type>
<values>9.2e-12 0 0 9.2e-12</values>
</parameter>
<parameter>
<name>p_spatial</name>
<type>Constant</type>
<value>1</value>
</parameter>
</parameters>
<process_variables>
<process_variable>
<name>pressure</name>
<components>1</components>
<order>1</order>
<initial_condition>p0</initial_condition>
<boundary_conditions>
<boundary_condition>
<mesh>square_1x1_tri_1.8e1_left</mesh>
<type>Dirichlet</type>
<parameter>p_Dirichlet_left</parameter>
</boundary_condition>
<boundary_condition>
<mesh>square_1x1_tri_1.8e1_right</mesh>
<type>Dirichlet</type>
<parameter>p_Dirichlet_right</parameter>
</boundary_condition>
</boundary_conditions>
</process_variable>
</process_variables>
<nonlinear_solvers>
<nonlinear_solver>
<name>basic_picard</name>
<type>Picard</type>
<max_iter>10</max_iter>
<linear_solver>general_linear_solver</linear_solver>
</nonlinear_solver>
</nonlinear_solvers>
<linear_solvers>
<linear_solver>
<name>general_linear_solver</name>
<lis>-i cg -p jacobi -tol 1e-16 -maxiter 10000</lis>
<eigen>
<solver_type>CG</solver_type>
<precon_type>DIAGONAL</precon_type>
<max_iteration_step>10000</max_iteration_step>
<error_tolerance>1e-16</error_tolerance>
</eigen>
<petsc>
<prefix>lf</prefix>
<parameters>-lf_ksp_type cg -lf_pc_type bjacobi -lf_ksp_rtol 1e-16 -lf_ksp_max_it 10000</parameters>
</petsc>
</linear_solver>
</linear_solvers>
</OpenGeoSysProject>
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Git LFS file not shown
Binary file added web/static/pdf/BulkElementMappings.pdf
Binary file not shown.

0 comments on commit fd52f38

Please sign in to comment.