subroutine bottom ! By Ivo Suter. !kind of obsolete when road facets are being used !vegetated floor not added (could simply be copied from vegetated horizontal facets) use modglobal, only:ib, ie, ih, jh, kb,ke,kh, jb, je, kb, numol, prandtlmol, dzh, nsv, & dxf, dxhi, dzf, dzfi, numoli, ltempeq, khc, lmoist, BCbotT, BCbotq, BCbotm, BCbots, dzh2i, libm use modfields, only : u0,v0,e120,um,vm,w0,wm,e12m,thl0,qt0,sv0,thlm,qtm,svm,up,vp,wp,thlp,qtp,svp,shear,momfluxb,tfluxb,cth,tau_x,tau_y,tau_z,thl_flux use modsurfdata, only:thlflux, qtflux, svflux, ustar, thvs, wtsurf, wqsurf, thls, z0, z0h use modsubgriddata, only:ekm, ekh use modmpi, only:myid implicit none integer :: i, j, jp, jm, m e120(:, :, kb - 1) = e120(:, :, kb) e12m(:, :, kb - 1) = e12m(:, :, kb) ! wm(:, :, kb) = 0. ! SO moved to modboundary ! w0(:, :, kb) = 0. tau_x(:,:,kb:ke+kh) = up tau_y(:,:,kb:ke+kh) = vp tau_z(:,:,kb:ke+kh) = wp thl_flux(:,:,kb:ke+kh) = thlp !if (.not.(libm)) then if (lbottom) then !momentum if (BCbotm.eq.2) then call wfuno(ih, jh, kh, up, vp, thlp, momfluxb, tfluxb, cth, bcTfluxA, u0, v0, thl0, thls, z0, z0h, 0, 1, 91) elseif (BCbotm.eq.3) then call wfmneutral(ih, jh, kh, up, vp, momfluxb, u0, v0, z0, 0, 1, 91) else write(0, *) "ERROR: bottom boundary type for momentum undefined" stop 1 end if if (ltempeq) then if (BCbotT.eq.1) then !neumann/fixed flux bc for temperature do j = jb, je do i = ib, ie thlp(i, j, kb) = thlp(i, j, kb) & + ( & 0.5*(dzf(kb - 1)*ekh(i, j, kb) + dzf(kb)*ekh(i, j, kb - 1)) & *(thl0(i, j, kb) - thl0(i, j, kb - 1)) & *dzh2i(kb) & - wtsurf & )*dzfi(kb) end do end do else if (BCbotT.eq.2) then !wall function bc for temperature (fixed temperature) call wfuno(ih, jh, kh, up, vp, thlp, momfluxb, tfluxb, cth, bcTfluxA, u0, v0, thl0, thls, z0, z0h, 0, 1, 92) else write(0, *) "ERROR: bottom boundary type for temperature undefined" stop 1 end if end if ! ltempeq if (lmoist) then if (BCbotq.eq.1) then !neumann/fixed flux bc for moisture do j = jb, je do i = ib, ie qtp(i, j, kb) = qtp(i, j, kb) + ( & 0.5*(dzf(kb - 1)*ekh(i, j, kb) + dzf(kb)*ekh(i, j, kb - 1)) & *(qt0(i, j, kb) - qt0(i, j, kb - 1)) & *dzh2i(kb) & + wqsurf & )*dzfi(kb) end do end do else write(0, *) "ERROR: bottom boundary type for moisture undefined" stop 1 end if ! end if !lmoist if (nsv>0) then if (BCbots.eq.1) then !neumann/fixed flux bc for moisture do j = jb, je do i = ib, ie do m = 1, nsv svp(i, j, kb, m) = svp(i, j, kb, m) + ( & 0.5*(dzf(kb - 1)*ekh(i, j, kb) + dzf(kb)*ekh(i, j, kb - 1)) & *(sv0(i, j, kb, m) - sv0(i, j, kb - 1, m)) & *dzh2i(kb) & + 0. & )*dzfi(kb) end do end do end do else write(0, *) "ERROR: bottom boundary type for scalars undefined" stop 1 end if ! end if end if tau_x(:,:,kb:ke+kh) = up - tau_x(:,:,kb:ke+kh) tau_y(:,:,kb:ke+kh) = vp - tau_y(:,:,kb:ke+kh) tau_z(:,:,kb:ke+kh) = wp - tau_z(:,:,kb:ke+kh) thl_flux(:,:,kb:ke+kh) = thlp - thl_flux(:,:,kb:ke+kh) return end subroutine bottom