This module implements the abstract multisystem class.
In there is the possibility to group several systems into containers, which are implemented in the multisystem_basic_oct_m::multisystem_basic_t class. Containers can have different purposes and applications. In the simplest case, containers are simply a collection of other systems, and do not have their own interactions with anything else. In this case, containers do not introduce any different physics (or approximations), but simply help in the book-keeping of the problem.
- Note
- Containers do not correspond to a given region in space, but only to a selection of systems. In many cases, these systems might be confined to a certain region in space, but this is not a property of the container. In many other cases, e.g. combining matter and maxwell fields, both systems occupy the same space, or have a substantial overlap.
Another use case might be to group systems into a container, and then only interact with the whole container, instead of the individual systems. This, however, is an approximation, and furthermore (at least, at the moment) has some limitations due to the implementation.
- Note
- Note, that containers themselves do not move. This has consequences to the definition of the energy contributions. In particular, a container does not have its own kinetic energy, and all kinetic energy contributions of the constituents are accounted for in the internal energy.
|
recursive subroutine | multisystem_init_parallelization (this, grp) |
| brief initialize the parallelization of the multisystem More...
|
|
recursive real(real64) function | multisystem_next_time_on_largest_dt (this) |
|
recursive subroutine | multisystem_execute_algorithm (this) |
|
recursive subroutine | multisystem_reset_iteration_counters (this, accumulated_iterations) |
|
recursive subroutine | multisystem_init_algorithm (this, factory) |
|
recursive logical function | multisystem_algorithm_finished (this) |
|
recursive subroutine | multisystem_init_iteration_counters (this) |
| initialize the iteration counters of the contained systems More...
|
|
recursive subroutine | multisystem_propagation_start (this) |
| call the propagation_start routine for all contained systems More...
|
|
recursive subroutine | multisystem_propagation_finish (this) |
| call the propagation_finish routine for all contained systems More...
|
|
recursive subroutine | multisystem_add_partners_to_list (this, list, interaction_type) |
| add interaction partners contained in the multisystem to a list More...
|
|
recursive subroutine | multisystem_create_interactions (this, interaction_factory, available_partners) |
| create the interactions of the multisystem More...
|
|
subroutine | multisystem_init_interaction (this, interaction) |
| initialize a specific interaction More...
|
|
recursive subroutine | multisystem_write_interaction_graph (this, iunit, include_ghosts) |
| write a graphical representation of the interactions More...
|
|
recursive subroutine | multisystem_initial_conditions (this) |
|
logical function | multisystem_do_algorithmic_operation (this, operation, updated_quantities) |
|
recursive logical function | multisystem_is_tolerance_reached (this, tol) |
|
subroutine | multisystem_update_quantity (this, iq) |
|
subroutine | multisystem_init_interaction_as_partner (partner, interaction) |
|
subroutine | multisystem_copy_quantities_to_interaction (partner, interaction) |
|
recursive logical function | multisystem_process_is_slave (this) |
|
recursive subroutine | multisystem_update_kinetic_energy (this) |
| Calculate the kinetic energy: The kinetic energy of a container (multisystem) is defined by the kinetic energy with respect to the center or mass motion. More...
|
|
recursive subroutine | multisystem_update_internal_energy (this) |
|
subroutine | multisystem_update_potential_energy (this) |
| Calculate the potential energy for a container. More...
|
|
recursive real(real64) function | multisystem_pair_energy (partner_A, partner_B) |
| This function calculates the complete interaction energy between partner_A and partner_B, which means that for any container its constituents will be accounted for. This continues recursively up to the level of non-container systems. More...
|
|
recursive subroutine | multisystem_get_flat_list (this, flat_list) |
| Generate a list of all systems contained in a multisystem, including those inside child containers. More...
|
|
recursive subroutine, public | multisystem_end (this) |
|
recursive subroutine | multisystem_start_barrier (this, target_time, barrier_index) |
|
recursive subroutine | multisystem_end_barrier (this, barrier_index) |
|
recursive logical function | multisystem_arrived_at_barrier (this, barrier_index) |
|
recursive subroutine | multisystem_restart_write (this) |
|
recursive logical function | multisystem_restart_read (this) |
|
subroutine | multisystem_restart_write_data (this) |
|
logical function | multisystem_restart_read_data (this) |
|
recursive subroutine multisystem_oct_m::multisystem_add_partners_to_list |
( |
class(multisystem_t), intent(in) |
this, |
|
|
class(partner_list_t), intent(inout) |
list, |
|
|
integer, intent(in), optional |
interaction_type |
|
) |
| |
|
private |
add interaction partners contained in the multisystem to a list
This routine adds the multisystem to the list, then it calls the corresponding method for each subsystem.
If the interaction_type is provided, only partners that support that interaction are added, otherwise all partners are added.
Definition at line 457 of file multisystem.F90.
create the interactions of the multisystem
This routine creates the interactions of multisystem itself, then it calls the corresponding method for each subsystem.
If called for the top level multisystem, available_partners contains all systems owned by the multisystem container.
- Parameters
-
[in,out] | this | system for which interactions are created. |
[in] | interaction_factory | factory that creates the actual interactions |
[in] | available_partners | a list of available partners for the given system. |
Definition at line 490 of file multisystem.F90.
subroutine multisystem_oct_m::multisystem_update_potential_energy |
( |
class(multisystem_t), intent(inout) |
this | ) |
|
|
private |
Calculate the potential energy for a container.
The potential energy accounts for the energy of the content of the container in the field of all systems, which are not part of the container.
- Note
- It is important to note, that the potential energy of a container is not the sum of the potential energies of the constituent system.
Another complication arises when the container contains another container, as then we need to account for the interactions of its constituents with partners outside the current container.
Definition at line 778 of file multisystem.F90.