Project

General

Profile

Feature #12101

Updating Corner halo grid boxes

Added by Philippe Le Sager 10 months ago.

Status:
New
Priority:
Low
Assignee:
-
Category:
-
Target version:
-
Start date:
10/10/2018
Due date:
% Done:

0%


Description

This is a feature desirable for output_station.
Here's a grid seen by one processor, assuming a halo of 1:

   | C | x | x | x | C |
   |---+---+---+---+---|
   | x | . | . | . | x |
   |---+---+---+---+---|
   | x | . | . | . | x |
   |---+---+---+---+---|
   | x | . | . | . | x |
   |---+---+---+---+---|
   | C | x | x | x | C |

The domain attached to the processor is indicated by the dotted area. When needed, information from the neighboring processors (indicated with X) is fetched, filling the halo. This is typically done in the code with calls to update_halo functions, and is useful for transport and some interpolations. However, if your interpolation scheme requires one of the corner neighbors (indicated by C), it will not work, because there is no routine to retrieve their value.

What's need to be done is known. In the base/domain_decomp.F90:
  • add a integer :: corners(4) attribute to the Dist_Grid type
  • fill it with the correct processors numbers if any (similar to what is done to DistGrid%neighbors)
  • write Update_corners communication routines similar to Update_halo.

The last step is the tricky one, and will require a get_corner_type (similar to what is done with get_halo_type) to define the adequate derived MPI type.

Also available in: Atom PDF