Program IOP C INVERSION of IOP BASED on Rrs and REMOTELY RETRIEVED Kd C LOISEL AND POTEAU, IOCCG REPORT N°5, 2006 C LOISEL AND STRAMSKI, APPLIED OPTICS, Vol 39, N°18, 2000 C LOISEL et al, APPLIED OPTICS, Vol 40, N°15, 2001 DIMENSION RRS(5) DIMENSION CTERRS(2,3,5), CTEKD(3,3,5), AW(5), BBW(5) DIMENSION A(5), BB(5), XKD(5) CHARACTER*120 FILENAME C LUTs OPEN(10,FILE='./LUT_RRS') OPEN(11,FILE='./LUT_KD') OPEN(12,FILE='./LUT_AW') DO J=1,3 DO K=1,5 READ(10,*) (CTERRS(I,J,K), I=1,2) ENDDO ENDDO DO J=1,3 DO K=1,5 READ(11,*) (CTEKD(I,J,K),I=1,3) ENDDO ENDDO DO K=1,5 READ(12,*) AW(K), BBW(K) ENDDO CLOSE(10) CLOSE(11) CLOSE(12) OPEN(1,FILE='Result_KD') OPEN(2,FILE='Result_A') OPEN(3,FILE='Result_BB') C INPUTs: Rrs et ASOL WRITE(6,*) '--------------------------------------------------' WRITE(6,*) ' INPUTS ' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) WRITE(6,*) 'Rrs = (Lw(0+)/Ed(0+)) at 410, 440, 490, 510, 550 nm' WRITE(6,*) 'Solar Zenith Angle (degree) if SZA>60 then SZA=60' WRITE(6,*) '' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) ' INPUT FILE FORMAT ' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) '' WRITE(6,*) 'Rrs410, Rrs440, Rrs490, Rrs510, Rrs550, SZA degree' WRITE(6,*) '' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) ' OUTPUT FILE FORMAT ' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) '' WRITE(6,*) 'Result_KD: Kd at 410, 440, 490, 510, 550 nm' WRITE(6,*) 'Result_A : a_total at 410, 440, 490, 510, 550 nm' WRITE(6,*) 'Result_BB: bb_total at 410, 440, 490, 510, 550 nm' WRITE(6,*) '--------------------------------------------------' WRITE(6,*) '' WRITE(6,*) 'PLEASE INPUT FILE NAME' READ(5,*) FILENAME OPEN(48,FILE=FILENAME,STATUS='OLD') DO I=1,10000000 READ(48,*,END=111) (RRS(K), K=1,5), ASOL CALL IOPIOP (CTERRS,CTEKD,RRS,ASOL,XKD,AW,BBW,A,BB) WRITE(1,991) (XKD(K), K=1,5) WRITE(2,991) (A(K), K=1,5) WRITE(3,991) (BB(K), K=1,5) 991 FORMAT(f7.5,2x,f7.5,2x,f7.5,2x,f7.5,2x,f7.5) 111 ENDDO CLOSE(1) CLOSE(2) CLOSE(3) END SUBROUTINE IOPIOP (CTERRS,CTEKD,RRS,ASOL,XKD,AW,BBW,A,BB) DIMENSION RRS(5) DIMENSION CTERRS(2,3,5), CTEKD(3,3,5), AW(5),BBW(5) DIMENSION R(5), XKD(5), R0(3), XKD0(3) DIMENSION A(5),BB(5) REAL EC50,HILLSLOPE,h,eta,MINH,MAXH PI=ACOS(-1.0) XMU=COS(ASIN(SIN(ASOL*PI/180.)/1.34)) RAP=RRS(2)/RRS(5) DO K=1,5 ! LAMBDA LOOP DO J=1,3 ! MUS LOOP R0(J) = CTERRS(1,J,K)*RRS(K)**CTERRS(2,J,K) XKD0(J) =10**((CTEKD(1,J,K)*log10(RAP)+CTEKD(2,J,K))/ + (CTEKD(3,J,K)+log10(RAP))) ENDDO ! END OF MUS LOOP IF(ASOL.LT.60) THEN THETAS=ASOL ELSE THETAS=60 ENDIF CALL INTERPOL(K,THETAS,R0,XKD0,R,XKD) BW=2*BBW(K) ETA=0.05 BALPHA = -0.0042 *ASOL+0.3594 AALPHA = -0.0007*ASOL+0.1024 ALPHA=AALPHA*log10(ETA)+BALPHA DELTA=0.871+0.40*ETA-1.83*ETA**2. BB(K) = XKD(K)*10**(ALPHA)*R(K)**DELTA DO LL=1,2 ETA = BW/(BW+((BB(K)-BBW(K))/0.0183)) IF(BB(k).LT.BBW(K)) THEN ETA = BW/(BW+(((BBW(K)+BBW(K)/10)-BBW(K))/0.0183)) ENDIF ALPHA=(AALPHA)*log10(ETA)+(BALPHA) DELTA=0.871+0.40*ETA-1.83*ETA**2. BB(K) = XKD(K)*10**(ALPHA)*R(K)**DELTA ENDDO ETA = BW/(BW+((BB(K)-BBW(K))/0.0183)) IF(BB(k).LT.BBW(K)) THEN ETA = BW/(BW+(((BBW(K)+BBW(K)/10)-BBW(K))/0.0183)) ENDIF MINH = -0.0034*ASOL+1.248 MAXH = -0.0084*ASOL+1.7223 EC50 = 0.0033*ASOL-1.9837 HILLSLOPE = 0.0034*ASOL**2-0.0674*ASOL-9.34 H = MINH+(MAXH-MINH)/(1+10**(((EC50)-log10(ETA))*HILLSLOPE)) H=10**H A(K) = XMU*XKD(K)/(1+H*(R(K)/(1-R(K))))**0.5 ENDDO ! END LAMBDA LOOP END SUBROUTINE INTERPOL(K,THETAS,R0,XKD0,R,XKD) DIMENSION R(5), XKD(5), R0(3), XKD0(3) IF(THETAS.GE.0.AND.THETAS.LE.30) THEN R(K)=THETAS*(R0(1)-R0(2))/(0-30)+(-30*R0(1))/(0-30) XKD(K)=THETAS*(XKD0(1)-XKD0(2))/(0-30)+(-30*XKD0(1))/(0-30) ELSEIF(THETAS.GT.30.AND.THETAS.LE.60) THEN R(K)=THETAS*(R0(2)-R0(3))/(30-60)+(30*R0(3)-60*R0(2))/(30-60) XKD(K)=THETAS*(XKD0(2)-XKD0(3))/(30-60)+ + (30*XKD0(3)-60*XKD0(2))/(30-60) ENDIF END