移動平均修正

いつも使うものは残したい。

dbz2rr
小さいdBZに対しては、小さいrrを返すことができる。10dBZであれば、0.15mm/hとなる。

  • 20dBZであれば、0.002mm/h

RRは0でなければどれだけ小さくても良い。

sum_rr: 0.036463324 <-ave_tmp -8.1971734E-7
ave_tmp=0でもわずかに値が入る。その結果0.03mm/hとなる。

subroutine dbz2rr(dbz,rr)
!convert dbz to rr
! log Z = log(200) + 1.6 * log (RR)
! 1.6*log(RR)= logZ - log(200)
!
real :: B=200,beta=1.6
real,intent(in) :: dbz
real,intent(out):: rr
real :: logRR
! real,parameter ::mindbz = 10. !lower than mindbz, rr=0
real,parameter ::mindbz = -200. !lower than mindbz, rr=0

if( dbz < mindbz ) then
rr=0.
else
logRR = (dbz/10. - log10(200.)) /1.6
rr = 10**logRR
endif
end subroutine dbz2rr

subroutine rr2dbz(rr,dbz)
!convert RR to dbz
! log Z = log(200) + 1.6 * log (RR)
!
real :: B=200,beta=1.6
real,intent(out) :: dbz
real,intent(in) :: rr
real :: logRR
real,parameter ::undef = -203.677
real,parameter ::mindbz = 10.

!calc. dBZ
if( rr == 0 ) then
dbz = undef
else
dbz = ( log10(200.) + 1.6 *log10(rr) ) *10.
endif
! if( dbz < mindbz ) then
! dbz = undef
! endif

end subroutine rr2dbz