いつも使うものは残したい。
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