3. The Amelet HDF file¶
Before anything else, an Amelet HDF file is an HDF5 file. To know the file is precisely an Amelet HDF instance, the file object has two attributes :
FORMAT
is an HDF5 string attribute, its value isAMELETHDF
.AMELETHDF_FORMAT_VERSION
is an HDF5 string attribute defining the version number of the Amelet HDF specification.AMELETHDF_FORMAT_VERSION
attribute is composed of three integers separated by colons. The first integer is the major version, the second integer is the minor version and the third integer is a release number. The release number is rarely used.
Example :
data.h5[@FORMAT=AMELETHDF
| @AMELETHDF_FORMAT_VERSION=1.0.0]/
`-- physicalModel
`-- volume
|--$water
`--$soltWater
4. Predefined categories¶
Amelet HDF is a specialization of the HDF5 format, it can then be represented by a tree, for which all groups (branches) can contain groups or leaves (datasets, tables). Branches and leaves can have attributes to precise specific values.
These groups, datasets and tables compose a hierarchical dictionary of electromagnetic data definitions like dielectric materials, impedance, mesh object or numerical data, electromagnetic sources (antenna) and so on.
4.1. The first rule¶
Amelet HDF relies on a first rule, each definition is contained in a
predefined category (a category is an HDF5 group). For instance, three
homogeneous material models will be defined in /physicalModel/volume
:
data.h5/
`-- physicalModel
`-- volume
|--$water
`--$soltWater
Note
In this document, where there are prefixed HDF5 names with “$”,
($water
, $soltWater
) the
names are example names the user can modify.
4.2. Categories¶
Amelet HDF information hierarchies can be represented by a tree a human being can easily read
data.h5/
|-- label
|-- group
|-- externalElement
|-- globalEnvironment
|-- electromagneticSource
| |-- planeWave
| |-- sphericalWave
| |-- generator
| |-- dipole
| |-- sourceOnMesh
| `-- antenna
|-- physicalModel
| |-- multiport
| |-- multilayer
| |-- slotProperties
| |-- anisotropic
| |-- volume
| |-- aperture
| |-- shield
| `-- grid
|-- mesh
|-- floatingType
|-- exchangeSurface
|-- transmissionLine
| `--transmissionLineElement
|-- network
| `-- $net1
| |-- topology
| |-- tubes
| |-- junctions
| `-- connections
|-- link
|-- outputRequest
|-- localizationSystem
|-- extensionTypes
| `-- $car
`-- simulation
`-- $sim1
|-- input
`-- output
The predefined categories are presented underneath and each one represents a concept of the electromagnetic simulation domain :
- label
The category contains all labels used in the Amelet HDF instance.
- group
This category contains
group
objects. A group contains only element names which have something in common
- externalElement
The category contains all elements used in the Amelet HDF instance but defined in another instance.
- globalEnvironment
Global data about simulations. If the simulation is in the time domain, “time” defines the computation duration, if the simulation is in the frequency domain, “frequency” defines the input simulation spectrum.
- electromagneticSource
This category contains all electromagnetic sources definition :
- planeWave
A plane wave is defined by a direction of propagation, a linear polarisation angle, an elliptic polarisation angle, a magnitude and a nul phase point
- generator
A generator is defined by a magnitude and a linear circuit element
- dipole
A dipole is defined by a rotation, a localization, a magnitude, a linear circuit element, a length and a radius.
- sourceOnMesh
A source on mesh is defined by an array of values and an exchange Surface
- antenna
An antenna is defined by an efficiency, a magnitude, an input impedance, a feeder impedance and a load impedance.
- physicalModel
In physicalModel are gathered all physical models.
- volume
This groups defines homogeneous volume material. A volume material is composed of a relative permittivity, an electric conductivity, a relative permeability and a magnetic conductivity
Predefined volume :
vacuum
- multiport
This category contains material models based upon linear circuit elements. All classical element can be used : impedance, admittance, resistance, inductance, capacitance, conductance, s parameters, multiport circuit ?
Predefined multiports :
short circuit
,open circuit
,matched multiport
- anisotropic
An anisotropic material is defined by volumes or linear multiport. One material model per matrices element
- multilayer
A multilayer material is a group of layers, a layer is the association of a physicalModel/material and a thickness
- interface
A interface defines the connection between two media
- slotProperties
A slot properties defined a slot with a width, a thickness and a material
- mesh
Electromagnetic simulation methods often consume a discretized space. The space can be discretized with unstructured elements or structured elements. In this category all meshes are gathered.
selectorOnMesh Mesh entity are not named in the mesh category (or mesh group), the three tables in this category allow to give a name to mesh entities.
- link
Once material models and meshes are defined, boundary conditions may have to be set. Links associate material models to mesh entities.
- floatingType
This category contains floatingType elements which are meaningless in the context of Amelet HDF neither a predefined location.
FloatingType
computation results are stored in this category : electric field, magnetic field, current…
- exchangeSurface
exchangeSurface modelize the data and the mesh to share data between electromagnetic simulations
- transmissionLine
This category defines a transmission line section
- network
This category describes all networks in the simulation
- localizationSystem
Coordinate system definition
- simulation
Definition of the simulations with input data and output data
- extensionType
Definition of extensions
OutputRequest
4.3. The entry point¶
The general shape of a Amelet HDF instance is an HDF5 file with a lot of not empty categories.
The question is the following : what is the first element to be read ?
The file attribute @entryPoint
is the answer, @entryPoint
is an HDF5
string attribute that spots the major element of the file. @entryPoint
is optional.
data.h5[@entryPoint=/simulation/$sim1]
`-- simulation/
`-- $sim1[@module=my-module
| @version=1.2]
|-- parameter
|-- inputs
`-- outputs
In this example, the first element the reader must open is
data.h5:/simulation/$sim1
.
In addition @entryPoint
can focus a on group if there is no particular
element to read :
data.h5[@entryPoint=/floatingType]
`-- floatingType/
|-- $e_field
`-- $h_field
Here, the Amelet HDF instance stores some arraySets, the @entryPoint
gives
the nature of the file.
4.4. Physical quantity and unit¶
4.4.1. International System of Units¶
The value of a physical quantity Q is expressed as the product of a numerical value {Q} and a physical unit [Q]* (http://en.wikipedia.org/wiki/Physical_quantity) :
Q = {Q} x [Q]
All [Q] are expressed in the SI units (http://en.wikipedia.org/wiki/SI) except for angular quantities.
4.4.2. Angular quantities¶
Angular quantities are stored in degree
instead of radian
,
it is the scientists preferred unit.
Warning
Angular quantities are stored in degree
.
4.5. The simulation object¶
The purpose of the Amelet HDF Specification is to provide a standard for recording and recovering computer data of electromagnetic simulations, but what about the simulation itself ? Amelet HDF makes an attempt to describe the simulation with its inputs and outputs.
A simulation is an HDF5 group and is localized in the simulation
category,
see for instance $sim1
simulation below
data.h5/
`-- simulation
`-- $sim1[@module=my-module
| @version=1.2]
|-- parameter
|-- inputs
`-- outputs
A simulation
child (i.e. a simulation) has two attributes :
the
module
attribute : this attribute gives the name of the module or the treatment process that must interpret the file, it is an HDF5 string attributethe
version
attribute : this attribute is the version number of the module, it is an HDF5 string attribute
In this preceding example, a “$sim1” simulation is defined, and the module that will be used is “my-module” in version 1.2.
The simulation
group has three children :
parameter
:parameter
contains the module’s specific parameters of the simulation like global key words, global options.inputs
:inputs
contains all informations used in the simulation, it is an HDF5 string datasetoutputs
:outputs
contains the informations skeleton of the output created by the simulation, it is an HDF5 string dataset
Warning
The simulation object is the default entry point of an Amelet HDF file.
4.5.1. The simulation’s parameters¶
The simulation’s parameters are module’s specific parameters of a simulation like global key words, global options, all information that is not common.
The module’s specific parameters can not be specified by Amelet HDF but Amelet HDF allows the user to describe schema data needed by the module.
Simulation parameters are named typed element, the type can be either simple (i.e. a native type) or compound (i.e. a structure) :
The simple types are :
integer
real
string
boolean
A compound type is a type made of a list of named simple types, example : (param1: integer, param2: real, param3: string)
/simulation/$simulation/parameter
is an HDF5 group and parameters are written
as follows :
Simple type parameters become simple HDF5 named attributes
Compound parameters are stocked in named HDF5 tables where columns are the structure’s fields and the table’s name is the parameter’s name.
Example :
Consider the parameters defined by :
Parameter 1 :
name : color
type : string
Parameter 2 :
name : temperature
type : real
Parameter 3 :
name : listOfCommands
type : compound
name : commandName
type : string
name : option1
type : string
name : option2
type : string
As a consequence, an instance of Amelet HDF looks like :
data.h5/
`-- simulation/
`-- $sim1[@module=my-module
| @version=1.2]
|-- inputs
|-- outputs
`-- parameter[@color=black
| @temperature=300]
`-- listOfCommands
with the data.h5:/simulation/$sim1/parameter/listOfCommands
table :
commandName |
option1 |
option2 |
---|---|---|
$command1 |
$option11 |
$option12 |
$command2 |
$option21 |
$option22 |
Note
Logically, simulation parameters of a specific module are not specified by Amelet HDF. One could think it would be necessary to add physical nature of parameters to the Amelet HDF instance, but the Amelet HDF instance is aimed to be read by the module adapter, and this component knows the module’s interface.
Parameters physical nature is not mentioned in a simulation software input file.
4.5.2. The simulation’s inputs¶
The simulation’s inputs element is a one dimensional HDF5 string dataset.
The possible inputs for a module are defined by the module itself, so there is no surprise by discovering the list of inputs. The module can perform some checks.
For a 3D electromagnetic module, FDTD method for instance,
the first input to be read could
be /link/$my-data-on-mesh
, this object associates all physical
models to the mesh entities.
For instance see the following inputs
dataset:
|
|
|
|
|
|
|
The simulation takes a mesh ($my-car), a data on mesh ($my-data-on-mesh), a volume material ($iron), two antennas ($my-antenna-1, $my-antenna-2) located with the localization system.
4.5.3. The simulation’s outputs¶
On one hand, simulation’s inputs are described in the inputs
group, on the
other hand, many objects will be created while the computation runs and have to
be well organized in order to be read correctly by the next process.
Simulation’s output group describes those created objects.
The simulation’s outputs element is a one dimensional HDF5 string dataset.
For instance see the following table :
data.h5/
|-- extensionType/
| `-- dataSet
| `-- $data1
| `-- linksDefinition
|-- floatingType/
| |-- $e_field
| |-- $h_field
| |-- $current
| `-- $tension
`-- simulation/
`-- $sim1[@module=my-module
| @version=1.2]
|-- inputs
`-- outputs
with data.h5:/extensionType/dataSet/$data1/linksDefinition
:
name |
specificRole |
---|---|
|
|
|
|
|
|
|
and data.h5:/simulation/$sim1/outputs
:
|
|
4.5.4. Simulation’s parametric elements¶
A parametric simulation is a simulation defined by a set of combinatorial input data. For instance, for a monochromatic solver the computation on a frequency spectrum (i.e. several frequencies) is a parametric simulation.
In Amelet HDF, simulation parametric elements are described in
the optional /simulation/$simulation/parametricElements
object.
/simulation/$simulation/parametricElements
is a three column array :
The first column is a string column which contains the name of the element that takes multiple values
The second column is a string column which contains the name of an Amelet-HDF group. The group gives the possible values for the preceding element
The third column is a string column which contains the name of a floatingType. This floatingType gives a reprensentation of the possible values which could become absissa labels in a plot.
data.h5/
|-- extensionType/
| `-- dataSet
| `-- $data1
| `-- linksDefinition
|-- globalEnvironment/
| `-- $ge
| `-- frequency[@floatingType=singleReal
| @value=1e3
| @physicalNature=frequency
| @unit=hertz]
|-- floatingType/
| |-- $frequency1e3[@floatingType=singleReal
| | @value=1e3
| | @physicalNature=frequency
| | @unit=hertz]
| |-- $frequency1e4[@floatingType=singleReal
| | @value=1e3
| | @physicalNature=frequency
| | @unit=hertz]
| |-- $frequency1e5[@floatingType=singleReal
| | @value=1e3
| | @physicalNature=frequency
| | @unit=hertz]
| |-- $frequency1e6[@floatingType=singleReal
| | @value=1e3
| | @physicalNature=frequency
| | @unit=hertz]
| |-- $axis_values[@floatingType=vector
| | @physicalNature=frequency
| | @unit=hertz]
| |-- $e_field
| |-- $h_field
| |-- $current
| `-- $tension
|-- group/
| `-- $all_frequencies
`-- simulation/
`-- $sim1[@module=my-module
| @version=1.2]
|-- parametricElements
|-- parameter
|-- inputs
`-- outputs
With /group/$all_frequencies
:
|
|
|
|
With /simulation/$sim1/parametricElements
:
|
|
|
In the example, the process will create a number of simulations equals
the number of elements of /group/$all_frequencies`
simulations.
4.5.5. Batch submission system¶
4.6. The group
category¶
This category contains group
objects. A group contains only element
names which have something in common.
In the following example, data.h5:/group/$em_field_result
is used
to gather /floatingType/$e_field
and /floatingType/$h_field
for
an output request for instance (see Output requests for output
request definition) :
data.h5/
|-- label/
| `-- outputRequests
|-- mesh/
| `-- $gmesh1
| `-- $sphere
| `-- group
| |-- $inside[@type=element
| | @entityType=volume]
| `-- $skin[@type=element
| @entityType=:face]
|-- group
| |-- $em_field_result
| `-- $group2
|-- floatingType/
| |-- $e_field
| |-- $h_field
| |-- $current
| `-- $tension
|-- simulation/
| `-- $sim1[@module=my-module
| | @version=1.2]
| |-- inputs
| `-- outputs
`-- outputRequest/
`-- $outputRequest_group/
`-- $or1[@subject=/label/predefinedOutputRequests
@subject_id=0
@object=/mesh/$gmesh1/$sphere/group/$inside
@output=/floatingType/$e_field]
with data.h5:/label/outputRequests
:
|
and with data.h5:/group/$em_field_result
:
|
|