132 lines
4.4 KiB
Fortran
132 lines
4.4 KiB
Fortran
!c***************************************************************************
|
|
subroutine abs_phase(r_unw, c_ampb, r_amp, b_all_unwrap,r_bphase,
|
|
$ r_bamp, i_complist, i_patch)
|
|
|
|
use icuState
|
|
implicit none
|
|
|
|
|
|
!C INPUT VARIABLES:
|
|
|
|
real*4 r_xofr(0:infp%i_rsamps-1) !azimuth offsets (pixels) for the bootstrap phase
|
|
complex*8 c_ampb(0:infp%i_rsamps-1, 0:infp%i_azbufsize-1) !amplitude of the two SLCs used to form the interferogram
|
|
real*4 r_unw(0:infp%i_rsamps-1, 0:infp%i_azbufsize-1) !unwrapped phase
|
|
integer*1 b_all_unwrap(0:infp%i_rsamps-1, 0:infp%i_azbufsize-1) !flag array marking all samples unwrapped in the patch
|
|
real*4 r_bphase(0:infp%i_rsamps-1,0:NBL-1) !bootstrap phase data
|
|
real*4 r_bamp(0:infp%i_rsamps-1,0:NBL-1) !bootstrap amplitude data
|
|
integer*4 i_complist(0:1,MAXCCOMP)
|
|
integer*4 i_patch, ml, ib, i_amb
|
|
|
|
|
|
!c OUTPUT VARIABLES:
|
|
|
|
real*4 r_amp(0:infp%i_rsamps-1, 0:infp%i_azbufsize-1) !image amplitude (0 where not unwrapped)c
|
|
|
|
!c LOCAL VARIABLES:
|
|
|
|
integer*4 i_ccc !connected component counter
|
|
integer*4 ir, ia, ind, i_bcnt
|
|
integer*4 i_abs_phase, i_printfreq, i_abs_phase_index
|
|
integer*4 i_nobind, i_noblist(MAXCCOMP), i_numcc
|
|
|
|
!c external rt_cc
|
|
|
|
!c DATA STATEMENTS:
|
|
|
|
data i_abs_phase_index /0/
|
|
|
|
|
|
!c PROCESSING STEPS:
|
|
|
|
i_numcc = 0
|
|
i_nobind = 0
|
|
|
|
|
|
|
|
!!Identify number of components to be bootstrapped
|
|
do ir = 1, MAXCCOMP
|
|
if(i_complist(0,ir).gt.0) then
|
|
i_numcc = i_numcc+1
|
|
if(i_complist(1,ir) .eq. NOBOOT) then
|
|
print *, 'Adding component to non-boot list: ', ir
|
|
i_nobind = i_nobind + 1
|
|
i_noblist(i_nobind) = ir
|
|
end if
|
|
end if
|
|
end do
|
|
print *, 'Total number of connected components: ', i_numcc
|
|
print *, 'Total components that need booting: ', i_nobind
|
|
|
|
|
|
!c Establish amplitudes from unwrapped bootstrapped data
|
|
do ia = unwp%i_sunw, unwp%i_eunw !initialize unwrap data arrays
|
|
do ir = unwp%i_spixel, unwp%i_epixel
|
|
r_amp(ir,ia) = 0.
|
|
ind = b_all_unwrap(ir,ia)
|
|
if(ind .ne. 0)then
|
|
if(i_complist(1,ind) .eq. BOOT) then
|
|
r_amp(ir,ia) = sqrt(real(c_ampb(ir,ia))*aimag(c_ampb(ir,ia)))
|
|
end if
|
|
end if
|
|
end do
|
|
end do
|
|
print *, 'Done fixing boot-strapped components'
|
|
|
|
!c Loop over non-bootstrapped connected components to find absolute phase
|
|
|
|
do ib=1, i_nobind
|
|
|
|
!!This part can be augmented to determine i_amb from external DEM / deformation model
|
|
!!For now set this to zero
|
|
i_amb = 0
|
|
|
|
do ia = unwp%i_sunw, unwp%i_eunw
|
|
do ir = unwp%i_spixel, unwp%i_epixel
|
|
if (b_all_unwrap(ir,ia) .eq. i_noblist(ib)) then
|
|
r_amp(ir,ia) = sqrt(real(c_ampb(ir,ia))
|
|
$ *aimag(c_ampb(ir,ia)))
|
|
r_unw(ir,ia) = r_unw(ir,ia) + i_amb * TWO_PI_SP
|
|
endif
|
|
end do
|
|
end do
|
|
|
|
print *, 'Done fixing non-bootstrapped component', ib, i_noblist(ib)
|
|
|
|
!c Update bootstrap phase with the ambiguity for this component
|
|
do ind=0, NBL-1
|
|
ia=infp%i_azbufsize - unwp%i_ovloff - NBL/2 + ind
|
|
do ir = unwp%i_spixel, unwp%i_epixel
|
|
if ((r_bamp(ir,ind) .ne. 0) .and.
|
|
$ (b_all_unwrap(ir,ia) .eq. i_noblist(ib))) then
|
|
r_bphase(ir,ind) = r_bphase(ir,ind) + i_amb * TWO_PI_SP
|
|
end if
|
|
end do
|
|
end do
|
|
end do !non-bootstrapped components
|
|
|
|
|
|
!c* set the bootstrap phase
|
|
|
|
i_bcnt = 0 !initialize counter of bootstrap points
|
|
do ind = 0, NBL-1
|
|
do ir = unwp%i_spixel, unwp%i_epixel
|
|
ia = infp%i_azbufsize - unwp%i_ovloff - NBL/2 + ind
|
|
r_bamp(ir,ind) = r_amp(ir,ia)
|
|
r_bphase(ir,ind) = r_unw(ir,ia)
|
|
if(r_amp(ir,ia) .ne. 0) then
|
|
i_bcnt = i_bcnt + 1
|
|
end if
|
|
end do
|
|
end do
|
|
print *, 'Done with bootstrap counter for patch: ', i_patch
|
|
|
|
if(i_bcnt .eq. 0) then
|
|
print *, 'WARNING: UNW_RT: no points for phase bootstap of next patch'
|
|
else
|
|
print *, 'UNW_RT: phase bootstrap points for next patch: ',i_bcnt
|
|
end if
|
|
|
|
|
|
end
|
|
|