PROGRAM cycleslipremoval ! Modules USE typesizes, ONLY: wp => EightByteReal USE ropp_pp, not_this => ropp_pp_openloop USE ropp_pp_constants, ONLY: pi, c_light USE coordinates USE ropp_pp_types, ONLY: PPConfig USE messages USE ropp_io_types, ONLY: ROprof IMPLICIT NONE INTERFACE SUBROUTINE ropp_pp_openloop2(time, phase_L1, phase_L2, phase_LM, & r_leo, r_gns, ocd, LCF,Freq_L1,Freq_L2) USE typesizes, ONLY: wp => EightByteReal IMPLICIT NONE REAL(wp), DIMENSION(:), INTENT(in) :: time ! time of samples (s) REAL(wp), DIMENSION(:), INTENT(inout) :: phase_L1 ! excess phase L1 (m) REAL(wp), DIMENSION(:), INTENT(inout) :: phase_L2 ! excess phase L2 (m) REAL(wp), DIMENSION(:), INTENT(in) :: phase_LM ! model excess phase (m) REAL(wp), DIMENSION(:,:), INTENT(in) :: r_leo ! LEO coordinates (ECF) REAL(wp), DIMENSION(:,:), INTENT(in) :: r_gns ! GPS coordinates (ECF) ! REAL(wp), DIMENSION(:), INTENT(in) :: r_coc ! centre curvature (ECF) REAL(wp),INTENT(in) :: Freq_L1,Freq_L2 INTEGER, INTENT(in) :: ocd INTEGER, DIMENSION(:), INTENT(inout) :: LCF ! Lost carrier flag END SUBROUTINE ropp_pp_openloop2 SUBROUTINE ropp_pp_modelphase2(month, lat, lon, time, r_leo, r_gns, & r_coc, roc, phase_LM, impact_LM, config) USE typesizes, ONLY: wp => EightByteReal USE ropp_pp USE ropp_pp_types, ONLY: PPConfig USE ropp_pp_constants, ONLY: R_dry, R_vap, epsilon_water, kappa1, kappa2 USE ropp_utils, ONLY: impact_parameter, ropp_MDFV IMPLICIT NONE INTEGER, INTENT(in) :: month ! Month of year REAL(wp), INTENT(in) :: lat ! Latitude REAL(wp), INTENT(in) :: lon ! Longitude REAL(wp), DIMENSION(:), INTENT(in) :: time ! Time of samples (s) REAL(wp), DIMENSION(:,:), INTENT(in) :: r_leo ! LEO coordinates (ECF) REAL(wp), DIMENSION(:,:), INTENT(in) :: r_gns ! GPS coordinates (ECF) REAL(wp), DIMENSION(:), INTENT(in) :: r_coc ! Centre curvature (ECF) REAL(wp), INTENT(in) :: roc ! Radius curvature (m) REAL(wp), DIMENSION(:), INTENT(out) :: phase_LM ! Model excess phase (m) REAL(wp), DIMENSION(:), OPTIONAL, INTENT(out) :: impact_LM ! Model impact (m) TYPE(PPConfig), INTENT(inout) :: config ! Configuration options END SUBROUTINE ropp_pp_modelphase2 END INTERFACE ! Fixed parameters CHARACTER (LEN=*), PARAMETER :: DTfmt1 = & ! hh:mm dd-mm-yyyy "(I2.2,':',I2.2,'UT ',I2.2,'-',A3,'-',I4.4)" ! Local variables TYPE(ROprof) :: ROdata CHARACTER (LEN=256) :: ipfile CHARACTER (LEN=256) :: opfile, thfile, arg CHARACTER (LEN=20) :: ocentre = "UMD" CHARACTER (LEN=80) :: outstr ! Formatted output string CHARACTER (LEN=10) :: number ! Number as string INTEGER :: i, ierr, narg, iarg, k, istatus,nRec INTEGER :: nipf=0, nprf=0, nptot=0,n=0,ocd REAL(wp) :: Freq_L1,Freq_L2 real(wp), allocatable,dimension(:) :: time ! time of samples (s) real(wp), allocatable,dimension(:) :: phase_L1 ! excess phase L1 (m) real(wp), allocatable,dimension(:) :: phase_L2 ! excess phase L2 (m) real(wp), allocatable,dimension(:) :: phase_LM ! model excess phase (m) real(wp), allocatable,dimension(:) :: impact_LM real(wp), allocatable,dimension(:,:) :: r_leo ! cartesian LEO coordinates (ECF) real(wp), allocatable,dimension(:,:) :: r_gns ! cartesian GPS coordinates (ECF) real(wp) :: lat, mlat !BZ mlon/lat from matlab for G.Opt sol. real(wp) :: lon, mlon real(wp), dimension(3) :: r_coc real(wp) :: roc real(wp) :: azimuth real(wp) :: undulation TYPE(PPConfig) :: config ! Configuration options ! character(len=100) :: cfile= & ! '/sky/bzhang/ROTEST/Processing/COSMIC-2/L1a2L1b/data/corrcoef.dat' ! ! character(len=100) :: efile = & ! '/sky/bzhang/ROTEST/Processing/COSMIC-2/L1a2L1b/data/egm96.dat' ! character(len=100) :: cfile= & 'data/corrcoef.dat' character(len=100) :: efile = & 'data/egm96.dat' integer, allocatable,dimension(:) :: lcf ! lost carrier flag integer, allocatable,dimension(:) :: mon ! Month for MSIS search ! Some compilers may need the following declaration to be commented out INTEGER :: IARGC !------------------------------------------------------------- ! 1. Initialise !------------------------------------------------------------- ! CALL message_set_routine ( "CycleSlipDetection " ) !------------------------------------------------------------- ! 2. Parse command line options !------------------------------------------------------------- narg = IARGC() ipfile = " " opfile = " " thfile = "0" iarg = 1 DO WHILE ( iarg <= narg ) CALL GETARG ( iarg, arg ) SELECT CASE (arg) CASE ("-o","-O") CALL GETARG ( iarg+1, arg ) opfile = arg iarg = iarg + 1 CASE DEFAULT IF ( arg(1:1) /= "-" ) THEN ipfile = arg END IF END SELECT iarg = iarg + 1 END DO !------------------------------------------------------------- ! 3. Loop over all input files !------------------------------------------------------------- ! CALL message ( msg_info, "Reading file "//TRIM(ipfile) ) ! config%msisfile= & ! '/sky/bzhang/ROTEST/Processing/COSMIC-2/L1a2L1b/data/MSIS_coeff.nc' config%msisfile= & 'data/MSIS_coeff.nc' OPEN(10,FILE=ipfile,status='OLD'); read(10,*) Nrec,ocd,Freq_L1,Freq_L2 ! print *, 'Nrec==',Nrec ALLOCATE(time(Nrec)) ! time of samples (s)) ALLOCATE(phase_L1(Nrec)) ! excess phase L1 (m)) ALLOCATE(phase_L2(Nrec)) ! excess phase L2 (m)) ALLOCATE(phase_LM(Nrec)) ! model excess phase (m)) ALLOCATE(impact_LM(Nrec)) ALLOCATE(r_leo(Nrec,3)) ! cartesian LEO coordinates (ECF)) ALLOCATE(r_gns(Nrec,3)) ! cartesian GPS coordinates (ECF)) ALLOCATE(lcf(Nrec)) ! lost carrier flag ALLOCATE(mon(Nrec)) ! Mon DO n=1, Nrec read(10,'(F15.10, 3F17.8,8F15.5,I1,I2)')time(n),phase_L1(n),& phase_L2(n),phase_LM(n),r_leo(n,:),r_gns(n,:),mlon,mlat, & lcf(n),mon(n) END DO CLOSE(10) ! Calculate lon/lat and r_coc/roc etc CALL occ_point(r_leo,r_gns,lat,lon,r_coc,roc,azimuth, & undulation, cfile, efile); ! print *, 'lat==',lat,'lon==',lon,'mon==',Mon(1),phase_LM(1) ! print *, 'lat==',mlat,'lon==',mlon,'mon==',Mon(1),phase_LM(1) ! Calculate phase model ! Phase Model has been updated. ! print *,phase_L1(1),phase_L2(1),phase_LM(1),'Before' ! CALL ropp_pp_modelphase2(mon(1), lat, lon, time, r_leo, r_gns, & CALL ropp_pp_modelphase2(mon(1), mlat, mlon, time, r_leo, r_gns, & r_coc, roc, phase_LM, impact_LM, config) ! print *,phase_L1(1),phase_L2(1),phase_LM(1),'After' CALL ropp_pp_openloop2(time, phase_L1, phase_L2, phase_LM, & r_leo, r_gns, ocd, LCF,Freq_L1,Freq_L2) OPEN(11,FILE=opfile,status='unknown') do n=1,Nrec write(11,'(F20.8,1X,F20.8,1X,F20.8)')phase_L1(n), phase_L2(n),phase_LM(n) end do close(11) !-------------------------------------------------------------- !-------------------------------------------------------------- !-------------------------------------------------------------- ! 5. Tidy up !-------------------------------------------------------------- CALL message ( msg_noin, " " ) CALL EXIT(msg_exit_status) END PROGRAM cycleslipremoval