ISCE_INSAR/components/mroipac/icu/src/abs_phase.F

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