zinterpolate2d Subroutine

public subroutine zinterpolate2d(input, output)

Uses

  • proc~~zinterpolate2d~~UsesGraph proc~zinterpolate2d modinlet::zinterpolate2d module~modglobal modglobal proc~zinterpolate2d->module~modglobal

Arguments

Type IntentOptional Attributes Name
real, intent(in), dimension(ib:ie,kbin:kein) :: input
real, intent(inout), dimension(ib:ie,kb:ke) :: output

Called by

proc~~zinterpolate2d~~CalledByGraph proc~zinterpolate2d modinlet::zinterpolate2d proc~readrestartfiles modstartup::readrestartfiles proc~readrestartfiles->proc~zinterpolate2d proc~readinitfiles modstartup::readinitfiles proc~readinitfiles->proc~readrestartfiles proc~startup modstartup::startup proc~startup->proc~readinitfiles program~dalesurban DALESURBAN program~dalesurban->proc~startup

Contents

Source Code


Source Code

 subroutine zinterpolate2d(input,output)
  use modglobal,      only : ib,ie,kb,ke,zf,nstore
  implicit none
  real, dimension(ib:ie,kbin:kein), intent(in)  :: input
  real, dimension(ib:ie,kb:ke), intent(inout) :: output
  integer k

     do k=kb,ke
      if (linuf(k) == kein+1) then      ! indicator for extrapolation!
        output(:,k) = input(:,kein)
      elseif (linlf(k) == kbin-1) then ! interprets this as extrapolation to bottom (use u=0 at z+=0)
        output(:,k) = input(:,kbin)/zfin(kbin) * zf(k)
!        output(:,k,:) = input(:,kbin,:)   ! temeperature is not zero at the wall, so line above is wrong
      else                            ! normal interpolation
        output(:,k) = input(:,linlf(k)) + (input(:,linuf(k)) - input(:,linlf(k))) / (zfin(linuf(k)) - zfin(linlf(k))) * (zf(k) - zf(linlf(k)))
        if ((zf(k) .gt. zfin(linuf(k))) .or. (zf(k) .lt. zfin(linlf(k)))) then
          write(6,*) '!!!Mistake in zinterpolate2d !!!!'
        end if
      end if
    end do


  end subroutine zinterpolate2d