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. 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

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.

suppChild = 1

write(dbgUnit(5),"(A, I0)") ' suppChild: ', suppChild write(dbgUnit(5),"(A, I0)") ' childNum: ', childNum

Arguments

Type IntentOptional Attributes Name
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

Calls

proc~~mus_intp_update_depfromcoarser~~CallsGraph proc~mus_intp_update_depfromcoarser mus_intp_update_depFromCoarser append append proc~mus_intp_update_depfromcoarser->append coord coord proc~mus_intp_update_depfromcoarser->coord depSource_append depSource_append proc~mus_intp_update_depfromcoarser->depSource_append nelems nelems proc~mus_intp_update_depfromcoarser->nelems nghelems nghelems proc~mus_intp_update_depfromcoarser->nghelems proc~compute_weight compute_weight proc~mus_intp_update_depfromcoarser->proc~compute_weight proc~find_possintporderandupdatemysources find_possIntpOrderAndUpdateMySources proc~mus_intp_update_depfromcoarser->proc~find_possintporderandupdatemysources tem_abort tem_abort proc~mus_intp_update_depfromcoarser->tem_abort tem_horizontalSpacer tem_horizontalSpacer proc~mus_intp_update_depfromcoarser->tem_horizontalSpacer val val proc~mus_intp_update_depfromcoarser->val proc~compute_weight->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 proc~mus_solve mus_solve proc~mus_solve->proc~mus_perform_dynloadbal program~musubi musubi program~musubi->proc~mus_initialize program~musubi->proc~mus_solve