MODFLOW 6
version 6.7.0.dev0
USGS Modular Hydrologic Model
|
The Virtual Exchange is based on two Virtual Models and is therefore not always strictly local or remote. We have to consider three different cases: More...
Public Member Functions | |
procedure | create => vx_create |
procedure | prepare_stage => vx_prepare_stage |
procedure | get_send_items => vx_get_send_items |
procedure | get_recv_items => vx_get_recv_items |
procedure | has_mover => vx_has_mover |
procedure | destroy => vx_destroy |
procedure | vdc_create |
generic | map => map_scalar, map_array1d, map_array2d |
procedure | link_items => vdc_link_items |
procedure | set_element_map => vdc_set_element_map |
procedure | get_vrt_mem_path => vdc_get_vrt_mem_path |
procedure | set_orig_rank => vdc_set_orig_rank |
procedure | get_virtual_data => vdc_get_virtual_data |
procedure | print_items |
procedure | set |
Public Attributes | |
class(virtualmodeltype), pointer | v_model1 => null() |
class(virtualmodeltype), pointer | v_model2 => null() |
type(virtualinttype), pointer | nexg => null() |
type(virtualinttype), pointer | naux => null() |
type(virtualinttype), pointer | ianglex => null() |
type(virtualint1dtype), pointer | nodem1 => null() |
type(virtualint1dtype), pointer | nodem2 => null() |
type(virtualint1dtype), pointer | ihc => null() |
type(virtualdbl1dtype), pointer | cl1 => null() |
type(virtualdbl1dtype), pointer | cl2 => null() |
type(virtualdbl1dtype), pointer | hwva => null() |
type(virtualdbl2dtype), pointer | auxvar => null() |
integer(i4b) | id |
unique identifier matching with the real counterpart More... | |
integer(i4b) | container_type |
to identify the actual type of this container More... | |
character(lencomponentname) | name |
container name (model, exchange, ...) used in the memory path More... | |
character(lencontextname) | vmem_ctx |
prefixes virtual memory located on remote processes More... | |
logical(lgp) | is_local |
when true, the physical object resides on the same process. However, some of its variables can still be remote More... | |
logical(lgp) | is_active |
when true, this container is being synchronized More... | |
integer(i4b) | orig_rank |
the global rank of the process which holds the physical data for this container More... | |
type(stlvecint) | rcv_ranks |
the ranks of processes, other than orig_rank, having this container active (only guaranteed to be complete after synchronization) More... | |
type(listtype) | virtual_data_list |
a list with all virtual data items for this container More... | |
type(vdcelementmaptype), dimension(nr_vdc_element_maps) | element_maps |
a list with all element maps More... | |
type(vdcelementluttype), dimension(nr_vdc_element_maps) | element_luts |
lookup tables from remote index to local index More... | |
Private Member Functions | |
procedure, private | init_virtual_data |
procedure, private | allocate_data |
procedure, private | deallocate_data |
procedure, private | add_to_list |
procedure, private | map_scalar |
procedure, private | map_array1d |
procedure, private | map_array2d |
procedure, private | map_internal |
procedure, private | vdc_get_virtual_data |
procedure, private | get_items_for_stage |
1) both virtual models are local
RECV: In this case this virtual data container will have no data items to receive from other processes. SEND: Whenever it is called to send its virtual data items to other processes, it simply sends everything.
2) one model is local, one model is remote
Consequently, there is another exchange which has the reverse, we call this our dual exchange.
RECV: The sender is our dual exchange, and we have all data except its list of reduced model node numbers, either thisnodem1 or thisnodem2. We receive the missing array. Receiving from a sender that is not the dual exchange cannot occur.
SEND: here we have to consider two cases a) The receiver is our dual exchange, we return the favor and send the list of model node numbers that is present on this process, this would be either thisnodem1 or thisnodem2 b) The receiver is not the dual exchange. And here we will send everything.
3) both models are remote
RECV: we will receive everything. In case the source exchange is fully local, i.e. type 1) above, we get all the data at the first attempt. Otherwise, it will take a second attempt before all the data is in. (To allow for two attempts, the nodem1 and nodem2 arrays are registered to be synchronized at two consecutive stages)
SEND: nothing to be sent.
This behavior is different from the general VirtualDataContainer, so the get_send_items and get_recv_items subroutines are overridden accordingly. Additionally, for case 2) the container will have a mix of
Definition at line 65 of file VirtualExchange.f90.
|
privateinherited |
Definition at line 84 of file VirtualDataContainer.f90.
|
private |
Definition at line 89 of file VirtualExchange.f90.
procedure virtualexchangemodule::virtualexchangetype::create |
Definition at line 81 of file VirtualExchange.f90.
|
private |
Definition at line 90 of file VirtualExchange.f90.
procedure virtualexchangemodule::virtualexchangetype::destroy |
Definition at line 86 of file VirtualExchange.f90.
|
privateinherited |
Definition at line 90 of file VirtualDataContainer.f90.
procedure virtualexchangemodule::virtualexchangetype::get_recv_items |
Definition at line 84 of file VirtualExchange.f90.
procedure virtualexchangemodule::virtualexchangetype::get_send_items |
Definition at line 83 of file VirtualExchange.f90.
|
inherited |
Definition at line 79 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 74 of file VirtualDataContainer.f90.
procedure virtualexchangemodule::virtualexchangetype::has_mover |
Definition at line 85 of file VirtualExchange.f90.
|
private |
Definition at line 88 of file VirtualExchange.f90.
|
inherited |
Definition at line 72 of file VirtualDataContainer.f90.
|
inherited |
|
privateinherited |
Definition at line 86 of file VirtualDataContainer.f90.
|
privateinherited |
Definition at line 87 of file VirtualDataContainer.f90.
|
privateinherited |
Definition at line 88 of file VirtualDataContainer.f90.
|
privateinherited |
Definition at line 85 of file VirtualDataContainer.f90.
procedure virtualexchangemodule::virtualexchangetype::prepare_stage |
Definition at line 82 of file VirtualExchange.f90.
|
inherited |
Definition at line 80 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 82 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 73 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 76 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 69 of file VirtualDataContainer.f90.
|
privateinherited |
Definition at line 89 of file VirtualDataContainer.f90.
type(virtualdbl2dtype), pointer virtualexchangemodule::virtualexchangetype::auxvar => null() |
Definition at line 79 of file VirtualExchange.f90.
type(virtualdbl1dtype), pointer virtualexchangemodule::virtualexchangetype::cl1 => null() |
Definition at line 76 of file VirtualExchange.f90.
type(virtualdbl1dtype), pointer virtualexchangemodule::virtualexchangetype::cl2 => null() |
Definition at line 77 of file VirtualExchange.f90.
|
inherited |
Definition at line 55 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 67 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 66 of file VirtualDataContainer.f90.
type(virtualdbl1dtype), pointer virtualexchangemodule::virtualexchangetype::hwva => null() |
Definition at line 78 of file VirtualExchange.f90.
type(virtualinttype), pointer virtualexchangemodule::virtualexchangetype::ianglex => null() |
Definition at line 71 of file VirtualExchange.f90.
|
inherited |
Definition at line 54 of file VirtualDataContainer.f90.
type(virtualint1dtype), pointer virtualexchangemodule::virtualexchangetype::ihc => null() |
Definition at line 75 of file VirtualExchange.f90.
|
inherited |
Definition at line 60 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 58 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 56 of file VirtualDataContainer.f90.
type(virtualinttype), pointer virtualexchangemodule::virtualexchangetype::naux => null() |
Definition at line 70 of file VirtualExchange.f90.
type(virtualinttype), pointer virtualexchangemodule::virtualexchangetype::nexg => null() |
Definition at line 69 of file VirtualExchange.f90.
type(virtualint1dtype), pointer virtualexchangemodule::virtualexchangetype::nodem1 => null() |
Definition at line 73 of file VirtualExchange.f90.
type(virtualint1dtype), pointer virtualexchangemodule::virtualexchangetype::nodem2 => null() |
Definition at line 74 of file VirtualExchange.f90.
|
inherited |
Definition at line 61 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 62 of file VirtualDataContainer.f90.
class(virtualmodeltype), pointer virtualexchangemodule::virtualexchangetype::v_model1 => null() |
Definition at line 66 of file VirtualExchange.f90.
class(virtualmodeltype), pointer virtualexchangemodule::virtualexchangetype::v_model2 => null() |
Definition at line 67 of file VirtualExchange.f90.
|
inherited |
Definition at line 65 of file VirtualDataContainer.f90.
|
inherited |
Definition at line 57 of file VirtualDataContainer.f90.