readinletfile Subroutine

public subroutine readinletfile()

Uses

  • proc~~readinletfile~~UsesGraph proc~readinletfile readinletfile module~modglobal modglobal proc~readinletfile->module~modglobal module~modmpi modmpi proc~readinletfile->module~modmpi mpi mpi module~modmpi->mpi

Arguments

None

Calls

proc~~readinletfile~~CallsGraph proc~readinletfile readinletfile proc~excjs excjs proc~readinletfile->proc~excjs proc~yinterpolate yinterpolate proc~readinletfile->proc~yinterpolate proc~zinterpolate zinterpolate proc~readinletfile->proc~zinterpolate proc~zinterpolatet zinterpolatet proc~readinletfile->proc~zinterpolatet proc~zinterpolatew zinterpolatew proc~readinletfile->proc~zinterpolatew mpi_isend mpi_isend proc~excjs->mpi_isend mpi_recv mpi_recv proc~excjs->mpi_recv mpi_wait mpi_wait proc~excjs->mpi_wait

Called by

proc~~readinletfile~~CalledByGraph proc~readinletfile readinletfile proc~inletgen inletgen proc~inletgen->proc~readinletfile proc~inletgennotemp inletgennotemp proc~inletgennotemp->proc~readinletfile proc~readinitfiles readinitfiles proc~readinitfiles->proc~readinletfile program~dalesurban DALESURBAN program~dalesurban->proc~readinitfiles

Source Code

  subroutine readinletfile
    use modglobal, only : ib,jb,je,jmax,kb,ke,cexpnr,ifinput,nstore,ltempeq,ntrun,zh,jtot,jh
    use modmpi,    only : cmyid,myid,nprocs,slabsum,excjs
!    use modinletdata, only : storeu0inletbc,storev0inletbc,storew0inletbc,nfile

    implicit none
    real, dimension(ib:ib,jb:jb+inlfactor*jmax-1,kbin:kein)        :: udummy
    real, dimension(kbin:kein)                                     :: uread
    real, dimension(kbin:kein)                                     :: ureaddzfin
    real, dimension(jb:jb+jtotin-1,kbin:kein,1:nstore)     :: storeu0inold
    real, dimension(jb:jb+jtotin-1,kbin:kein,1:nstore)     :: storev0inold
    real, dimension(jb:jb+jtotin-1,kbin:kein+1,1:nstore)   :: storew0inold
    real, dimension(jb:jb+jtotin-1,kbin:kein,1:nstore)     :: storet0inold
    real, dimension(jb:jb+jtotdum-1,kbin:kein,1:nstore)     :: storeu0indum
    real, dimension(jb:jb+jtotdum-1,kbin:kein,1:nstore)     :: storev0indum
    real, dimension(jb:jb+jtotdum-1,kbin:kein+1,1:nstore)   :: storew0indum
    real, dimension(jb:jb+jtotdum-1,kbin:kein,1:nstore)     :: storet0indum
    real, dimension(jb:je,kbin:kein,1:nstore)     :: storeu0innew
    real, dimension(jb:je,kbin:kein,1:nstore)     :: storev0innew
    real, dimension(jb:je,kbin:kein+1,1:nstore)   :: storew0innew
    real, dimension(jb:je,kbin:kein,1:nstore)     :: storet0innew
    integer filen,filee
    integer fileid
    integer j,k,n,js,jf,jfdum,jsdum
    character(24) name
      filen = -5   ! should be checked carefully if in use ever
      jfdum = jbdum-1  ! initial value
      do fileid = filenumstart, filenumstart+(filestoread-1)
        if (filen == -1) then
          filen = nprocsinl-1                      ! -1 means the last proc (periodic)
        else
          filen = fileid - floor(real(fileid)/real(nprocsinl))*nprocsinl  ! loop over proc's
        end if
       write(6,*) '!!!!! filen = ', filen
        name = 'inlet/inlet_    k   .'
        write (name(13:16)  ,'(i4.4)') nfile
        write (name(18:20)  ,'(i3.3)') filen
        name(22:24)= cexpnr
        write(6,*) 'Reading Inlet velocity: ', name
        open(unit=ifinput,file=name,form='unformatted')
        read(ifinput)  (((storeu0inold (j,k,n),j=jbin,jein),k=kbin,kein),  n=1,nstore)
        read(ifinput)  (((storev0inold (j,k,n),j=jbin,jein),k=kbin,kein),  n=1,nstore)
        read(ifinput)  (((storew0inold (j,k,n),j=jbin,jein),k=kbin,kein+1),n=1,nstore)
        close (ifinput)

        if (ltempeq ) then
          name = 'inlet/itemp_    k   .'
          write (name(13:16)  ,'(i4.4)') nfile
          write (name(18:20)  ,'(i3.3)') filen
          name(22:24)= cexpnr
          write(6,*) 'Reading Inlet temperature: ', name
          open(unit=ifinput,file=name,form='unformatted')
          read(ifinput)  (((storet0inold (j,k,n),j=jbin,jein),k=kbin,kein),  n=1,nstore)
          close (ifinput)
        end if


        ! determine start and end indices
        if (filen == procinlo) then
          js = jbeg
        else
          js = jbin
        end if
        if (filen == procinup) then
          jf = jend
        else
          jf = jein
        end if
        jsdum = jfdum + 1
        jfdum = jsdum + (jf-js)
