| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| real(kind=prec), | public | :: | dt | ||||
| real(kind=prec), | public | :: | entropy | ||||
| type(Mesh3D), | public, | pointer | :: | globalMesh | => | null() | Set id of every global element, s(e), e = 1..nGlobalElem (replicated). |
| logical, | public | :: | gradient_enabled | = | .false. | ||
| type(SetInterface3D), | public | :: | iface | Each set's solution%boundary, the trace the interface exchange sends. |
|||
| logical, | public | :: | interfacesReady | = | .false. | ||
| integer, | public | :: | ioIterate | = | 0 | ||
| integer, | public | :: | nInterfaceFaces | = | 0 | Interface map and ghost traces; built by SetupInterfaces. |
|
| integer, | public | :: | nSets | = | 0 | ||
| integer, | public | :: | nstepped | = | 0 | ||
| integer, | public | :: | nvar | ||||
| logical, | public | :: | prescribed_bcs_enabled | = | .true. | ||
| integer, | public, | allocatable | :: | setGlobalId(:) | Number of set-k elements on lower ranks, k = 1..nSets. |
||
| integer, | public, | allocatable | :: | setOfElem(:) | Set-global id g_k(e) of every global element within its own set (replicated). |
||
| integer, | public, | allocatable | :: | setOffsetThisRank(:) | Number of interface faces summed over all sets and all ranks. |
||
| type(ElementSet3D), | public, | allocatable | :: | sets(:) | The global mesh the sets were extracted from. Not owned. |
||
| real(kind=prec), | public | :: | t | ||||
| logical, | public | :: | tecplot_enabled | = | .true. | ||
| procedure(SELF_timeIntegrator), | public, | pointer | :: | timeIntegrator | => | Euler_timeIntegrator | |
| type(SetTraceRef), | public, | allocatable | :: | traces(:) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| integer(kind=HID_T), | intent(in) | :: | fileid |
entropy = sum over sets k of the entropy of set k. Each set's CalculateEntropy is collective over its communicator, so it runs on every set, empty or not.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Exchange interface traces, fill the interface exterior states, then compute the tendency of every set with elements on this rank, in set order. See the module documentation for the stage order.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | tn |
Write solution%extBoundary on the interface faces of set iset from the ghost traces of the last exchange:
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | iset |
Forward steps the model using the associated tendency procedure and time integrator
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | tn | |||
| real(kind=prec), | intent(in) | :: | dt | |||
| real(kind=prec), | intent(in) | :: | ioInterval |
Free the interface map, then every set's model, geometry and sub-mesh, then the sub-mesh communicators. The global mesh is not owned and is left alone. Collective.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Returns the current simulation time stored in the model % t attribute
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(out) | :: | t |
Advance the output counter of the parent and of every set.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Split globalMesh into nSets element sets and build each set's sub-mesh and geometry. The set models are not created here; see the module documentation.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(out) | :: | this | |||
| type(Mesh3D), | intent(in), | target | :: | globalMesh | ||
| type(Lagrange), | intent(in), | pointer | :: | interp | ||
| integer, | intent(in) | :: | setOfElemLocal(1:globalMesh%nElem) | |||
| integer, | intent(in) | :: | nSets |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | tn |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | tn |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | tn |
Run every set's PostStepHook, empty sets included, after syncing the set clocks.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Run every set's PreStepHook, empty sets included, after syncing the set clocks.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
PreTendencyHook is a template routine that is used to house any additional calculations that you want to execute at the beginning of the tendency calculation routine. This default PreTendencyHook simply returns back to the caller without executing any instructions
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this |
Read every set's solution from a file written by WriteModel, then copy it to the device. The file must hold the same element-set partition (setOfElem) and the same number of nodes per element; a variable with no dataset keeps its current value. The host copy is refreshed from the device first, so on GPU builds that value is the device's.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| character, | intent(in) | :: | filename |
Base method for reporting the entropy of a model to stdout. Only override this procedure if additional reporting is needed. Alternatively, if you think additional reporting would be valuable for all models, open a pull request with modifications to this base method.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this |
Report each set's metrics. Rank-local; sets with no elements on this rank are skipped, since their min and max are undefined.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Report unmapped boundary faces for every set. The counts are already global.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Method that can be overridden by users to report their own custom metrics after file io
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this |
Sets the model % t attribute with the provided simulation time
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in) | :: | t |
Sets the time integrator method, using a character input
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(inout) | :: | this | |||
| character, | intent(in) | :: | integrator |
Finish setup once every set model has been allocated and initialized.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Copy the parent's simulation time and time step to every set model.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this |
Stage m of the low-storage RK2 update, for every set with elements on this rank.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | m |
Stage m of the low-storage RK3 update, for every set with elements on this rank.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | m |
Stage m of the low-storage RK4 update, for every set with elements on this rank.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| integer, | intent(in) | :: | m |
Forward-Euler update of every set with elements on this rank. dt defaults to the parent's time step.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| real(kind=prec), | intent(in), | optional | :: | dt |
Write every set's solution and geometry to one HDF5 file; see the module
documentation for the layout. Without filename the file is
solution.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| character, | intent(in), | optional | :: | filename |
Write one rank-local Tecplot file per set with elements on this rank.
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(MultiSetModel3D_t), | intent(inout) | :: | this | |||
| character, | intent(in), | optional | :: | filename |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:2) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:3) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | sL(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | sR(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | nhat |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | sL(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | sR(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:2) | |||
| real(kind=prec), | intent(in) | :: | nhat(1:2) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | sL(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | sR(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:3) | |||
| real(kind=prec), | intent(in) | :: | nhat(1:3) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:2) |
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| class(Model), | intent(in) | :: | this | |||
| real(kind=prec), | intent(in) | :: | s(1:this%nvar) | |||
| real(kind=prec), | intent(in) | :: | dsdx(1:this%nvar,1:3) |
type,extends(Model) :: MultiSetModel3D_t
integer :: nSets = 0
type(ElementSet3D),allocatable :: sets(:)
!! The global mesh the sets were extracted from. Not owned.
type(Mesh3D),pointer :: globalMesh => null()
!! Set id of every global element, s(e), e = 1..nGlobalElem (replicated).
integer,allocatable :: setOfElem(:)
!! Set-global id g_k(e) of every global element within its own set (replicated).
integer,allocatable :: setGlobalId(:)
!! Number of set-k elements on lower ranks, k = 1..nSets.
integer,allocatable :: setOffsetThisRank(:)
!! Number of interface faces summed over all sets and all ranks.
integer :: nInterfaceFaces = 0
!! Interface map and ghost traces; built by SetupInterfaces.
type(SetInterface3D) :: iface
!! Each set's solution%boundary, the trace the interface exchange sends.
type(SetTraceRef),allocatable :: traces(:)
logical :: interfacesReady = .false.
contains
procedure :: Init => Init_MultiSetModel3D_t
procedure :: SetupInterfaces => SetupInterfaces_MultiSetModel3D_t
procedure :: FillInterfaceBoundary => FillInterfaceBoundary_MultiSetModel3D_t
procedure :: Free => Free_MultiSetModel3D_t
procedure :: CalculateTendency => CalculateTendency_MultiSetModel3D_t
procedure :: UpdateSolution => UpdateSolution_MultiSetModel3D_t
procedure :: UpdateGRK2 => UpdateGRK2_MultiSetModel3D_t
procedure :: UpdateGRK3 => UpdateGRK3_MultiSetModel3D_t
procedure :: UpdateGRK4 => UpdateGRK4_MultiSetModel3D_t
procedure :: PreStepHook => PreStepHook_MultiSetModel3D_t
procedure :: PostStepHook => PostStepHook_MultiSetModel3D_t
procedure :: IncrementIOCounter => IncrementIOCounter_MultiSetModel3D_t
procedure :: CalculateEntropy => CalculateEntropy_MultiSetModel3D_t
procedure :: ReportMetrics => ReportMetrics_MultiSetModel3D_t
procedure :: ReportUnmappedBoundaries => ReportUnmappedBoundaries_MultiSetModel3D_t
procedure :: ReadModel => Read_MultiSetModel3D_t
procedure :: WriteModel => Write_MultiSetModel3D_t
procedure :: WriteTecplot => WriteTecplot_MultiSetModel3D_t
procedure,private :: SyncSetClocks
endtype MultiSetModel3D_t