Commit bd6db9ed authored by Uwe Schulzweida's avatar Uwe Schulzweida
Browse files

Sinusoidal and Lambert Azimuthal Equal Area grids with units [km]

parent f0a4bc52
2009-02-?? Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
* using CDI library version 1.3.1
* Sinusoidal and Lambert Azimuthal Equal Area grids with units [km]
* Version 1.3.1 released
2009-01-15 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
* using CDI library version 1.3.0
......
@BeginModule
@NewPage
@Name = Importcmsaf
@Title = Import CM-SAF HDF5 files
@Section = Miscellaneous
......@@ -7,7 +8,74 @@
@BeginDescription
This operator imports gridded CM-SAF (Satellite Application Facility on Climate Monitoring)
HDF5 files.
HDF5 files. CM-SAF exploits data from polar-orbiting and geostationary satellites in order
to provide climate monitoring products of the following parameters:
@IfMan
Cloud parameters: cloud fraction (CFC), cloud type (CTY), cloud phase (CPH),
cloud top height, pressure and temperature (CTH,CTP,CTT),
cloud optical thickness (COT), cloud water path (CWP).
Surface radiation components: Surface albedo (SAL); surface incoming (SIS)
and net (SNS) shortwave radiation; surface downward (SDL)
and outgoing (SOL) longwave radiation, surface net longwave
radiation (SNL) and surface radiation budget (SRB).
Top-of-atmosphere radiation components: Incoming (TIS) and reflected (TRS)
solar radiative flux at top-of-atmosphere. Emitted thermal
radiative flux at top-of-atmosphere (TET).
Water vapour: Vertically integrated water vapour (HTW), layered vertically
integrated water vapour and layer mean temperature and relative
humidity for 5 layers (HLW), temperature and mixing ratio at
6 pressure levels.
@EndifMan
@IfDoc
\vspace*{2mm}
\setlength{\miniwidth}{\textwidth}
\addtolength{\miniwidth}{-0mm}
\hspace*{0mm}\begin{minipage}{\miniwidth}
\begin{defalist}{\bf Cloud para\ }
\item[{\bf Cloud parameters:}]
cloud fraction (CFC), cloud type (CTY), cloud phase (CPH),
cloud top height, pressure and temperature (CTH,CTP,CTT),
cloud optical thickness (COT), cloud water path (CWP).
\item[{\bf Surface radiation components:}]
Surface albedo (SAL); surface incoming (SIS)
and net (SNS) shortwave radiation; surface downward (SDL)
and outgoing (SOL) longwave radiation, surface net longwave
radiation (SNL) and surface radiation budget (SRB).
\item[{\bf Top-of-atmosphere radiation components:}]
Incoming (TIS) and reflected (TRS)
solar radiative flux at top-of-atmosphere. Emitted thermal
radiative flux at top-of-atmosphere (TET).
\item[{\bf Water vapour:}]
Vertically integrated water vapour (HTW), layered vertically
integrated water vapour and layer mean temperature and relative
humidity for 5 layers (HLW), temperature and mixing ratio at
6 pressure levels.
\end{defalist}
\end{minipage}
\addtolength{\miniwidth}{8mm}
\vspace*{2mm}
@EndifDoc
Daily and monthly mean products can be ordered via the CM-SAF web page (www.cmsaf.eu).
Products with higher spatial and temporal resolution, i.e. instantaneous swath-based products,
are available on request (contact.cmsaf@dwd.de). All products are distributed free-of-charge.
More information on the data is available on the CM-SAF homepage (www.cmsaf.eu).
Daily and monthly mean products are provided in equal-area projections. CDO reads the
projection parameters from the metadata in the HDF5-headers in order to allow spatial
operations like remapping. For spatial operations with instantaneous products on original
satellite projection, additional files with arrays of latitudes and longitudes are needed.
These can be obtained from CM-SAF together with the data.
@EndDescription
@EndModule
......@@ -21,7 +89,9 @@ HDF5 files.
@BeginNote
This operator is only available if the program was compiled with HDF5 support!
To use this operator, it is necessary to build CDO with HDF5 support (version 1.6 or higher).
The PROJ.4 library (version 4.6 or higher) is needed for full support of the remapping
functionality.
@EndNote
......
......@@ -2,7 +2,7 @@
This file is part of CDO. CDO is a collection of Operators to
manipulate and analyse Climate model Data.
Copyright (C) 2003-2008 Uwe Schulzweida, Uwe.Schulzweida@zmaw.de
Copyright (C) 2003-2009 Uwe Schulzweida, Uwe.Schulzweida@zmaw.de
See COPYING file for copying and redistribution conditions.
This program is free software; you can redistribute it and/or modify
......@@ -316,10 +316,18 @@ int gridToCurvilinear(int gridID1)
double *xvals2D, *yvals2D;
double *xbounds = NULL, *ybounds = NULL;
double *xbounds2D, *ybounds2D;
char xunits[128], yunits[128];
double xscale = 1, yscale = 1;
nx = gridInqXsize(gridID1);
ny = gridInqYsize(gridID1);
gridInqXunits(gridID1, xunits);
gridInqYunits(gridID1, yunits);
if ( strncmp(xunits, "km", 2) == 0 ) xscale = 1000;
if ( strncmp(yunits, "km", 2) == 0 ) yscale = 1000;
gridDefXsize(gridID2, nx);
gridDefYsize(gridID2, ny);
......@@ -411,8 +419,8 @@ int gridToCurvilinear(int gridID1)
for ( j = 0; j < ny; j++ )
for ( i = 0; i < nx; i++ )
{
data.u = xvals[i];
data.v = yvals[j];
data.u = xscale*xvals[i];
data.v = yscale*yvals[j];
res = pj_inv(data, libProj);
xvals2D[j*nx+i] = res.u*rad2deg;
yvals2D[j*nx+i] = res.v*rad2deg;
......@@ -454,8 +462,8 @@ int gridToCurvilinear(int gridID1)
for ( j = 0; j < ny; j++ )
for ( i = 0; i < nx; i++ )
{
data.u = xvals[i];
data.v = yvals[j];
data.u = xscale*xvals[i];
data.v = yscale*yvals[j];
res = pj_inv(data, libProj);
xvals2D[j*nx+i] = res.u*rad2deg;
yvals2D[j*nx+i] = res.v*rad2deg;
......@@ -606,26 +614,26 @@ int gridToCurvilinear(int gridID1)
{
index = j*4*nx + 4*i;
data.u = xbounds[2*i];
data.v = ybounds[2*j];
data.u = xscale*xbounds[2*i];
data.v = yscale*ybounds[2*j];
res = pj_inv(data, libProj);
xbounds2D[index+0] = res.u*rad2deg;
ybounds2D[index+0] = res.v*rad2deg;
data.u = xbounds[2*i];
data.v = ybounds[2*j+1];
data.u = xscale*xbounds[2*i];
data.v = yscale*ybounds[2*j+1];
res = pj_inv(data, libProj);
xbounds2D[index+1] = res.u*rad2deg;
ybounds2D[index+1] = res.v*rad2deg;
data.u = xbounds[2*i+1];
data.v = ybounds[2*j+1];
data.u = xscale*xbounds[2*i+1];
data.v = yscale*ybounds[2*j+1];
res = pj_inv(data, libProj);
xbounds2D[index+2] = res.u*rad2deg;
ybounds2D[index+2] = res.v*rad2deg;
data.u = xbounds[2*i+1];
data.v = ybounds[2*j];
data.u = xscale*xbounds[2*i+1];
data.v = yscale*ybounds[2*j];
res = pj_inv(data, libProj);
xbounds2D[index+3] = res.u*rad2deg;
ybounds2D[index+3] = res.v*rad2deg;
......@@ -673,26 +681,26 @@ int gridToCurvilinear(int gridID1)
{
index = j*4*nx + 4*i;
data.u = xbounds[2*i];
data.v = ybounds[2*j];
data.u = xscale*xbounds[2*i];
data.v = yscale*ybounds[2*j];
res = pj_inv(data, libProj);
xbounds2D[index+0] = res.u*rad2deg;
ybounds2D[index+0] = res.v*rad2deg;
data.u = xbounds[2*i];
data.v = ybounds[2*j+1];
data.u = xscale*xbounds[2*i];
data.v = yscale*ybounds[2*j+1];
res = pj_inv(data, libProj);
xbounds2D[index+1] = res.u*rad2deg;
ybounds2D[index+1] = res.v*rad2deg;
data.u = xbounds[2*i+1];
data.v = ybounds[2*j+1];
data.u = xscale*xbounds[2*i+1];
data.v = yscale*ybounds[2*j+1];
res = pj_inv(data, libProj);
xbounds2D[index+2] = res.u*rad2deg;
ybounds2D[index+2] = res.v*rad2deg;
data.u = xbounds[2*i+1];
data.v = ybounds[2*j];
data.u = xscale*xbounds[2*i+1];
data.v = yscale*ybounds[2*j];
res = pj_inv(data, libProj);
xbounds2D[index+3] = res.u*rad2deg;
ybounds2D[index+3] = res.v*rad2deg;
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment