SetUpCaseRP Subroutine

subroutine SetUpCaseRP()

Uses

  • proc~~setupcaserp~~UsesGraph proc~setupcaserp SetUpCaseRP module~particles_resolved particles_resolved proc~setupcaserp->module~particles_resolved module~immersed_boundaries immersed_boundaries module~particles_resolved->module~immersed_boundaries module~leapbc leapBC module~particles_resolved->module~leapbc module~leapblock leapBlock module~particles_resolved->module~leapblock module~leapdiffop leapDiffOp module~particles_resolved->module~leapdiffop module~leapeulerian leapEulerian module~particles_resolved->module~leapeulerian module~leapio leapIO module~particles_resolved->module~leapio module~leapkinds leapKinds module~particles_resolved->module~leapkinds module~leaplagrangian leapLagrangian module~particles_resolved->module~leaplagrangian module~leapmonitor leapMonitor module~particles_resolved->module~leapmonitor module~leapparallel leapParallel module~particles_resolved->module~leapparallel module~leapparser leapParser module~particles_resolved->module~leapparser module~leaptimer leapTimer module~particles_resolved->module~leaptimer module~immersed_boundaries_markers immersed_boundaries_markers module~immersed_boundaries->module~immersed_boundaries_markers module~immersed_boundaries_solids immersed_boundaries_solids module~immersed_boundaries->module~immersed_boundaries_solids module~leapbc->module~leapblock module~leapbc->module~leapeulerian module~leapbc->module~leapio module~leapbc->module~leapkinds module~leapbc->module~leapparallel iso_fortran_env iso_fortran_env module~leapbc->iso_fortran_env module~leaputils leapUtils module~leapbc->module~leaputils mpi_f08 mpi_f08 module~leapbc->mpi_f08 module~leapblock->module~leapkinds module~leapblock->module~leapparallel module~leapblock->iso_fortran_env module~leapio_hdf5 leapIO_hdf5 module~leapblock->module~leapio_hdf5 module~leapblock->mpi_f08 module~leapdiffop->module~leapbc module~leapdiffop->module~leapblock module~leapdiffop->module~leapeulerian module~leapdiffop->module~leapkinds module~leapdiffop->module~leapparallel module~leapeulerian->module~leapblock module~leapeulerian->module~leapio module~leapeulerian->module~leapkinds module~leapeulerian->module~leapparallel module~leapeulerian->iso_fortran_env module~leapeulerian->module~leaputils module~leapeulerian->mpi_f08 module~leapio_h5hut leapIO_h5hut module~leapio->module~leapio_h5hut module~leapio->module~leapio_hdf5 module~leapio_silo leapIO_silo module~leapio->module~leapio_silo module~leapio_xdmf leapIO_xdmf module~leapio->module~leapio_xdmf module~leapkinds->iso_fortran_env module~leaplagrangian->module~leapblock module~leaplagrangian->module~leapio module~leaplagrangian->module~leapkinds module~leaplagrangian->module~leapparallel module~leapfilters leapfilters module~leaplagrangian->module~leapfilters module~leaplagrangian->module~leaputils module~leaplagrangian->mpi_f08 module~leapmonitor->module~leapkinds module~leapmonitor->module~leapparallel module~leapmonitor->iso_fortran_env module~leapmonitor->module~leaputils module~leapparallel->module~leapkinds module~leapparallel->iso_fortran_env module~leapparallel->mpi_f08 module~leapparser->module~leapkinds module~leapparser->iso_fortran_env module~leapcli leapCli module~leapparser->module~leapcli module~leaptimer->module~leapkinds module~leaptimer->module~leapparallel module~leaptimer->module~leapparser module~leaptimer->module~leaputils module~immersed_boundaries_markers->module~leapbc module~immersed_boundaries_markers->module~leapblock module~immersed_boundaries_markers->module~leapdiffop module~immersed_boundaries_markers->module~leapeulerian module~immersed_boundaries_markers->module~leapio module~immersed_boundaries_markers->module~leapkinds module~immersed_boundaries_markers->module~leaplagrangian module~immersed_boundaries_markers->module~leapmonitor module~immersed_boundaries_markers->module~leapparallel module~immersed_boundaries_markers->module~leapparser module~immersed_boundaries_markers->module~leaptimer module~immersed_boundaries_markers->iso_fortran_env module~leaphypre leapHypre module~immersed_boundaries_markers->module~leaphypre module~immersed_boundaries_solids->module~leapblock module~immersed_boundaries_solids->module~leapeulerian module~immersed_boundaries_solids->module~leapio module~immersed_boundaries_solids->module~leapkinds module~immersed_boundaries_solids->module~leaplagrangian module~immersed_boundaries_solids->module~leapparallel module~immersed_boundaries_solids->module~immersed_boundaries_markers module~leapcli->module~leapkinds module~leapfilters->module~leapkinds module~leapio_h5hut->module~leapkinds module~leapio_h5hut->module~leapparallel module~leapio_h5hut->module~leapio_hdf5 module~leapio_hdf5->module~leapkinds module~leapio_hdf5->module~leapparallel module~leapio_hdf5->module~leaputils hdf5 hdf5 module~leapio_hdf5->hdf5 module~leapio_silo->module~leapkinds module~leapio_silo->module~leapparallel module~leapio_silo->module~leaputils module~leapio_silo->mpi_f08 module~leapio_xdmf->module~leapkinds module~leapio_xdmf->module~leaputils module~leaputils->module~leapkinds module~leaphypre->module~leapblock module~leaphypre->module~leapeulerian module~leaphypre->module~leapkinds module~leaphypre->module~leapparallel module~leaphypre->mpi_f08 iso_c_binding iso_c_binding module~leaphypre->iso_c_binding

