Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion precicecasegenerate/helper.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@
"pressure",
"velocity",
"heat-flux",
"heatflux"
"heatflux",
"traction"
]

class DataKind(Enum):
Expand Down
211 changes: 211 additions & 0 deletions tests/compositional-coupling-experiment/precice-config.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,211 @@
<?xml version="1.0"?>
<!-- A slightly modified version of the 'compositional-coupling-experiment' from
https://darus.uni-stuttgart.de/dataset.xhtml?persistentId=doi:10.18419/DARUS-422 -->
<precice-configuration>
<log>
<sink format="---[precice] %ColorizedSeverity% %Message%"/>
</log>

<data:vector name="Displacement"/>
<data:vector name="Velocity"/>
<data:vector name="Traction"/>

<data:vector name="Geometry"/>
<data:scalar name="Gamma"/>

<mesh name="TendonBottomMesh" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="TendonTopAMesh" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="TendonTopBMesh" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="MuscleMeshBottom" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="MuscleMeshTopA" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="MuscleMeshTopB" dimensions="3">
<use-data name="Displacement"/>
<use-data name="Velocity"/>
<use-data name="Traction"/>
</mesh>

<mesh name="MuscleMechanicsMesh" dimensions="3">
<use-data name="Geometry"/>
<use-data name="Gamma"/>
</mesh>

<mesh name="MuscleFibersMesh" dimensions="3">
<use-data name="Geometry"/>
<use-data name="Gamma"/>
</mesh>

<participant name="TendonBottom">

<provide-mesh name="TendonBottomMesh"/>
<receive-mesh name="MuscleMeshBottom" from="MuscleMechanics"/>

<write-data name="Displacement" mesh="TendonBottomMesh"/>
<write-data name="Velocity" mesh="TendonBottomMesh"/>
<read-data name="Traction" mesh="TendonBottomMesh"/>

<mapping:nearest-neighbor direction="read" from="MuscleMeshBottom" to="TendonBottomMesh"
constraint="consistent"/>

</participant>

<participant name="TendonTopA">

<provide-mesh name="TendonTopAMesh"/>
<receive-mesh name="MuscleMeshTopA" from="MuscleMechanics"/>

<write-data name="Displacement" mesh="TendonTopAMesh"/>
<write-data name="Velocity" mesh="TendonTopAMesh"/>
<read-data name="Traction" mesh="TendonTopAMesh"/>

<mapping:nearest-neighbor direction="read" from="MuscleMeshTopA" to="TendonTopAMesh" constraint="consistent"/>


</participant>

<participant name="TendonTopB">

<provide-mesh name="TendonTopBMesh"/>
<receive-mesh name="MuscleMeshTopB" from="MuscleMechanics"/>

<write-data name="Displacement" mesh="TendonTopBMesh"/>
<write-data name="Velocity" mesh="TendonTopBMesh"/>
<read-data name="Traction" mesh="TendonTopBMesh"/>

<mapping:nearest-neighbor direction="read" from="MuscleMeshTopB" to="TendonTopBMesh" constraint="consistent"/>

</participant>

<participant name="MuscleMechanics">

<provide-mesh name="MuscleMeshBottom"/>
<provide-mesh name="MuscleMeshTopA"/>
<provide-mesh name="MuscleMeshTopB"/>
<receive-mesh name="TendonBottomMesh" from="TendonBottom"/>
<receive-mesh name="TendonTopAMesh" from="TendonTopA"/>
<receive-mesh name="TendonTopBMesh" from="TendonTopB"/>

<provide-mesh name="MuscleMechanicsMesh"/>
<receive-mesh name="MuscleFibersMesh" from="MuscleFibers"/>

<read-data name="Displacement" mesh="MuscleMeshBottom"/>
<read-data name="Velocity" mesh="MuscleMeshBottom"/>
<write-data name="Traction" mesh="MuscleMeshBottom"/>
<read-data name="Displacement" mesh="MuscleMeshTopA"/>
<read-data name="Velocity" mesh="MuscleMeshTopA"/>
<write-data name="Traction" mesh="MuscleMeshTopA"/>
<read-data name="Displacement" mesh="MuscleMeshTopB"/>
<read-data name="Velocity" mesh="MuscleMeshTopB"/>
<write-data name="Traction" mesh="MuscleMeshTopB"/>

