tem_reduction_spatial_init Subroutine

public subroutine tem_reduction_spatial_init(me, redSpatial_config, varSys, varPos)

Initialize reduction objects according to the variable systems

Arguments

Type IntentOptional Attributes Name
type(tem_reduction_spatial_type), intent(out), allocatable :: me(:)

array of reductions to initialize

type(tem_reduction_spatial_config_type), intent(in) :: redSpatial_config
type(tem_varSys_type), intent(in) :: varSys

global variable system defined in solver

integer, intent(in) :: varPos(:)

position of variable to reduce in the global varSys


Called by

proc~~tem_reduction_spatial_init~~CalledByGraph proc~tem_reduction_spatial_init tem_reduction_spatial_init proc~tem_init_convergence tem_init_convergence proc~tem_init_convergence->proc~tem_reduction_spatial_init proc~tem_init_tracker tem_init_tracker proc~tem_init_tracker->proc~tem_reduction_spatial_init

Contents


Source Code

  subroutine tem_reduction_spatial_init( me, redSpatial_config, varSys, varPos )
    ! ---------------------------------------------------------------------------
    !> array of reductions to initialize
    type( tem_reduction_spatial_type ), intent(out), allocatable :: me(:)
    type( tem_reduction_spatial_config_type ), intent(in) :: redSpatial_config
    !> global variable system defined in solver
    type( tem_varSys_type ), intent(in) :: varSys
    !> position of variable to reduce in the global varSys
    integer, intent(in) :: varPos(:)
    ! ---------------------------------------------------------------------------
    ! type( tem_reduction_spatial_type ), allocatable :: tmpRdc(:)
    integer :: iRdc, nVars
    ! ---------------------------------------------------------------------------

    write(logUnit(1),*) 'Initializing reduction ...'

    nVars = size(varPos)

    ! check if the amount of reduction greater than amount of variables
    if( size( redSpatial_config%reduceType ) > nVars ) then
      write(logUnit(1),*) 'The number of reduction is more than the '// &
        &                 'number of variables!'
      write(logUnit(1),*) 'Ignore the additional reductions!'
    endif

      ! allocate( tmpRdc( nVars ))
      ! do iRdc = 1, nVars
      !   tmpRdc( iRdc ) = me( iRdc )
      ! end do
      ! deallocate( me )
      ! allocate( me( nVars ))
      ! do iRdc = 1, nVars
      !   me( iRdc ) = tmpRdc( iRdc )
      ! end do
      ! deallocate( tmpRdc )


    allocate( me( nVars ) )
    do iRdc = 1, nVars
      me( iRdc )%reduceType = trim( redSpatial_config%reduceType( iRdc ) )
      me( iRdc )%nComponents = varSys%method%val( varPos(iRdc) )%nComponents
      allocate( me( iRdc )%val( me(iRdc)%nComponents ))
      me( iRdc )%val(:) = 0._rk
    end do

  end subroutine tem_reduction_spatial_init