C+ C NAME: C find_min_max.f C PURPOSE: C Interpolate the longitude of ASHI to use in a sidereal time determination C CATEGORY: C I/O C CALLING SEQUENCE: C call find_min_max(XS1,YS1,NOBS,XSMAX,NIMAX,XSMIN,NIMIX,YSMAX,NIMAY,YSMIN,NIMIY,NXYM,NVAL) C INPUTS: C XS1(NOSBM) real Julian Date time to interpolate to C YS1(NOSBM) real Julian dates of the tracked values where longitudes and latitudes exist C NOBS integer Number of star centroid locations C NXYM integer Maximum number of C NVAL integer Number of values near maximum or minimum C C OUTPUTS: C XSMAX(NXYM,NVAL) real X Value Maximums C NIMAX(NXYM,NVAL) integer X Value maximum associated images C XSMiN(NXYM,NVAL) real X Value Minimums C NIMIX(NXYM,NVAL) integer X Value minimum associated images C YSMAX(NXYM,NVAL) real Y Value Maximums C NIMAY(NXYM,NVAL) integer Y Value maximum associated images C YSMiN(NXYM,NVAL) real Y Value Minimums C NIMIY(NXYM,NVAL) integer Y Value minimum associated images C C FUNCTIONS/SUBROUTINES: C C MODIFICATION HISTORY: C September-2022, Bernard Jackson (UCSD) C- subroutine find_min_max(XS1,YS1,NOBS,XSMAX,NIMAX,XSMIN,NIMIX,YSMAX,NIMAY,YSMIN,NIMIY,NXYM,NVAL,distcx,distcy) real XS1(NOBS), & YS1(NOBS), & XSMAX(NXYM,NVAL), & YSMAX(NXYM,NVAL), & XSMIN(NXYM,NVAL), & YSMIN(NXYM,NVAL) integer NIMAX(NXYM,NVAL), & NIMAY(NXYM,NVAL), & NIMIX(NXYM,NVAL), & NIMIY(NXYM,NVAL) print*, ' Into find_Min_max' IX = 1 NXMA = 0 NYMA = 0 NXMI = 0 NYMI = 0 NVAL2 = 20 do I=1,NXYM do J=1,41 XSMAX(I,J) = -9999.999 YSMAX(I,J) = -9999.999 XSMIN(I,J) = 9999.999 YSMIN(I,J) = 9999.999 NIMAX(I,J) = 1 NIMIX(I,J) = 1 NIMAY(I,J) = 1 NIMIY(I,J) = 1 end do end do C Find X Min Max XSMAL = XS1(20) YSMAL = YS1(20) XSBGL = XS1(20) YSBGL = YS1(20) I = 21 do K=21,NOBS-21 I = I + 1 if(I.lt.NOBS-21) then C print*, I,XS1(I-20),XSBGL,XS1(I+20) if(XS1(I-20).lt.XSBGL.and.XS1(I+20).lt.XSBGL) then NXMA = NXMA + 1 do J=1,NVAL XSMAX(NXMA,J) = XS1(I+J-1-NVAL2) NIMAX(NXMA,J) = I+J-1-NVAL2 C print*,'Xm',I,J,NXMA,I+J-1-NVAL2,XSMAX(NXMA,J),NIMAX(NXMA,J) end do I = I + 41 end if XSBGL = XS1(I) end if end do I = 21 do K=21,NOBS-21 I = I + 1 if(I.lt.NOBS-21) then if(XS1(I-20).gt.XSMAL.and.XS1(I+20).gt.XSMAL) then NXMI = NXMI + 1 do J=1,NVAL XSMIN(NXMI,J) = XS1(I+J-1-NVAL2) NIMIX(NXMI,J) = I+J-1-NVAL2 C print*,'Xi',I,J,NXMI,I+J-1-NVAL2,XSMIN(NXMI,J),NIMIX(NXMI,J) end do I = I + 41 end if end if XSMAL = XS1(I) end do C Find Y Min Max I = 21 do K=21,NOBS-21 I = I + 1 if(I.lt.NOBS-21) then C print*, I,YS1(I-20),YSBGL,YS1(I+20) if(YS1(I-20).lt.YSBGL.and.YS1(I+20).lt.YSBGL) then NYMA = NYMA + 1 do J=1,NVAL YSMAX(NYMA,J) = YS1(I+J-1-NVAL2) NIMAY(NYMA,J) = I+J-1-NVAL2 C print*,'Ym',I,J,NYMA,I+J-1-NVAL2,YSMAX(NYMA,J),NIMAY(NYMA,J) end do I = I + 41 end if YSBGL = YS1(I) end if end do I = 21 do K=21,NOBS-21 I = I + 1 if(I.lt.NOBS-21) then if(YS1(I-20).gt.YSMAL.and.YS1(I+20).gt.YSMAL) then NYMI = NYMI + 1 do J=1,NVAL YSMIN(NYMI,J) = YS1(I+J-1-NVAL2) NIMIY(NYMI,J) = I+J-1-NVAL2 C print*,'Yi',I,J,NYMI,I+J-1-NVAL2,YSMIN(NYMI,J),NIMIY(NYMI,J) end do I = I + 41 end if end if YSMAL = YS1(I) end do C Print out X Min Max do I=1,NXYM do J=1,41 if(XSMAX(I,J).ge.distcx) then if(J.eq.1) then C print*, ' ' C write(*,'(A,I4,A)') 'XMAX ',I,' IMAGE MAX X' end if if(J.eq.1.and.I.eq.1) write(*,'(A,I4,A)') 'XMAX ',I,' IMAGE MAX X' if(J.eq.1.and.I.eq.1) write(*,'(4X,I5,I6,F9.3)') J,NIMAX(I,J),XSMAX(I,J) end if end do end do do I=1,NXYM do J=1,41 if(XSMIN(I,J).lt.distcx) then if(J.eq.1) then C print*, ' ' C write(*,'(A,I4,A)') 'XMIN ',I,' IMAGE MIN X' end if if(J.eq.1.and.I.eq.1) write(*,'(A,I4,A)') 'XMIN ',I,' IMAGE MIN X' if(J.eq.1.and.I.eq.1) write(*,'(4X,I5,I6,F9.3)') J,NIMIX(I,J),XSMIN(I,J) end if end do end do C Print out Y Min Max do I=1,NXYM do J=1,41 if(YSMAX(I,J).ge.distcy) then if(J.eq.1) then C print*, ' ' C write(*,'(A,I4,A)') 'YMAX ',I,' IMAGE MAX Y' end if if(J.eq.1.and.I.eq.1) write(*,'(A,I4,A)') 'YMAX ',I,' IMAGE MAX Y' if(J.eq.1.and.I.eq.1) write(*,'(4X,I5,I6,F9.3)') J,NIMAY(I,J),YSMAX(I,J) end if end do end do do I=1,NXYM do J=1,41 if(YSMIN(I,J).lt.distcy) then if(J.eq.1) then C print*, ' ' C write(*,'(A,I4,A)') 'YMIN ',I,' IMAGE MIN Y' end if if(J.eq.1.and.I.eq.1) write(*,'(A,I4,A)') 'YMIN ',I,' IMAGE MIN Y' if(J.eq.1.and.I.eq.1) write(*,'(4X,I5,I6,F9.3)') J,NIMIY(I,J),YSMIN(I,J) end if end do end do print*, 'end of find_min_max' return end