Skip to content

Commit

Permalink
Porting examples (#48)
Browse files Browse the repository at this point in the history
* updated first eaxmple

* added all other examples
  • Loading branch information
VanLaareN authored Jan 10, 2025
1 parent 02b73b6 commit 34f2ed3
Show file tree
Hide file tree
Showing 8 changed files with 836 additions and 664 deletions.
142 changes: 84 additions & 58 deletions controller_utils/examples/1/precice-config.xml
Original file line number Diff line number Diff line change
@@ -1,63 +1,89 @@
<?xml version="1.0" encoding='UTF-8'?>
<?xml version="1.0" encoding="UTF-8"?>

<precice-configuration>

<!-- Moved dimensions="3" to each mesh and applied naming conventions -->
<mesh name="SU2-CFD-Mesh" dimensions="3">
<use-data name="Force"/>
<use-data name="Displacement-Delta"/>
</mesh>

<solver-interface dimensions="3">
<data:vector name="Forces0"/>
<data:vector name="DisplacementDeltas0"/>

<mesh name="SU2_Mesh0">
<use-data name="Forces0"/>
<use-data name="DisplacementDeltas0"/>
</mesh>

<mesh name="Calculix_Mesh">
<use-data name="DisplacementDeltas0"/>
<use-data name="Forces0"/>
</mesh>

<participant name="SU2_CFD">
<use-mesh name="Calculix_Mesh" from="Calculix"/>
<use-mesh name="SU2_Mesh0" provide="yes"/>
<write-data name="Forces0" mesh="SU2_Mesh0"/>
<read-data name="DisplacementDeltas0" mesh="SU2_Mesh0"/>
<mapping:nearest-neighbor
direction="write" from="SU2_Mesh0" to="Calculix_Mesh"
constraint="conservative" timing="initial"/>
<mapping:nearest-neighbor
direction="read" from="Calculix_Mesh" to="SU2_Mesh0"
constraint="consistent" timing="initial"/>
</participant>

<participant name="Calculix">
<use-mesh name="Calculix_Mesh" provide="yes"/>
<write-data name="DisplacementDeltas0" mesh="Calculix_Mesh"/>
<read-data name="Forces0" mesh="Calculix_Mesh"/>
</participant>

<m2n:sockets from="SU2_CFD" to="Calculix" exchange-directory="../" />

<coupling-scheme:parallel-implicit>
<participants first="SU2_CFD" second="Calculix"/>
<max-timesteps value="20"/>
<timestep-length value="1e-3" />
<exchange data="Forces0" mesh="Calculix_Mesh" from="SU2_CFD" to="Calculix"/>
<exchange data="DisplacementDeltas0" mesh="Calculix_Mesh" from="Calculix" to="SU2_CFD" />
<max-iterations value="50"/>
<relative-convergence-measure limit="1e-4" data="DisplacementDeltas0" mesh="Calculix_Mesh"/>
<relative-convergence-measure limit="1e-4" data="Forces0" mesh="Calculix_Mesh"/>
<extrapolation-order value="2"/>
<post-processing:IQN-ILS>
<data name="DisplacementDeltas0" mesh="SOLIDZ_Mesh"/>
<data name="Forces0" mesh="SOLIDZ_Mesh"/>
<preconditioner type="residual-sum"/>
<filter type="QR1" limit="1e-6"/>
<initial-relaxation value="0.1"/>
<max-used-iterations value="50"/>
<timesteps-reused value="10"/>
</post-processing:IQN-ILS>
</coupling-scheme:parallel-implicit>

</solver-interface>
<mesh name="Calculix-Mesh" dimensions="3">
<use-data name="Displacement-Delta"/>
<use-data name="Force"/>
</mesh>

<!-- we rename SOLIDZ_Mesh to Calculix-Z-Mesh, following the new convention. -->
<mesh name="Calculix-Z-Mesh" dimensions="3">
<!-- In some setups, you might use the same data names, or others. Adjust if needed. -->
<use-data name="Displacement-Delta"/>
<use-data name="Force"/>
</mesh>

<!-- Participant "SU2_CFD" renamed to "SU2-CFD" -->
<participant name="SU2-CFD">
<!-- Provide or receive the needed meshes -->
<receive-mesh name="Calculix-Mesh" from="Calculix"/>
<provide-mesh name="SU2-CFD-Mesh"/>

<!-- Data usage with updated names -->
<write-data name="Force" mesh="SU2-CFD-Mesh"/>
<read-data name="Displacement-Delta" mesh="SU2-CFD-Mesh"/>

<!-- Remove timing attributes -->
<mapping:nearest-neighbor
direction="write"
from="SU2-CFD-Mesh" to="Calculix-Mesh"
constraint="conservative" />
<mapping:nearest-neighbor
direction="read"
from="Calculix-Mesh" to="SU2-CFD-Mesh"
constraint="consistent" />
</participant>

<participant name="Calculix">
<provide-mesh name="Calculix-Mesh"/>
<!-- If needed, it could also provide the "Calculix-Z-Mesh" or receive it,
depending on the actual use-case. Here, we keep it minimal. -->
<write-data name="Displacement-Delta" mesh="Calculix-Mesh"/>
<read-data name="Force" mesh="Calculix-Mesh"/>
</participant>

<!-- Updated "from" and "to" → "acceptor" and "connector" -->
<m2n:sockets acceptor="SU2-CFD" connector="Calculix" exchange-directory="../"/>

<coupling-scheme:parallel-implicit>
<participants first="SU2-CFD" second="Calculix"/>

<!-- Renamed attributes -->
<max-time-windows value="20"/>
<time-window-size value="1e-3"/>

<!-- Exchanges with updated data and mesh names -->
<exchange data="Force" mesh="Calculix-Mesh" from="SU2-CFD" to="Calculix"/>
<exchange data="Displacement-Delta" mesh="Calculix-Mesh" from="Calculix" to="SU2-CFD"/>

<max-iterations value="50"/>

<relative-convergence-measure limit="1e-4" data="Displacement-Delta" mesh="Calculix-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Force" mesh="Calculix-Mesh"/>

<!-- Removed <extrapolation-order> because v3 no longer supports it -->

<!-- Renamed <post-processing:IQN-ILS> to <acceleration:IQN-ILS>
and adjusted data/mesh names to new naming.
Example usage with the special "Calculix-Z-Mesh" -->
<acceleration:IQN-ILS>
<data name="Displacement-Delta" mesh="Calculix-Z-Mesh"/>
<data name="Force" mesh="Calculix-Z-Mesh"/>
<preconditioner type="residual-sum"/>
<filter type="QR1" limit="1e-6"/>
<initial-relaxation value="0.1"/>
<max-used-iterations value="50"/>
<!-- Renamed timesteps-reused → time-windows-reused -->
<time-windows-reused value="10"/>
</acceleration:IQN-ILS>

</coupling-scheme:parallel-implicit>

</precice-configuration>
201 changes: 107 additions & 94 deletions controller_utils/examples/2/precice-config.xml
Original file line number Diff line number Diff line change
@@ -1,104 +1,117 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="UTF-8"?>
<precice-configuration>
<!-- Scalar data definitions -->
<data:scalar name="Heat-Transfer-Coefficient-Solid"/>
<data:scalar name="Sink-Temperature-Solid"/>
<data:scalar name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<data:scalar name="Sink-Temperature-Inner-Fluid"/>
<data:scalar name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<data:scalar name="Sink-Temperature-Outer-Fluid"/>

<solver-interface dimensions="3">
<!-- Mesh definitions with dimensions and naming conventions -->
<mesh name="Solid-Inner-Fluid-Mesh" dimensions="3">
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
<use-data name="Sink-Temperature-Inner-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Inner-Fluid"/>
</mesh>

<data:scalar name="Heat-Transfer-Coefficient-Solid"/>
<data:scalar name="Sink-Temperature-Solid"/>
<data:scalar name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<data:scalar name="Sink-Temperature-Inner-Fluid"/>
<data:scalar name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<data:scalar name="Sink-Temperature-Outer-Fluid"/>
<mesh name="Solid-Outer-Fluid-Mesh" dimensions="3">
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
<use-data name="Sink-Temperature-Outer-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Outer-Fluid"/>
</mesh>

<mesh name="Solid-to-Inner-Fluid">
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
<use-data name="Sink-Temperature-Inner-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Inner-Fluid"/>
</mesh>
<mesh name="Solid-to-Outer-Fluid">
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
<use-data name="Sink-Temperature-Outer-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Outer-Fluid"/>
</mesh>
<mesh name="Inner-Fluid-to-Solid">
<use-data name="Sink-Temperature-Inner-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
</mesh>
<mesh name="Outer-Fluid-to-Solid">
<use-data name="Sink-Temperature-Outer-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
</mesh>
<mesh name="Inner-Fluid-Solid-Mesh" dimensions="3">
<use-data name="Sink-Temperature-Inner-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
</mesh>

<participant name="Solid">
<use-mesh name="Solid-to-Inner-Fluid" provide="yes"/>
<use-mesh name="Inner-Fluid-to-Solid" from="Inner-Fluid"/>
<write-data mesh="Solid-to-Inner-Fluid" name="Sink-Temperature-Solid"/>
<write-data mesh="Solid-to-Inner-Fluid" name="Heat-Transfer-Coefficient-Solid"/>
<read-data mesh="Solid-to-Inner-Fluid" name="Sink-Temperature-Inner-Fluid"/>
<read-data mesh="Solid-to-Inner-Fluid" name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read" to="Solid-to-Inner-Fluid" from="Inner-Fluid-to-Solid"/>
<use-mesh name="Solid-to-Outer-Fluid" provide="yes"/>
<use-mesh name="Outer-Fluid-to-Solid" from="Outer-Fluid"/>
<write-data mesh="Solid-to-Outer-Fluid" name="Sink-Temperature-Solid"/>
<write-data mesh="Solid-to-Outer-Fluid" name="Heat-Transfer-Coefficient-Solid"/>
<read-data mesh="Solid-to-Outer-Fluid" name="Sink-Temperature-Outer-Fluid"/>
<read-data mesh="Solid-to-Outer-Fluid" name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read" to="Solid-to-Outer-Fluid" from="Outer-Fluid-to-Solid"/>
</participant>
<mesh name="Outer-Fluid-Solid-Mesh" dimensions="3">
<use-data name="Sink-Temperature-Outer-Fluid"/>
<use-data name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<use-data name="Sink-Temperature-Solid"/>
<use-data name="Heat-Transfer-Coefficient-Solid"/>
</mesh>

<participant name="Inner-Fluid">
<use-mesh name="Inner-Fluid-to-Solid" provide="yes"/>
<use-mesh name="Solid-to-Inner-Fluid" from="Solid"/>
<write-data mesh="Inner-Fluid-to-Solid" name="Sink-Temperature-Inner-Fluid"/>
<write-data mesh="Inner-Fluid-to-Solid" name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<read-data mesh="Inner-Fluid-to-Solid" name="Sink-Temperature-Solid"/>
<read-data mesh="Inner-Fluid-to-Solid" name="Heat-Transfer-Coefficient-Solid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read" to="Inner-Fluid-to-Solid" from="Solid-to-Inner-Fluid"/>
</participant>
<!-- Participant definitions with updated mesh usage syntax and naming -->
<participant name="Solid">
<provide-mesh name="Solid-Inner-Fluid-Mesh"/>
<receive-mesh name="Inner-Fluid-Solid-Mesh" from="Inner-Fluid"/>
<write-data mesh="Solid-Inner-Fluid-Mesh" name="Sink-Temperature-Solid"/>
<write-data mesh="Solid-Inner-Fluid-Mesh" name="Heat-Transfer-Coefficient-Solid"/>
<read-data mesh="Solid-Inner-Fluid-Mesh" name="Sink-Temperature-Inner-Fluid"/>
<read-data mesh="Solid-Inner-Fluid-Mesh" name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read"
to="Solid-Inner-Fluid-Mesh" from="Inner-Fluid-Solid-Mesh"/>

<participant name="Outer-Fluid">
<use-mesh name="Outer-Fluid-to-Solid" provide="yes"/>
<use-mesh name="Solid-to-Outer-Fluid" from="Solid"/>
<write-data mesh="Outer-Fluid-to-Solid" name="Sink-Temperature-Outer-Fluid"/>
<write-data mesh="Outer-Fluid-to-Solid" name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<read-data mesh="Outer-Fluid-to-Solid" name="Sink-Temperature-Solid"/>
<read-data mesh="Outer-Fluid-to-Solid" name="Heat-Transfer-Coefficient-Solid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read" to="Outer-Fluid-to-Solid" from="Solid-to-Outer-Fluid"/>
</participant>
<provide-mesh name="Solid-Outer-Fluid-Mesh"/>
<receive-mesh name="Outer-Fluid-Solid-Mesh" from="Outer-Fluid"/>
<write-data mesh="Solid-Outer-Fluid-Mesh" name="Sink-Temperature-Solid"/>
<write-data mesh="Solid-Outer-Fluid-Mesh" name="Heat-Transfer-Coefficient-Solid"/>
<read-data mesh="Solid-Outer-Fluid-Mesh" name="Sink-Temperature-Outer-Fluid"/>
<read-data mesh="Solid-Outer-Fluid-Mesh" name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read"
to="Solid-Outer-Fluid-Mesh" from="Outer-Fluid-Solid-Mesh"/>
</participant>

<m2n:sockets to="Inner-Fluid" from="Solid" exchange-directory=".." />
<m2n:sockets to="Outer-Fluid" from="Solid" exchange-directory=".." />
<participant name="Inner-Fluid">
<provide-mesh name="Inner-Fluid-Solid-Mesh"/>
<receive-mesh name="Solid-Inner-Fluid-Mesh" from="Solid"/>
<write-data mesh="Inner-Fluid-Solid-Mesh" name="Sink-Temperature-Inner-Fluid"/>
<write-data mesh="Inner-Fluid-Solid-Mesh" name="Heat-Transfer-Coefficient-Inner-Fluid"/>
<read-data mesh="Inner-Fluid-Solid-Mesh" name="Sink-Temperature-Solid"/>
<read-data mesh="Inner-Fluid-Solid-Mesh" name="Heat-Transfer-Coefficient-Solid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read"
to="Inner-Fluid-Solid-Mesh" from="Solid-Inner-Fluid-Mesh"/>
</participant>

<coupling-scheme:multi>
<participant name="Solid" control="yes"/>
<participant name="Inner-Fluid" />
<participant name="Outer-Fluid" />
<timestep-length value="1e-3"/>
<max-timesteps value="30"/>
<max-iterations value="50"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Solid" mesh="Solid-to-Inner-Fluid"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Solid" mesh="Solid-to-Inner-Fluid"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Inner-Fluid" mesh="Inner-Fluid-to-Solid"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Inner-Fluid" mesh="Inner-Fluid-to-Solid"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Solid" mesh="Solid-to-Outer-Fluid"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Solid" mesh="Solid-to-Outer-Fluid"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Outer-Fluid" mesh="Outer-Fluid-to-Solid"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Outer-Fluid" mesh="Outer-Fluid-to-Solid"/>
<extrapolation-order value="2"/>
<exchange data="Sink-Temperature-Solid" mesh="Solid-to-Inner-Fluid" from="Solid" to="Inner-Fluid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Solid" mesh="Solid-to-Inner-Fluid" from="Solid" to="Inner-Fluid" initialize="yes"/>
<exchange data="Sink-Temperature-Inner-Fluid" mesh="Inner-Fluid-to-Solid" from="Inner-Fluid" to="Solid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Inner-Fluid" mesh="Inner-Fluid-to-Solid" from="Inner-Fluid" to="Solid" initialize="yes"/>
<exchange data="Sink-Temperature-Solid" mesh="Solid-to-Outer-Fluid" from="Solid" to="Outer-Fluid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Solid" mesh="Solid-to-Outer-Fluid" from="Solid" to="Outer-Fluid" initialize="yes"/>
<exchange data="Sink-Temperature-Outer-Fluid" mesh="Outer-Fluid-to-Solid" from="Outer-Fluid" to="Solid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Outer-Fluid" mesh="Outer-Fluid-to-Solid" from="Outer-Fluid" to="Solid" initialize="yes"/>
</coupling-scheme:multi>
</solver-interface>
<participant name="Outer-Fluid">
<provide-mesh name="Outer-Fluid-Solid-Mesh"/>
<receive-mesh name="Solid-Outer-Fluid-Mesh" from="Solid"/>
<write-data mesh="Outer-Fluid-Solid-Mesh" name="Sink-Temperature-Outer-Fluid"/>
<write-data mesh="Outer-Fluid-Solid-Mesh" name="Heat-Transfer-Coefficient-Outer-Fluid"/>
<read-data mesh="Outer-Fluid-Solid-Mesh" name="Sink-Temperature-Solid"/>
<read-data mesh="Outer-Fluid-Solid-Mesh" name="Heat-Transfer-Coefficient-Solid"/>
<mapping:nearest-neighbor constraint="consistent" direction="read"
to="Outer-Fluid-Solid-Mesh" from="Solid-Outer-Fluid-Mesh"/>
</participant>

<!-- Updated m2n:sockets with new attribute naming and directory conventions -->
<m2n:sockets acceptor="Solid" connector="Inner-Fluid" exchange-directory=".."/>
<m2n:sockets acceptor="Solid" connector="Outer-Fluid" exchange-directory=".."/>

<coupling-scheme:multi>
<participant name="Solid" control="yes"/>
<participant name="Inner-Fluid"/>
<participant name="Outer-Fluid"/>

<!-- Renamed timestep-length and max-timesteps -->
<time-window-size value="1e-3"/>
<max-time-windows value="30"/>
<max-iterations value="50"/>

<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Solid" mesh="Solid-Inner-Fluid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Solid" mesh="Solid-Inner-Fluid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Inner-Fluid" mesh="Inner-Fluid-Solid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Inner-Fluid" mesh="Inner-Fluid-Solid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Solid" mesh="Solid-Outer-Fluid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Solid" mesh="Solid-Outer-Fluid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Sink-Temperature-Outer-Fluid" mesh="Outer-Fluid-Solid-Mesh"/>
<relative-convergence-measure limit="1e-4" data="Heat-Transfer-Coefficient-Outer-Fluid" mesh="Outer-Fluid-Solid-Mesh"/>

<!-- Removed extrapolation-order as it's no longer supported -->

<exchange data="Sink-Temperature-Solid" mesh="Solid-Inner-Fluid-Mesh" from="Solid" to="Inner-Fluid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Solid" mesh="Solid-Inner-Fluid-Mesh" from="Solid" to="Inner-Fluid" initialize="yes"/>
<exchange data="Sink-Temperature-Inner-Fluid" mesh="Inner-Fluid-Solid-Mesh" from="Inner-Fluid" to="Solid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Inner-Fluid" mesh="Inner-Fluid-Solid-Mesh" from="Inner-Fluid" to="Solid" initialize="yes"/>
<exchange data="Sink-Temperature-Solid" mesh="Solid-Outer-Fluid-Mesh" from="Solid" to="Outer-Fluid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Solid" mesh="Solid-Outer-Fluid-Mesh" from="Solid" to="Outer-Fluid" initialize="yes"/>
<exchange data="Sink-Temperature-Outer-Fluid" mesh="Outer-Fluid-Solid-Mesh" from="Outer-Fluid" to="Solid" initialize="yes"/>
<exchange data="Heat-Transfer-Coefficient-Outer-Fluid" mesh="Outer-Fluid-Solid-Mesh" from="Outer-Fluid" to="Solid" initialize="yes"/>
</coupling-scheme:multi>
</precice-configuration>
Loading

0 comments on commit 34f2ed3

Please sign in to comment.