Builds and writes resolved particles.

Arguments

None

Calls

proc~~setupcaserp~~CallsGraph proc~setupcaserp SetUpCaseRP none~finalize~26 ResPart_set%Finalize proc~setupcaserp->none~finalize~26 none~get parser_obj%Get proc~setupcaserp->none~get none~initialize~26 ResPart_set%Initialize proc~setupcaserp->none~initialize~26 p p proc~setupcaserp->p particle particle proc~setupcaserp->particle proc~lagrangian_set_applyperiodicity lagrangian_set%lagrangian_set_ApplyPeriodicity proc~setupcaserp->proc~lagrangian_set_applyperiodicity proc~lagrangian_set_communicate lagrangian_set%lagrangian_set_Communicate proc~setupcaserp->proc~lagrangian_set_communicate proc~lagrangian_set_localize lagrangian_set%lagrangian_set_Localize proc~setupcaserp->proc~lagrangian_set_localize proc~lagrangian_set_resize lagrangian_set%lagrangian_set_Resize proc~setupcaserp->proc~lagrangian_set_resize proc~marker_set_addsphere marker_set%marker_set_AddSphere proc~setupcaserp->proc~marker_set_addsphere proc~parallel_obj_rankisroot parallel_obj%parallel_obj_RankIsRoot proc~setupcaserp->proc~parallel_obj_rankisroot proc~respart_set_setwritefilename ResPart_set%ResPart_set_SetWriteFileName proc~setupcaserp->proc~respart_set_setwritefilename v v proc~setupcaserp->v proc~respart_set_final ResPart_set%ResPart_set_Final none~finalize~26->proc~respart_set_final proc~parser_obj_read0d parser_obj%parser_obj_read0D none~get->proc~parser_obj_read0d proc~parser_obj_read1d parser_obj%parser_obj_read1D none~get->proc~parser_obj_read1d proc~respart_set_init ResPart_set%ResPart_set_Init none~initialize~26->proc~respart_set_init proc~lagrangian_set_communicate->proc~lagrangian_set_resize mpi_gather mpi_gather proc~lagrangian_set_communicate->mpi_gather mpi_recv mpi_recv proc~lagrangian_set_communicate->mpi_recv mpi_send mpi_send proc~lagrangian_set_communicate->mpi_send proc~lagrangian_set_recycle lagrangian_set%lagrangian_set_Recycle proc~lagrangian_set_communicate->proc~lagrangian_set_recycle proc~block_obj_getowningcell block_obj%block_obj_GetOwningCell proc~lagrangian_set_localize->proc~block_obj_getowningcell proc~marker_set_addsphere->p proc~marker_set_addsphere->proc~lagrangian_set_resize markers markers proc~marker_set_addsphere->markers proc~stringtool_obj_removeextension stringtool_obj%stringtool_obj_RemoveExtension proc~respart_set_setwritefilename->proc~stringtool_obj_removeextension proc~lagrangian_set_recycle->proc~lagrangian_set_resize none~assigndefault parser_obj%AssignDefault proc~parser_obj_read0d->none~assigndefault proc~parser_obj_fetchlabelid parser_obj%parser_obj_FetchLabelID proc~parser_obj_read0d->proc~parser_obj_fetchlabelid proc~parser_obj_read1d->none~assigndefault proc~parser_obj_read1d->proc~parser_obj_fetchlabelid none~finalize~27 marker_set%Finalize proc~respart_set_final->none~finalize~27 proc~lagrangian_set_freempitype lagrangian_set%lagrangian_set_FreeMPIType proc~respart_set_final->proc~lagrangian_set_freempitype proc~respart_set_init->proc~lagrangian_set_resize none~initialize~27 marker_set%Initialize proc~respart_set_init->none~initialize~27 proc~lagrangian_set_creatempitype lagrangian_set%lagrangian_set_CreateMPIType proc~respart_set_init->proc~lagrangian_set_creatempitype proc~respart_set_setobjecttype ResPart_set%ResPart_set_SetObjectType proc~respart_set_init->proc~respart_set_setobjecttype proc~parser_obj_assigndefault0d parser_obj%parser_obj_AssignDefault0D none~assigndefault->proc~parser_obj_assigndefault0d proc~parser_obj_assigndefault1d parser_obj%parser_obj_AssignDefault1D none~assigndefault->proc~parser_obj_assigndefault1d none~finalize~27->proc~respart_set_final none~initialize~27->proc~respart_set_init SetMPIDataTypeParams SetMPIDataTypeParams proc~lagrangian_set_creatempitype->SetMPIDataTypeParams mpi_type_commit mpi_type_commit proc~lagrangian_set_creatempitype->mpi_type_commit mpi_type_create_resized mpi_type_create_resized proc~lagrangian_set_creatempitype->mpi_type_create_resized mpi_type_create_struct mpi_type_create_struct proc~lagrangian_set_creatempitype->mpi_type_create_struct mpi_type_get_extent mpi_type_get_extent proc~lagrangian_set_creatempitype->mpi_type_get_extent mpi_type_size mpi_type_size proc~lagrangian_set_creatempitype->mpi_type_size mpi_type_free mpi_type_free proc~lagrangian_set_freempitype->mpi_type_free

