org.mbari.model.solar
Class FrouinExtended

java.lang.Object
  extended byorg.mbari.model.solar.FrouinExtended

public class FrouinExtended
extends java.lang.Object

Test program for subroutine to calculate clear-sky solar irradiance at the surface at the SeaWiFS wavelengths (412, 443, 490, 510, 555, 670 nm). Fortran source code can be found at: http://genius.ucsd.edu/~john/SeaWiFS_dir/ssi.f


Constructor Summary
FrouinExtended()
           
 
Method Summary
static double[] calcSurfSolIrrad(double[] wl, int year, int month, int day, double time, double lat, double lon)
           
static double[] calcSurfSolIrrad(double[] wl, int year, int month, int day, double time, double lat, double lon, double TauA865, double Angstrom, double Dobson)
          This subroutine calculates the incoming clear-sky solar irradiance just above the surface at SeaWiFS wavelengths (412, 443, 490, 510, 555, 670 nm), using this equation: E = E0 * ESfactor * COS(SolZen) * TransG * TransA / (1 - (Sa * As)) where: E0 = extra-terrestrial solar irradiance (mW/cm^2/um) ESfactor = Earth-Sun distance factor SolZen = solar zenith angle (deg).
static double[] calcSurfSolIrrad(double[] wl, long UTC, double lat, double lon)
           
static int dayNumber(int jday, int month, int ia)
          subroutine day_number(jday,month,ia,j)
static double estimDobson(int month, double lat)
          Estimate Dobson units from climatology, given the month and latitude.
static double[] getE0(double[] lambda)
           
static double[] getKO3(double[] lambda)
           
static void main(java.lang.String[] args)
           
static double mod(double x, double y)
           
static double[] posFft(int j, double tu, double xlon, double xlat)
          subroutine pos_fft (j,tu,xlon,xlat,asol,phi0) parameter (pi=3.14159265,fac=pi/180.) solar position (zenithal angle asol,azimuthal angle phi0 in degrees) j is the day number in the year mean solar time (heure decimale)
static double[] posSol(int month, int jday, double tu, double xlon, double xlat)
          Subroutine from 6S package to get Sun position
static int sign(double x)
           
static void testFrouinExtended()
           
static double varSol(int jday, int month)
          Subroutine from 6S package to get Earth-Sun distance correction calculation of the variability of the solar constant during the year.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

FrouinExtended

public FrouinExtended()
Method Detail

main

public static void main(java.lang.String[] args)

calcSurfSolIrrad

public static double[] calcSurfSolIrrad(double[] wl,
                                        int year,
                                        int month,
                                        int day,
                                        double time,
                                        double lat,
                                        double lon,
                                        double TauA865,
                                        double Angstrom,
                                        double Dobson)
This subroutine calculates the incoming clear-sky solar irradiance just above the surface at SeaWiFS wavelengths (412, 443, 490, 510, 555, 670 nm), using this equation: E = E0 * ESfactor * COS(SolZen) * TransG * TransA / (1 - (Sa * As)) where: E0 = extra-terrestrial solar irradiance (mW/cm^2/um) ESfactor = Earth-Sun distance factor SolZen = solar zenith angle (deg). TransG = gaseous transmittance TransA = diffuse atmospheric transmittance Sa = spherical albedo of the atmosphere As = albedo of the ocean [note: Routine estimates SolZen from input parameters. Valid for 0 -- 90 deg, but for SolZen > 80 deg, the above formula and the approximations used for the various atmospheric functions are not very accurate.] Routine Inputs: year: 4-digit integer (y2k compliant ;-) month: 2-digit integer day: 2-digit integer time: decimal GMT hours, 24-hour clock lat: latitude (deg) lon: longitude (deg) TauA865 *: aerosol optical thickness, 865 nm Angstrom *: Angstrom coefficient ( convention: Angstrom > 0 ) Dobson *: ozone amount in Dobson units [note: inputs labelled with '*' may be missing. If so, they should be given values of -999 or less. The subroutine will fill in appropriate default values.] Output: E: surface solar irradiance (mW/cm^2/um) [note: if the SolZen is found to be > 90 deg (sun below horizon), then routine fails cleanly. Output 'E' values set to missing value -999 or less. This should be checked for in the calling program.] Sample run input (from a MOBY site): 1998 3 16 23.0 20.83 -157.19 0.08 0.5 325. Output: year, month, day, GMT time, lat, lon, sun zenith angle, and the 6 E's. 1998 3 16 23.000 20.830 -157.190 23.1 133.52 154.19 162.95 159.29 156.78 135.45 Authors: Robert Frouin , scientific algorithms John McPherson , program structure References: Frouin, R., D. W. Ligner, and C. Gautier, 1989: A Simple analytical formula to compute clear sky total and photosynthetically available solar irradiance at the ocean surface. J. Geophys. Res., 94, 9731-9742. Tanre, D., M. Herman, P.-Y. Deschamps, and A. De Leffe, 1979: Atmospheric modeling for Space measurements of ground reflectances, including bi-directional properties. Appl. Optics, 18, 21,3587-21,3597.


calcSurfSolIrrad

public static double[] calcSurfSolIrrad(double[] wl,
                                        long UTC,
                                        double lat,
                                        double lon)

calcSurfSolIrrad

public static double[] calcSurfSolIrrad(double[] wl,
                                        int year,
                                        int month,
                                        int day,
                                        double time,
                                        double lat,
                                        double lon)

varSol

public static double varSol(int jday,
                            int month)
Subroutine from 6S package to get Earth-Sun distance correction calculation of the variability of the solar constant during the year. jday is the number of the day in the month dsol is a multiplicative factor to apply to the mean value of solar constant


posSol

public static double[] posSol(int month,
                              int jday,
                              double tu,
                              double xlon,
                              double xlat)
Subroutine from 6S package to get Sun position


mod

public static double mod(double x,
                         double y)

sign

public static int sign(double x)

dayNumber

public static int dayNumber(int jday,
                            int month,
                            int ia)
subroutine day_number(jday,month,ia,j)


posFft

public static double[] posFft(int j,
                              double tu,
                              double xlon,
                              double xlat)
subroutine pos_fft (j,tu,xlon,xlat,asol,phi0) parameter (pi=3.14159265,fac=pi/180.) solar position (zenithal angle asol,azimuthal angle phi0 in degrees) j is the day number in the year mean solar time (heure decimale)


estimDobson

public static double estimDobson(int month,
                                 double lat)
Estimate Dobson units from climatology, given the month and latitude. Table has 12 columns, one per month, and 35 rows, from 85 N to -85, in steps of 5 deg lat. Note: corrected two bad PAR values in table (eg, 396 -> 296) Subroutine EstimDobson( month, lat, Dobson )


testFrouinExtended

public static void testFrouinExtended()

getE0

public static double[] getE0(double[] lambda)

getKO3

public static double[] getKO3(double[] lambda)