!        if (jsdum >= 3) write(6,*) 'myid, jsdum = ',myid, jsdum
!        if (jfdum >= 3) write(6,*) 'myid, jfdum = ',myid, jfdum

 !!! put values from original in dummy variable
        storeu0indum(jsdum:jfdum,:,:)    = storeu0inold(js:jf,:,:)      ! s: start  f: final
        storev0indum(jsdum:jfdum,:,:)    = storev0inold(js:jf,:,:)      ! s: start  f: final
        storew0indum(jsdum:jfdum,:,:)    = storew0inold(js:jf,:,:)      ! s: start  f: final
        if (ltempeq ) then
          storet0indum(jsdum:jfdum,:,:)    = storet0inold(js:jf,:,:)      ! s: start  f: final
        end if
      end do  ! loop over original inlet files
  ! now interpolate in y
      call yinterpolate (storeu0indum,storeu0innew,kbin,kein)
      call yinterpolate (storev0indum,storev0innew,kbin,kein)
      call yinterpolate (storew0indum,storew0innew,kbin,kein+1)
      call yinterpolate (storet0indum,storet0innew,kbin,kein)

      if (.not.lzinzsim) then ! interpolate when zin =/ zsim
        call zinterpolate (storeu0innew(:,:,:),storeu0inletbc)   ! interpolate inlet profile to zgrid
        call zinterpolate (storev0innew(:,:,:),storev0inletbc)   ! interpolate inlet profile to zgrid
        call zinterpolatew(storew0innew(:,:,:),storew0inletbc)   ! interpolate inlet profile to zgrid
        if (ltempeq) then
          call zinterpolatet(storet0innew(:,:,:),storet0inletbc)   ! interpolate inlet profile to zgrid
        end if
      else
        storeu0inletbc(:,:,:) = storeu0inold(:,:,:)
        storev0inletbc(:,:,:) = storev0inold(:,:,:)
        storew0inletbc(:,:,:) = storew0inold(:,:,:)
        if (ltempeq) then
          storet0inletbc(:,:,:) = storet0inold(:,:,:)
        end if
      end if

      if (iangle/=0.0) then   ! modify for inflow angle
         do n=1,nstore
         do k=kb,ke
         do j=jb,je
           u0rot(n,j,k) = storeu0inletbc(j,k,n)         ! swap indices in order
           v0rot(n,j,k) = storev0inletbc(j,k,n)         ! to use excjs
         end do
         end do
         end do
         call excjs(u0rot, 1,nstore,jb,je,kb,ke,0,jh)
         call excjs(v0rot, 1,nstore,jb,je,kb,ke,0,jh)
!         write(6,*) 'v0rot(1,je+1,30) = ',v0rot(1,je+1,30)
         do n=1,nstore
         do k=kb,ke
         do j=jb,je
         ! apply horizontal rotation (neglecting the delta_x difference)
           storeu0inletbc(j,k,n) = u0rot(n,j,k)*cos(iangle) - 0.5*sin(iangle)*(v0rot(n,j,k)+v0rot(n,j+1,k))
           storev0inletbc(j,k,n) = v0rot(n,j,k)*cos(iangle) + 0.5*sin(iangle)*(u0rot(n,j,k)+u0rot(n,j-1,k))
         end do
         end do
         end do
      end if ! iangle =/0.0


  end subroutine readinletfile