CNES / RadiativeTransferCode-OSOAA

Ocean Successive Orders with Atmosphere - Advanced (OSOAA) : Accurate computation of the radiative tranfer into the Ocean-Atmosphere system including polarisation, coupling terms, and the agitated surface.
GNU General Public License v2.0
30 stars 12 forks source link

Use OSOAA to simulate GOCI TOA #6

Closed ghost closed 4 years ago

ghost commented 4 years ago

I use OSOAA, 6S and HydroLight to simulate GOCI TOA reflectance. Method: The data input to the radiation transmission model is the GOCI secondary product(Chla,TSS,CDOM,AOT) processed by GDPS. Then calculate TOA and GOCI original TOA comparison.

图片1

Results:

图片2

The x is the acquisition time of GOCI images in a day. Questions: 1.Why is the error of OSOAA simulation so large, and contrary to the result of 6S, the data quality at noon is the best, and why is the error the largest 2.When 6S replaces the atmospheric part of OSOAA, the effect becomes much better. If the atmospheric part of OSOAA has some problems?

Thanks

ghost commented 4 years ago

My code is written according to @fnemina

def OSOAA(wavelengths, solar_z, solar_a, view_z, view_a, aot, chl, cdom, tss):

    s = pyOSOAA.OSOAA(cleanup=True)
    view = view_z
    s.view.phi = np.abs(solar_a - view_a)
    s.ang.thetas = solar_z
    # Sea bottom configuration
    s.sea.depth = 1000
    s.sea.bottype = 1
    s.sea.botalb = 0

    # Sea particles configuration
    s.phyto.chl = chl
    s.sed.csed = tss
    s.sed.SetPrimaryMode()
    s.det.abs440 = 0
    s.ys.abs440 = cdom

    s.ap.SetPressure(1013.25)
    # 1.Troposperic 2.Uban 3.Maritime 4.Coastal
    s.aer.SetModel(model=2, sfmodel=3, rh=0)
    s.aer.aotref = aot

    # Sea surface configuration
    s.sea.wind = 0

    # Set view level at TOA
    s.view.level = 1

    rho_toa = RunWavelengths(s, wavelengths, view) / np.cos(np.pi * view / 180.0)

    return rho_toa
blafranc commented 4 years ago

It seems there are several confusions in your use of the OSOAA code which may explain you made wrong simulations :

1) The conversion from normalized radiance (calculated by OSOAA) to reflectance is done by dividing the normalized radiance by cos(SZA) with SZA is the Solar Zenith Angle. In your routine, it seems the division is done by the cosine of the viewing angle.

2) Be sure to use the correct value of the relative azimut angle. With respect to the 6S code convention, the relative azimut angle for OSOAA is PhiOSOAA = 180° - Phi6S.

Let's note: In the OSOAA model, PhiOSOAA =0 means that the satellite is located in the specular half-plane and PhiOSOAA =180° means that the satellite is located in the backscattering half-plane.

3) Your aerosol model is set to 0% of relative humidity. This is not consistent, especially for marine conditions.

4) Check the unit of all the parameters provided to OSOAA (concentration of chlorophyll, mineral-like particles, CDOM), as defined in the User Manual.

Best regards Dr Bruno Lafrance

ghost commented 4 years ago

Thanks @blafranc for giving me suggestions.

  1. I wrote the code based on the example document of pyOSOAA. The satellite observation angle is used in the document convert from normalized radiance (calculated by OSOAA) to reflectance. @fnemina has been notified of the error.

  2. Because 6S only considers aerosols in dry air, and ignores the influence of relative humidity on aerosol particle size and negative refractive index. In order to compare with the results of 6S, the relative humidity of the OSOAA aerosol model is also set to 0