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~setupcasefields SetUpCaseFields proc~setupcasefields->proc~eulerian_set_add proc~setupcasefields~10 SetUpCaseFields proc~setupcasefields~10->proc~eulerian_set_add proc~setupcasefields~2 SetUpCaseFields proc~setupcasefields~2->proc~eulerian_set_add proc~setupcasefields~3 SetUpCaseFields proc~setupcasefields~3->proc~eulerian_set_add proc~setupcasefields~4 SetUpCaseFields proc~setupcasefields~4->proc~eulerian_set_add proc~setupcasefields~5 SetUpCaseFields proc~setupcasefields~5->proc~eulerian_set_add proc~setupcasefields~6 SetUpCaseFields proc~setupcasefields~6->proc~eulerian_set_add proc~setupcasefields~7 SetUpCaseFields proc~setupcasefields~7->proc~eulerian_set_add proc~setupcasefields~8 SetUpCaseFields proc~setupcasefields~8->proc~eulerian_set_add proc~setupcasefields~9 SetUpCaseFields proc~setupcasefields~9->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 program~main main program~main->proc~setupcasefields program~main~10 main program~main~10->proc~setupcasefields~6 program~main~11 main program~main~11->proc~setupcasefields~7 program~main~12 main program~main~12->proc~setupcasefields~8 program~main~13 main program~main~13->proc~setupcasefields~9 program~main~14 main program~main~14->proc~setupcasefields~10 program~main~3 main program~main~3->proc~setupcasefields~2 program~main~5 main program~main~5->proc~setupcasefields~3 program~main~8 main program~main~8->proc~setupcasefields~4 program~main~9 main program~main~9->proc~setupcasefields~5 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