Surface Pressure Granulation for ProEdrViirsAerosol

Issues related to VIIRS EDR algorithms and data
Post Reply
geoffc
Posts: 34
Joined: Mon Feb 14, 2011 3:02 pm
Location: Madison, WI
Contact:

Surface Pressure Granulation for ProEdrViirsAerosol

Post by geoffc »

I've been spooling up to run the ProEdrViirsAerosolController.exe in CSPP (using ADL 4.1), and have granulated the following NCEP data...

'VIIRS-ANC-Preci-Wtr-Mod-Gran',
'VIIRS-ANC-Temp-Surf2M-Mod-Gran',
'VIIRS-ANC-Wind-Speed-Mod-Gran',
'VIIRS-ANC-Wind-Direction-Mod-Gran',
'VIIRS-ANC-Press-Surf-Mod-Gran',
'VIIRS-ANC-Tot-Col-Mod-Gran'

When attempting to run the controller, I get the following error...

Code: Select all

DBG_HIGH ProEdrViirsAerosol.cpp|6983| VIIRS AOT calculated invalid Molecular Optical Thickness at Watertests() in InternalChecks.cpp
DBG_HIGH ProCmnMessage.cpp|165|Status: INF_STATUSTYPE_PRO_ERR | Routine: ProEdrViirsAerosol | Description: ProEdrViirsAerosol::AOT_main - Error returned from Watertests
DBG_HIGH ProCmnMethodAudit.cpp|207|ProEdrViirsAerosol[ProEdrViirsAerosol]::doProcessing(NPP000340188883) [0x31fcad0] ROOT PRO_FAIL Science Algorithm: AOT_main() call from file ProEdrViirsAerosol.cpp, line 1038
The relevant piece of code in ProEdrViirsAerosol.cpp appears to be...

Code: Select all

        /* Calculate Molecular optical thickness at P */
        lprs = (Float32)(*(mdl->psl + pixel)); 
        work_.xtauP[band] = lprs/STDPSL * cfgParmsPtr_->moltau[band];     

        /* Verify calculated xtauP value is not less than or equal to 0 */
        if (work_.xtauP[band] <= 0)
        {        
            std::ostringstream message;
            message.str("");
            message << "VIIRS AOT calculated invalid Molecular Optical "
                << "Thickness at ChsMdlLand() in DoInversionLand.cpp";
            DEBUG_HIGH((ProCmnLogger::getLogger()), message.str());
            /* Terminate processing for this pixel */
            return PRO_FAIL;
        }
I'm particularly interested in lprs, or the local surface pressure, which I gather is sourced ultimately from the NCEP file. The surface pressure I feed the controller is not
corrected for the surface terrain, would it be a reasonable guess that that is the reason I am getting negative xtauP?

I think the code to correct the raw NCEP surface pressure using the VIIRS-MOD-GEO-TC terrain height is in ProAncViirsGranulateSurfPres.cpp, and if I can confirm that
the surface correction is the missing piece, I can re-implement that functionality in CSPP.

Any comments?

Geoff
Geoff P. Cureton, PhD
Cooperative Institute for Meteorological Satellite Studies
University of Wisconsin-Madison
1225 W. Dayton St.
Madison WI 53706, USA
Phone: +1 608 890 0706
kbisanz
Posts: 280
Joined: Wed Jan 05, 2011 7:02 pm
Location: Omaha NE

Re: Surface Pressure Granulation for ProEdrViirsAerosol

Post by kbisanz »

Hello,

It's hard to tell what could be going wrong. Do you know the value of lprs?

Running ProAncViirsGranulateSurfPres.cpp should produce terrain corrected surface pressure. Running ProAncViirsPerformSurfPresCorrection.cpp will put fill in all locations/layers determined to be below the surface of the Earth. For example, the 1000mb layer in a region with high terrain.

I would recommend running the code in ProAncViirsGranulateSurfPres.cpp and also ANC/VIIRS/SurfPresCorrection/src/ProAncViirsPerformSurfPresCorrection.cpp

It sounds like you're not currently running ProAncViirsGranulateSurfPres based on "...I can re-implement that functionality in CSPP". How were you getting granulated surface pressure before?
Kevin Bisanz
Raytheon Company
geoffc
Posts: 34
Joined: Mon Feb 14, 2011 3:02 pm
Location: Madison, WI
Contact:

Re: Surface Pressure Granulation for ProEdrViirsAerosol

Post by geoffc »

Hi,
I am granulating my own NCEP data, as I have avoided using the Ancillary controller (primarily to avoid using any of the tiling stuff). It is not difficult for me to recreate the functionality in ProAncViirsGranulateSurfPres.cpp and ProAncViirsPerformSurfPresCorrection.cpp pertaining to the pressure correction. I mainly wanted to get an idea of the likelyhood of getting the error I cited if I had not performed the pressure correction. Incidentally, I don't have the value of lprs available, so I can't check precisely the various values that caused the error.

I'm going to perform the correction myself (aping the ADL code in python), and see where that gets me.

Thanks,
Geoff
Geoff P. Cureton, PhD
Cooperative Institute for Meteorological Satellite Studies
University of Wisconsin-Madison
1225 W. Dayton St.
Madison WI 53706, USA
Phone: +1 608 890 0706
Post Reply