Module to describe additional elmental properties, like boundary conditions.
Every element in the octree structure can be assigned several properties. The description of the properties is kept abstract, such that very different properties can be assigned to elements in a similar manner. As 64 bits are available to describe additional properties, we could attach 64 different kinds of data to each element and each one combinable with all other properties. The most important data that has to be attached to elements in nearly every mesh are the boundary conditions in tem_bc_module, others are for example vertex displacements in tem_vrtx_module and regional influences. As the boundary conditions are such a basic part of the general mesh description, we present their property implementation exemplary in more detail. Each property is indicated by a bit in the property bit-mask. Which bit is attached to what kind of property is defined in the header file. The property might then be linked to further information stored in additional files. See tem_bc_module for details of the boundary implementation.
The amount and kind of additional data that might be attached to the elements by the properties is arbitrary and could involve several more indirections. For example an additional non-elemental file is typically required to describe vertex displacements of elements. Thus, for elements, where the vertices should be moved, there is an elemental list of integers indicating which vertices to use for the eight corners of the element. The actual coordinates are stored in a separate file with the coordinates for each vertex.
Element properties: each element might have up to 64 properties attached to it the bitpos indicates just the position of the bit in the field indicating, which should flag the corresponding property A 0 indicates the absence of the property and a 1 the presence Thus, an element with all bits set to 0 has no additional properties Must be smaller than 64, because the respective bits will be set in a 64-bit integer.
deallocate the property and header lists accordingly.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public, | parameter | :: | prp_fluid | = | 1 |
fluid |
integer, | public, | parameter | :: | prp_solid | = | 2 |
solid |
integer, | public, | parameter | :: | prp_hasBnd | = | 3 |
The element has boundaries. closer defined in the property module |
integer, | public, | parameter | :: | prp_defElems | = | 4 |
deformed Elements |
integer, | public, | parameter | :: | prp_chgElems | = | 5 |
changed Elements This is now used for adaptive refinement |
integer, | public, | parameter | :: | prp_fluidify | = | 6 |
Fluidifiable Elements |
integer, | public, | parameter | :: | prp_vrtx | = | 7 |
vertex information |
integer, | public, | parameter | :: | prp_hasQVal | = | 8 |
has qVal elements |
integer, | public, | parameter | :: | prp_hasIBM | = | 9 |
the element is a parent element of one or more surface data points |
integer, | public, | parameter | :: | prp_hasRemoteNgh | = | 10 |
element has a remote neighbor |
integer, | public, | parameter | :: | prp_sendHalo | = | 12 |
is this a fluid element which needs to be send to an attached proc |
integer, | public, | parameter | :: | prp_noSolidification | = | 13 |
Solidification is not allowed for this element. |
integer, | public, | parameter | :: | prp_hasNormal | = | 15 |
There is a boundary normal stored for this element |
integer, | public, | parameter | :: | prp_requireFullNeighborhood | = | 20 |
the complete neighborhood is required for this element |
integer, | public, | parameter | :: | prp_fineGhostClosestToFluid | = | 25 |
indicates whether this fine ghost cell is the closest to the fluid cell |
integer, | public, | parameter | :: | prp_isColored | = | 30 |
Indicate if the element has some coloring attached to it. |
integer, | public, | parameter | :: | prp_hasPolynomial | = | 31 |
This bit indicates wether the color in the element is further resolved by polynomial information. |
integer, | public, | parameter | :: | prp_particle | = | 32 |
An auxilary data type to describe modifications and additional features for some elements.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | nElems |
Number of local elements with this property |
|||
integer(kind=long_k), | public | :: | Offset |
Offset of the local chunk of elements with this property in the list of all elements with that properties on disk |
|||
integer, | public, | allocatable | :: | ElemID(:) |
The indices of elements in the local partition, that have this property. |
Defines how many properties there are.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_prophead_type), | pointer | :: | header(:) |
Pointer to the list of headers for the properties to be allocated |
||
type(tem_property_type), | pointer | :: | property(:) |
Pointer to the list of properties to be allocated |
||
integer, | intent(in) | :: | nproperties |
Number of properties to allocate in the list |
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_prophead_type), | pointer | :: | header(:) |
Pointer to list of property headers to destroy |
||
type(tem_property_type), | pointer | :: | property(:) |
Pointer to list of properties to destroy |
Gather the information on a property from the bit fields of all elements
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(tem_property_type), | intent(out) | :: | Property |
Property to gather |
||
type(tem_prophead_type), | intent(in) | :: | Header |
Header for this property |
||
integer(kind=long_k), | intent(in) | :: | BitField(:) |
The BitField for the properties of all local elements |
||
integer, | intent(in) | :: | comm |
Communicator to act on |