10. Exchange surface

In the context of multi-method simulation or multi-scale simulation it often happens that numerical data produced by a computation must be used as input by another computation.

The exchange surface stores numerical data on a mesh according the huygens principle or the reciprocity principle.

10.1. Exchange Surface

An exchange surface is a named HDF5 group child of the category /exchangeSurface. The name’s length must have less than 20 characters.

An exchange surface has two attributes :

  • type. The type can take the following values :
    • reciprocity
    • huygens
    • gauss
  • nature
    • outside : the energy is radiated outside the surface
    • inside : the energy is radiated inside the surface

Example an exchangeSurface called /exchangeSurface/$surf1 :

data.h5
|-- mesh/
|   `-- $gmesh1/
|       `-- $mesh1[@type=unstructured]
`-- exchangeSurface/
    `-- $surf1[@type=huygens
               @nature=inside]

An exchange surface can have several single surfaces children, each single surface contains a quantity component relative to the principle surface.

10.2. Single Surface

An exchange surface can have several single surfaces, a quantity per single surface is stored. Each quantity is then stored in an HDF5 named group child of the exchange surface.

The name’s length of the component group must have less than 20 characters.

A single surface is a floatingType equals arraySet representing numerical data on mesh (see Numerical data on mesh).

Example of an exchange surface /exchangeSurface/$surf1 made up of two single surfaces /exchangeSurface/$surf1/$surf11 and /exchangeSurface/$surf1/$surf12 :

data.h5
|-- mesh/
|   `-- $gmesh1/
|       `-- $mesh1[@type=unstructured]
|           |-- nodes
|           `-- group
|               |-- $point_cloud[@type=node]
|               `-- $exchange_surface[@type=element
|                                     @entityType=face]
`-- exchangeSurface
    `-- $surf1[@type=huygens
        |      @nature=inside]
        |-- $surf11[@floatingType=arraySet           # single surface
        |    |       @physicalNature=electricField
        |    |       @unit=voltPerMeter]
        |    |-- data
        |    `-- ds
        |        |-- dim1[@physicalNature=component]
        |        `-- dim2[@physicalNature=meshEntity
        |                 @meshEntity=/mesh/$gmesh1/$mesh1/group/$exchange_surface]
        `-- $surf11[@floatingType=arraySet           # single surface
            |       @physicalNature=magneticField
            |       @unit=henryPerMeter]
            |-- data
            `-- ds
                |-- dim1[@physicalNature=component]
                `-- dim2[@physicalNature=meshEntity
                         @meshEntity=/mesh/$gmesh1/$mesh1/group/$exchange_surface]

In addition, consider a points cloud representing locations where physical quantities are computed. The huygens principle implies physical quantities are balanced by the a surface and oriented. The approach is to create a mesh with patches, the surface of a patch is the weight, a patch is also oriented, so the single surface is properly defined.

Example :

data.h5
|-- mesh/
|   `-- $gmesh1
|       `-- $mesh2[@type=unstructured]
|           |-- nodes
|           |-- elementTypes
|           `-- group
|               `-- $circular_patch[@type=element
|                                   @entityType=face]
`-- exchangeSurface
    `-- $surf1[@type=huygens
        |      @nature=inside]
        |-- $surf11[@floatingType=arraySet           # single surface
        |    |       @physicalNature=electricField
        |    |       @unit=voltPerMeter]
        |    |-- data
        |    `-- ds
        |        |-- dim1[@physicalNature=component]
        |        `-- dim2[@physicalNature=meshEntity
        |                 @meshEntity=/mesh/$gmesh1/$mesh2/group/$circular_patch]
        `-- $surf11[@floatingType=arraySet           # single surface
            |       @physicalNature=magneticField
            |       @unit=henryPerMeter]
            |-- data
            `-- ds
                |-- dim1[@physicalNature=component]
                `-- dim2[@physicalNature=meshEntity
                         @meshEntity=/mesh/$gmesh1/$mesh2/group/$circular_patch]

data.h5:/mesh/$gmesh1/mesh2/group/$circular_patch is a group of circle elements, their center are the quantities location, the surface is the weight of each value.