SetUpCaseFields Subroutine

subroutine SetUpCaseFields()

Builds and writes initial fields.

Arguments

None

Calls

proc~~setupcasefields~8~~CallsGraph proc~setupcasefields~8 SetUpCaseFields none~get parser_obj%Get proc~setupcasefields~8->none~get proc~eulerian_set_add eulerian_set%eulerian_set_Add proc~setupcasefields~8->proc~eulerian_set_add proc~eulerian_set_final eulerian_set%eulerian_set_Final proc~setupcasefields~8->proc~eulerian_set_final proc~eulerian_set_init eulerian_set%eulerian_set_Init proc~setupcasefields~8->proc~eulerian_set_init proc~eulerian_set_setwritefilename eulerian_set%eulerian_set_SetWriteFileName proc~setupcasefields~8->proc~eulerian_set_setwritefilename proc~parallel_obj_rankisroot parallel_obj%parallel_obj_RankIsRoot proc~setupcasefields~8->proc~parallel_obj_rankisroot 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~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~eulerian_obj_final eulerian_obj_base%eulerian_obj_Final proc~eulerian_set_final->proc~eulerian_obj_final proc~hashtbl_obj_init hashtbl_obj%hashtbl_obj_Init proc~eulerian_set_init->proc~hashtbl_obj_init proc~sllist_obj_put sllist_obj%sllist_obj_Put proc~hashtbl_obj_put->proc~sllist_obj_put 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 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 proc~sllist_obj_put->proc~sllist_obj_put

Called by

proc~~setupcasefields~8~~CalledByGraph proc~setupcasefields~8 SetUpCaseFields program~main~12 main program~main~12->proc~setupcasefields~8

Source Code

    subroutine SetUpCaseFields()
      !> Builds and writes initial fields.
      implicit none
      ! Work variables
      type(Eulerian_set)   :: fields
      type(eulerian_obj_r) :: V(3)
      type(eulerian_obj_r) :: P
      character(str64)     :: filename
      real(wp)             :: L(3)
      real(wp)             :: Vamp
      real(wp)             :: rho
      real(wp)             :: mu
      real(wp)             :: Rey
      integer              :: i,j,k
      real(wp),parameter   :: twoPi=8.0_wp*atan(1.0_wp)

      ! Get info from parser
      call parser%Get("Fields IC file",     filename)
      call parser%Get("Domain size",        L       )
      call parser%Get("Velocity amplitude", Vamp    )
      call parser%Get("Fluid density",      rho     )
      call parser%Get("Fluid viscosity",    mu      )

      ! Initialize fields container
      call fields%Initialize(block,parallel)

      ! Add fields to container (this will allocate data)
      call fields%Add('V1', 1, V(1))
      call fields%Add('V2', 2, V(2))
      call fields%Add('V3', 3, V(3))
      call fields%Add('P',  0, P   )


      associate (lo => block%lo, hi=> block%hi,          &
          x =>block%x , y =>block%y,  z => block%z, &
          xm=>block%xm, ym=>block%ym, zm=> block%zm)

        L=L/twoPi
        do k=lo(3),hi(3)
          do j=lo(2),hi(2)
            do i=lo(1),hi(1)
              V(1)%cell(i,j,k) = Vamp*sin(x (i)/L(1))*cos(ym(j)/L(2))*cos(zm(k)/L(3))
              V(2)%cell(i,j,k) =-Vamp*cos(xm(i)/L(1))*sin(y (j)/L(2))*cos(zm(k)/L(3))
              V(3)%cell(i,j,k) = 0.0_wp
            end do
          end do
        end do

        P    = 0.0_wp
      end associate

      ! Write some info to stdout
      if (parallel%RankIsRoot()) then
        ! Reynolds number
        Rey = rho/mu*Vamp*maxval(L)
        write(*,*) "Reynolds number = ", Rey
        write(*,*) "Reference time  = ", maxval(L)/Vamp
      end if

      ! Write data to disk
      call fields%SetWriteFileName(filename)
      call fields%Write(0,0.0_wp)

      ! Clear data
      call fields%Finalize()

      return
    end subroutine SetUpCaseFields