Called by

proc~~setupcaserp~~CalledByGraph proc~setupcaserp SetUpCaseRP program~main~2 main program~main~2->proc~setupcaserp

Source Code

    subroutine SetUpCaseRP()
      !> Builds and writes resolved particles.
      use particles_resolved
      implicit none
      ! Work variables
      character(str64)   :: filename
      type(ResPart_set)  :: RP                                                 !! Resolved particles
      real(wp)           :: L(3)
      real(wp)           :: diam
      real(wp)           :: rhop
      real(wp)           :: dl
      real(wp)           :: VFP
      real(wp)           :: Vp
      real(wp)           :: Lp
      real(wp)           :: ymin
      real(wp)           :: ymax
      real(wp)           :: Vel
      real(wp)           :: amp
      real(wp)           :: rand(3)
      integer            :: iimax,jjmax,kkmax
      integer            :: i,j,k
      integer            :: n
      real(wp),parameter :: Pi=4.0_wp*atan(1.0_wp)

      ! Get case info
      call parser%Get('RP IC file',            filename               )
      call parser%Get('Domain size',           L                      )
      call parser%Get("Particle diameter",     diam                   )
      call parser%Get("Particle density",      rhop                   )
      call parser%Get("Particle velocity",     Vel                    )
      call parser%Get('Particle fluctuations', amp  , default = 0.0_wp)
      call parser%Get("Avg VFP",               VFP                    )

      ymin  = -0.5_wp*L(2)
      ymax  =  0.5_wp*L(2)

      ! Compute average spacing for uniform distribution
      Vp = Pi/6.0_wp*diam**3
      Lp = (Vp/VFP)**(1.0_wp/3.0_wp)
      iimax = floor(L(1)/Lp)
      jjmax = floor((IBy(2)-IBy(1))/Lp)
      kkmax = floor(L(3)/Lp)

      ! Initialze resolved particles
      call RP%Initialize('ResPart',block,parallel)

      ! Total count of particles to seed
      RP%count = iimax*jjmax*kkmax

      ! Activate particles on Root
      if (parallel%RankIsRoot()) then

        call RP%Resize(RP%count)

        dl=0.5_wp*minval(block%dx)

        select type(particle => RP%p)
        type is (ResPart_obj)
          do k=1,kkmax
            do j=1,jjmax
              do i=1,iimax
                n = i + (j-1)*iimax + (k-1)*jjmax*iimax
                ! Particle globabl ID
                particle(n)%id   = int(n,kind=8)
                ! Diameter
                particle(n)%d    = diam
                ! Position
                particle(n)%p(1) = block%pmin(1) + real(i-0.5_wp,wp)*L(1)/real(iimax,wp)
                particle(n)%p(2) = IBy(1)        + real(j-0.5_wp,wp)*(IBy(2)-IBy(1))/real(jjmax,wp)
                particle(n)%p(3) = block%pmin(3) + real(k-0.5_wp,wp)*L(3)/real(kkmax,wp)
                ! Velocity
                call random_number(rand)
                particle(n)%v(1) = Vel      + Vel*amp*(rand(1)-0.5_wp)
                particle(n)%v(2) = 0.0_wp   + Vel*amp*(rand(2)-0.5_wp)
                particle(n)%v(3) = 0.0_wp   + Vel*amp*(rand(3)-0.5_wp)
                ! Angular velocity
                particle(n)%w    = 0.0_wp
                ! Density
                particle(n)%rho  = rhop
                ! Zero force and torque
                particle(n)%Fh   = 0.0_wp
                particle(n)%Th   = 0.0_wp
                particle(n)%Fc   = 0.0_wp
                particle(n)%Tc   = 0.0_wp

                ! Add surface markers
                call RP%ib%AddSphere(particle(n)%p,particle(n)%d/2.0_wp,particle(n)%v,dl,particle(n)%id)
              end do
            end do
          end do
        end select
      end if

      ! Treatment for periodicity
      call RP%ApplyPeriodicity
      call RP%ib%ApplyPeriodicity

      ! Send to the right rank
      call RP%Communicate
      call RP%ib%Communicate

      ! Localize centers and markers on grid
      call RP%Localize
      call RP%ib%Localize

      ! Write data to disk
      call RP%SetWriteFileName(filename)
      call RP%Write(0,0.0_WP)

      ! Finalize
      call RP%Finalize

      return
    end subroutine SetUpCaseRP