eulerian_set_Add Subroutine

private impure subroutine eulerian_set_Add(this, name, stag, obj)

Adds a eulerian object to the eulerian set.

Type Bound

eulerian_set

Arguments

Type IntentOptional Attributes Name
class(eulerian_set), intent(inout) :: this

An Eulerian Set

character(len=*), intent(in) :: name

Name of variable

integer, intent(in) :: stag

Staggering

class(eulerian_obj_base), intent(inout), target :: obj

Eulerian obj to link and Initialize


Calls

proc~~eulerian_set_add~~CallsGraph proc~eulerian_set_add eulerian_set%eulerian_set_Add proc~eulerian_obj_init eulerian_obj_base%eulerian_obj_Init proc~eulerian_set_add->proc~eulerian_obj_init proc~hashtbl_obj_hashstring hashtbl_obj%hashtbl_obj_HashString proc~eulerian_set_add->proc~hashtbl_obj_hashstring proc~hashtbl_obj_put hashtbl_obj%hashtbl_obj_Put proc~eulerian_set_add->proc~hashtbl_obj_put proc~sllist_obj_put sllist_obj%sllist_obj_Put proc~hashtbl_obj_put->proc~sllist_obj_put proc~sllist_obj_put->proc~sllist_obj_put

Called by

proc~~eulerian_set_add~~CalledByGraph proc~eulerian_set_add eulerian_set%eulerian_set_Add proc~cdifs_obj_preparesolverfields cdifs_obj_PrepareSolverFields proc~cdifs_obj_preparesolverfields->proc~eulerian_set_add proc~grans_obj_preparesolverfields grans_obj_PrepareSolverFields proc~grans_obj_preparesolverfields->proc~eulerian_set_add proc~cdifs_obj_preparesolver cdifs_obj_PrepareSolver proc~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolverfields proc~grans_obj_preparesolver grans_obj_PrepareSolver proc~grans_obj_preparesolver->proc~grans_obj_preparesolverfields interface~cdifs_obj_preparesolver cdifs_obj%cdifs_obj_PrepareSolver interface~cdifs_obj_preparesolver->proc~cdifs_obj_preparesolver interface~grans_obj_preparesolver grans_obj%grans_obj_PrepareSolver interface~grans_obj_preparesolver->proc~grans_obj_preparesolver

Source Code

    impure subroutine eulerian_set_Add(this,name,stag,obj)
      !> Adds a eulerian object to the eulerian set.
      implicit none
      class(eulerian_set),      intent(inout) :: this                          !! An Eulerian Set
      character(len=*),         intent(in)    :: name                          !! Name of variable
      integer,                  intent(in)    :: stag                          !! Staggering
      class(eulerian_obj_base), intent(inout), &
                                       target :: obj                           !! Eulerian obj to link and Initialize
      ! Work bariables
      type(eulerian_ptr), allocatable :: tmp_array(:)

      ! Initialize Eulerian object
      call obj%Initialize(name, this%block,this%parallel,stag)

      ! First resize array to accomodate a new element
      if (.not.allocated(this%field)) then
        allocate(this%field(1))
      else
        ! Allocate temporary array
        allocate(tmp_array(size(this%field)+1))

        ! Store old values
        tmp_array(1:size(this%field)) = this%field(:)

        ! Move the allocation from the
        ! temporary array to the final one
        call move_alloc(tmp_array,this%field)
      end if

      ! Link step
      this%field(size(this%field))%p => obj

      ! Add to hash table
      call this%tbl%Put(key=this%tbl%HashString(name),val=size(this%field))

      return
    end subroutine eulerian_set_Add