<write-data name="Geometry" mesh="MuscleMechanicsMesh"/>
<read-data name="Gamma" mesh="MuscleMechanicsMesh"/>

<mapping:nearest-neighbor constraint="consistent" direction="read" from="MuscleFibersMesh"
to="MuscleMechanicsMesh"/>

<mapping:nearest-neighbor direction="read" from="TendonBottomMesh" to="MuscleMeshBottom"
constraint="consistent"/>

<mapping:nearest-neighbor direction="read" from="TendonTopAMesh" to="MuscleMeshTopA" constraint="consistent"/>

<mapping:nearest-neighbor direction="read" from="TendonTopBMesh" to="MuscleMeshTopB" constraint="consistent"/>

</participant>

<participant name="MuscleFibers">

<provide-mesh name="MuscleFibersMesh"/>
<receive-mesh name="MuscleMechanicsMesh" from="MuscleMechanics"/>

<write-data name="Gamma" mesh="MuscleFibersMesh"/>
<read-data name="Geometry" mesh="MuscleFibersMesh"/>

<mapping:nearest-neighbor direction="read" from="MuscleMechanicsMesh" to="MuscleFibersMesh"
constraint="consistent"/>

</participant>

<m2n:sockets acceptor="TendonBottom" connector="MuscleMechanics" exchange-directory=".."/>
<m2n:sockets acceptor="TendonTopA" connector="MuscleMechanics" exchange-directory=".."/>
<m2n:sockets acceptor="TendonTopB" connector="MuscleMechanics" exchange-directory=".."/>
<m2n:sockets acceptor="MuscleFibers" connector="MuscleMechanics" exchange-directory=".."/>

<coupling-scheme:parallel-explicit>
<participants first="MuscleFibers" second="MuscleMechanics"/>
<max-time-windows value="10"/>
<time-window-size value="0.1"/>

<exchange data="Gamma" mesh="MuscleFibersMesh" from="MuscleFibers" to="MuscleMechanics"/>
<exchange data="Geometry" mesh="MuscleMechanicsMesh" from="MuscleMechanics" to="MuscleFibers"/>
</coupling-scheme:parallel-explicit>

<coupling-scheme:multi>
<participant name="MuscleMechanics" control="yes"/>
<participant name="TendonBottom"/>
<participant name="TendonTopA"/>
<participant name="TendonTopB"/>

<max-time-windows value="10"/>
<time-window-size value="0.1"/>

<relative-convergence-measure limit="0.1" data="Displacement" mesh="TendonBottomMesh"/>
<relative-convergence-measure limit="0.1" data="Displacement" mesh="TendonTopAMesh"/>
<relative-convergence-measure limit="0.1" data="Displacement" mesh="TendonTopBMesh"/>
<relative-convergence-measure limit="0.1" data="Velocity" mesh="TendonBottomMesh"/>
<relative-convergence-measure limit="0.1" data="Velocity" mesh="TendonTopAMesh"/>
<relative-convergence-measure limit="0.1" data="Velocity" mesh="TendonTopBMesh"/>
<relative-convergence-measure limit="0.1" data="Traction" mesh="MuscleMeshBottom"/>
<relative-convergence-measure limit="0.1" data="Traction" mesh="MuscleMeshTopA"/>
<relative-convergence-measure limit="0.1" data="Traction" mesh="MuscleMeshTopB"/>

<acceleration:IQN-ILS>
<data name="Displacement" mesh="TendonBottomMesh"/>
<data name="Displacement" mesh="TendonTopAMesh"/>
<data name="Displacement" mesh="TendonTopBMesh"/>
<data name="Velocity" mesh="TendonBottomMesh"/>
<data name="Velocity" mesh="TendonTopAMesh"/>
<data name="Velocity" mesh="TendonTopBMesh"/>
<data name="Traction" mesh="MuscleMeshBottom"/>
<data name="Traction" mesh="MuscleMeshTopA"/>
<data name="Traction" mesh="MuscleMeshTopB"/>
</acceleration:IQN-ILS>

