mus_intp_update_depFromCoarser Subroutine

public subroutine mus_intp_update_depFromCoarser(intp, levelDesc, stencil, minLevel, maxLevel)

The required source elements for ghost from coarser elements are identified in this routine. Moreover, the weights for each sources based on distance are calculated. \n

The depdendencies for ghostFromCoarser elements initially only include its parent element. Additional dependencies Y for the element x are found which were not included in the construction routine before hand. However, they are defined to be inherently part of the stencil and hence exist locally and can simply be added to the dependencies. Two different ways are implemented. 1. Compact interpolation stencil

  Y       Y

        x   o
  Y       O
        o   o
  1. Full interpolation stencil the complete compute stencil is included into the dependency list
  Y       Y       Y

        x   o
  Y       O       Y
        o   o

  Y       Y       Y

If extended stencil is used, all of its sources are identified at first. If this fails (not all sources can be found), then only identify by compact stencil

Note: The view here is according to how the interpolation will be done. The coarse level does the interpolation for the finer level. Thus, we access the information from the levelDesc with the targetLevel and sourceLevel perspective.

Steps of finding sources: 1. loop over all neighbors: iNeigh = 1, QQ 2. get neighbor posInTotal: elemPos = neigh(1)%nghElems 3. if elemPos > 0, add this source into depFromCoarser%elem add this source into sourceFromCoarser save its position in sourceFromCoarser into depFromCoarser%elemBuffer calculate its weight based on relative coordinates in stencil weight is inverse proportional to the distance from source to target weight is normalized at last, so that sum of weights equals 1 4. save its offset on stencil

After finding sources, append target to low or high interpolation list based on if all required sources are found.


type(mus_interpolation_type), intent(inout) :: intp

interpolation type

type(tem_levelDesc_type) :: levelDesc(minLevel:maxLevel)

Level Descriptor

type(tem_stencilHeader_type), intent(in) :: stencil
integer, intent(in) :: minLevel
integer, intent(in) :: maxLevel


proc~~mus_intp_update_depfromcoarser~~CallsGraph proc~mus_intp_update_depfromcoarser mus_intp_update_depFromCoarser proc~tem_horizontalspacer tem_horizontalSpacer proc~mus_intp_update_depfromcoarser->proc~tem_horizontalspacer interface~append~4 append proc~mus_intp_update_depfromcoarser->interface~append~4 proc~find_possintporderandupdatemysources find_possIntpOrderAndUpdateMySources proc~mus_intp_update_depfromcoarser->proc~find_possintporderandupdatemysources proc~compute_weight compute_weight proc~mus_intp_update_depfromcoarser->proc~compute_weight proc~depsource_append depSource_append proc~mus_intp_update_depfromcoarser->proc~depsource_append proc~tem_abort tem_abort proc~mus_intp_update_depfromcoarser->proc~tem_abort none~updatemysources updateMySources proc~find_possintporderandupdatemysources->none~updatemysources proc~compute_weight->proc~tem_abort

Called by

proc~~mus_intp_update_depfromcoarser~~CalledByGraph proc~mus_intp_update_depfromcoarser mus_intp_update_depFromCoarser proc~mus_construct mus_construct proc~mus_construct->proc~mus_intp_update_depfromcoarser proc~mus_initialize mus_initialize proc~mus_initialize->proc~mus_construct proc~mus_perform_dynloadbal mus_perform_dynLoadBal proc~mus_perform_dynloadbal->proc~mus_construct program~mus_harvesting mus_harvesting program~mus_harvesting->proc~mus_construct program~musubi musubi program~musubi->proc~mus_initialize none~do_balance do_balance none~do_balance->proc~mus_perform_dynloadbal proc~mus_solve mus_solve proc~mus_solve->none~do_balance



integer, private :: sourceLevel
integer, private :: targetLevel
integer, private :: targetElem
integer, private :: iElem
integer, private :: iNeigh
integer, private :: nGhostElems
integer, private :: nFoundSources
integer, private :: posInTotal
integer, private :: parentPosInTotal
real(kind=rk), private :: targetBary(3)
integer, private :: mySources(stencil%QQ)
integer, private :: myNeighDir(stencil%QQ)
integer, private :: posInMatArray
integer, private :: intpOrder
integer, private :: childNum
integer, private :: iOrder
logical, private :: success
integer, private :: sourceElem
integer, private :: iSourceElem