<exchange data="Displacement" mesh="TendonBottomMesh" from="TendonBottom" to="MuscleMechanics"/>
<exchange data="Velocity" mesh="TendonBottomMesh" from="TendonBottom" to="MuscleMechanics"/>
<exchange data="Traction" mesh="MuscleMeshBottom" from="MuscleMechanics" to="TendonBottom"/>

<exchange data="Displacement" mesh="TendonTopAMesh" from="TendonTopA" to="MuscleMechanics"/>
<exchange data="Velocity" mesh="TendonTopAMesh" from="TendonTopA" to="MuscleMechanics"/>
<exchange data="Traction" mesh="MuscleMeshTopA" from="MuscleMechanics" to="TendonTopA"/>

<exchange data="Displacement" mesh="TendonTopBMesh" from="TendonTopB" to="MuscleMechanics"/>
<exchange data="Velocity" mesh="TendonTopBMesh" from="TendonTopB" to="MuscleMechanics"/>
<exchange data="Traction" mesh="MuscleMeshTopB" from="MuscleMechanics" to="TendonTopB"/>
</coupling-scheme:multi>

</precice-configuration>
26 changes: 26 additions & 0 deletions tests/compositional-coupling-experiment/test_equivalence.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""
Test that exchanges between participants correctly lead to data renaming if only the specified patches are unique.
"""

from pathlib import Path
from precice_config_graph.graph import operations
from preciceconfigcheck.cli import runCheck

from precicecasegenerate.cli import generate_case

# This directory is the same for all tests in this file.
test_directory: Path = Path(__file__).parent
def test_compositional_coupling_experiment():
"""
Test if the created config-file matches the expected one.
"""
case_directory: Path = test_directory
input_file: Path = case_directory / "topology.yaml"

generate_case(input_file, case_directory / "_generated")

expected: Path = case_directory / "precice-config.xml"
actual: Path = case_directory / "_generated/precice-config.xml"
assert not operations.check_config_equivalence(expected, actual), "Configs are equivalent with different naming."
assert operations.check_config_equivalence(expected, actual, ignore_names=True), "Configs are not equivalent up to naming."
assert runCheck(actual, True) == 0, "The config failed to validate."
89 changes: 89 additions & 0 deletions tests/compositional-coupling-experiment/topology.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
participants:
- name: MuscleMechanics
solver: ASolver
- name: TendonBottom
solver: BSolver
- name: TendonTopA
solver: BSolver
- name: TendonTopB
solver: BSolver
- name: MuscleFibers
solver: ASolver
exchanges:
- from: MuscleFibers
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Gamma
type: weak
data-type: scalar
- from: MuscleMechanics
to: MuscleFibers
from-patch: interface
to-patch: interface
data: Geometry
type: weak
data-type: vector
- from: TendonBottom
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Displacement
type: strong
data-type: vector
- from: TendonBottom
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Velocity
type: strong
data-type: vector
- from: MuscleMechanics
to: TendonBottom
from-patch: interface
to-patch: interface
data: Traction
type: strong
data-type: vector
- from: TendonTopA
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Displacement
type: strong
data-type: vector
- from: TendonTopA
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Velocity
type: strong
data-type: vector
- from: MuscleMechanics
to: TendonTopA
from-patch: interface
to-patch: interface
data: Traction
type: strong
data-type: vector
- from: TendonTopB
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Displacement
type: strong
data-type: vector
- from: TendonTopB
to: MuscleMechanics
from-patch: interface
to-patch: interface
data: Velocity
type: strong
data-type: vector
- from: MuscleMechanics
to: TendonTopB
from-patch: interface
to-patch: interface
data: Traction
type: strong
data-type: vector
Loading