⇐ ⇒

[CF-metadata] [CF Metadata] #37: Conventions for Point Observation Data

From: Martina Stockhause <martina.stockhause>
Date: Thu, 19 Nov 2009 15:31:00 +0100

Hi John,

thanks for your answer. I was half a week out of office and had to read through quite a lot of emails to catch up in this lively discussion. Hopefully, I didn't miss too much.

I'd like to contribute my example to the discussion - much more concrete than before.

We came to the decision to write datasets per instrument or sensor. So, e.g. temperature measurements in different height of the same type of measurement instrument or sensor are aggregated in one dataset. For these we have the same time interval (1, 5 or 10 min) and fixed heights. Even the Micro Rain Radar detects at fixed heights. And most of the applications have to handle data from different sensors, separately. So we have instrument-dependent time and vertical coordinate systems. Examples for instruments on the large 300m mast are:

1. Single instrument measuring in a concrete height z, e.g. VTP - dew
point mirror in 110 m height measuring air_temperature,
relative_humidity etc.

2. Multiple instruments of same type in different heights z, e.g.
MINERVA measuring all basic meteorological parameters, installed in 2 10
50 70 110 175 250 m

3. Single instrument measuring vertical profiles (at the moment in fixed
detection heights) and points, e.g. rain radar MRR measuring in 1050
heights liquid_water_content(z), atmosphere_number_content_of_droplets
as total and for size classes A to K of 0.5 to 5.5 mm in diameter, and
precipitation_amount (daily)

Therefore we have not a single station in CF's station concept, but
several - one for each instrument type. For the general case - all data in one file - I get for
the 300m mast (the location is 30 cm above MSL and therefore the height
above ground is usually used as above MSL):

dimensions:
 station = 8 ;
 time = UNLIMITED ;
 lon = 1;
 lat = 1;
 z = 1050 ;
 
// global variables:
 float lon(station);
   lon:long_name = "station longitude";
   lon:units = "degrees_east";
 float lat(station);
   lat:long_name = "station latitude" ;
   lat:units = "degrees_north" ;

// variables:
 char station_name(station, name_strlen) ;
   station_name:standard_name = "station_id" ;
   station_name:long_name ="Instrument on weather mast" ;
 int station_info(station) ;
   station_name:long_name = "" ;

float height(station, z) ;
   height:long_name = "height above ground level" ;
   height:units = "m" ;
   height:positive = "up" ;
// MINERVA values "2 10 50 70 110 175 250"
// MRR values minimum:35 interval:35 maximum:1085
// other single instruments in different heights

 double time(station, time) ;
   time:long_name = "time of measurement" ;
   time:units = "minutes since 1970-01-01 00:00:00" ;
// dep. on instrument/station:
// time:interval=1;
// time:interval=5;
// time:interval=10;
   time:missing_value = -999.9;

double dsize(station,time,z);
   dsize:long_name="droplet size";
   dsize:unit="mm";
// values "0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5"

 float air_temperature(station, time, height) ;
   air_temperature:long_name = "air temperature" ;
   air_temperature:units = "Celsius" ;
   air_temperature:coordinates = "time lon lat height" ;

 float wind_speed(station, time, height) ;
   wind_speed:long_name = "wind speed" ;
   wind_speed:units = "m/s" ;
   wind_speed:coordinates = "time lon lat height" ;

 float total_liquid_water_content(station, time, height) ;
   total_liquid_water_content:long_name = "liquid water content" ;
   total_liquid_water_content:units = "g/m3" ;
   total_liquid_water_content:coordinates = "time lon lat height" ;

 float liquid_water_content(station, time, height, dsize) ;
   liquid_water_content:long_name = "liquid water content" ;
   liquid_water_content:units = "g/m3" ;
   liquid_water_content:coordinates = "time lon lat height dsize" ;

float precipitation_amount(station, time, height);
   precipitation_amount:long_name = "liquid water content" ;
   precipitation_amount:cell_methods="time: sum over days";
   precipitation_amount:units = "g/m3" ;
   precipitation_amount:coordinates = "time lon lat height" ;


In our special case of separated datasets for each instrument type the
station dimension becomes 1 and all gets a bit simpler. And the z dimension can be defined much smaller in most cases.

MINERVA example:

dimensions:
 station = 1 ;
 time = UNLIMITED ;
 lon = 1;
 lat = 1;
 z = 7 ;
 
 float lon(station);
   lon:long_name = "station longitude";
   lon:units = "degrees_east";
 float lat(station);
   lat:long_name = "station latitude" ;
   lat:units = "degrees_north" ;

 char station_name(station, name_strlen) ;
   station_name:standard_name = "station_id" ;
   station_name:long_name ="MINERVA instrument on weather mast Hamburg" ;
 int station_info(station) ;
   station_name:long_name = "" ;

float height(station, z) ;
   height:long_name = "height above ground level" ;
   height:units = "m" ;
   height:positive = "up" ;
// MINERVA values "2 10 50 70 110 175 250"

 double time(station, time) ;
   time:long_name = "time of measurement" ;
   time:units = "minutes since 1970-01-01 00:00:00" ;
   time:interval=1;
   time:missing_value = -999.9;

 float air_temperature(station, time, height) ;
   air_temperature:long_name = "air temperature" ;
   air_temperature:units = "Celsius" ;
   air_temperature:coordinates = "time lon lat height" ;

 float wind_speed(station, time, height) ;
   wind_speed:long_name = "wind speed" ;
   wind_speed:units = "m/s" ;
   wind_speed:coordinates = "time lon lat height" ;

Are there any comments on the idea of using the CF station for a single instrument type at a weather station?

Best wishes,
Martina





John Caron wrote:
> Martina Stockhause wrote:
>> Dear John, dear Heinke,
>>
>> I would support Heinke's idea of generalizing the definition for
>> 'profiles', so that it can be applied to microscale measurements as
>> well. Apart from scintillometer data, data from optical methods like
>> DOAS or FTIR can be delivered as horizontal profiles as well.
>>
>> Using the proposal for the description of our weather mast data
>> (http://wettermast-hamburg.zmaw.de/index.htm; click to the english
>> version), I was misled by the name 'stationTimeSeries'. What is
>> described in the proposal, is more the time series of a single
>> instrument at a station than the data of the whole station due to the
>> fixed altitude. Normally, a station's position is described
>> geographically (lon/lat) and the measurements supply data in
>> different observation heights.
>> E.g. we measure with 30 different instruments standard meteorological
>> parameters in multiple heights and additionally examine cloud heights
>> and rain by profile measurements. Therefore the station data would be
>> an aggregation of 'stationTimeSeries' and 'stationProfileTimeSeries'
>> according to the present proposal.
>> In the referenced document
>> (http://www.unidata.ucar.edu/staff/caron/papers/obs2.pdf) the
>> vertical coordinate is defined as a variable for time series of
>> station data.
>> Could we make the altitude in stationTimeSeries variable?
>> If not: Do you have a suggestion how I could apply the proposal for
>> data of more then one measurement instrument, i.e. different
>> measurement heights of the parameters?
>>
>> Thanks a lot and best wishes,
>> Martina
>>
>>
>> _______________________________________________
>> CF-metadata mailing list
>> CF-metadata at cgd.ucar.edu
>> http://mailman.cgd.ucar.edu/mailman/listinfo/cf-metadata
>>
> Hi Martina:
>
> Im not sure if I ever answered this - i had it marked "to do" so im
> guessing i never did.
>
> Its difficult for a generic program to correctly process all the
> various representations, which is why i am reluctant to allow multiple
> feature types in the same file. However your case points out that its
> natural for data to sometimes have a vertical coordinate and some not.
>
> One could use stationProfile as the feature type, since not all data
> has to have the vertical dimension. If, for example you were using
> 9.6.1 (multidimensional case) :
>
> dimensions:
> station = 22 ;
> time = 3002 ;
> z = 42 ;
>
> variables:
> float lon(station) ;
> lon:long_name = "station longitude";
> lon:units = "degrees_east";
> float lat(station) ;
> lat:long_name = "station latitude" ;
> lat:units = "degrees_north" ;
> char station_name(station, name_strlen) ;
> station_name:standard_name = "station_id" ;
> station_name:long_name = "station name" ;
> int station_info(station) ;
> station_name:long_name = "some kind of station info" ;
>
> float alt(station, time, z) ;
> alt:long_name = "height above mean sea level" ;
> alt:units = "km" ;
> alt:positive = "up" ;
> double time(station, time) ;
> time:long_name = "time of measurement" ;
> time:units = "days since 1970-01-01 00:00:00" ;
> time:missing_value = -999.9;
>
> float temperature(station, time, z) ;
> temperature:long_name = "skin temperature" ;
> temperature:units = "Celsius" ;
> temperature:coordinates = "time lon lat alt" ;
>
> float surface_temperature(station, time) ;
> temperature:long_name = "surface temperature" ;
> temperature:units = "Celsius" ;
> temperature:coordinates = "time lon lat" ;
>
>
> I have renamed the profile dimension as "time" to make it clearer that
> we have a time series of measurements at each station. The collection
> of data that have dimensions variable(station, time) constitute one
> measurement. those that have the z dimension are part of the profile.
>
> Still there could be some problem if you want the profile to have a
> varying time dimension:
>
> variables:
> float lon(station) ;
> float lat(station) ;
> char station_name(station, name_strlen) ;
>
> float alt(station, time, z) ;
> double time(station, time, z) ;
>
> float temperature(station, time, z) ; float
> surface_temperature(station, time) ;
>
>
> So now what is the time coordinate for surface_temperature? One would
> have to make some kind of ad-hoc assumption like using z = 0 (bad!).
>
> Perhaps we need to generalize to:
>
> variables:
> float lon(station) ;
> float lat(station) ;
> char station_name(station, name_strlen) ;
>
> float alt(station, time, z) ;
> double time(station, time) ;
> double timeProfile(station, time, z) ;
>
> float temperature(station, time, z) ; float
> surface_temperature(station, time) ;
>
> ??
>
> So im wondering if you in fact have time-varying profile data (ie time
> varies along the z axis)?
>
>
> Also we might want to move further discussion to
> https://cf-pcmdi.llnl.gov/trac/ticket/37.
Received on Thu Nov 19 2009 - 07:31:00 GMT

This archive was generated by hypermail 2.3.0 : Tue Sep 13 2022 - 23:02:41 BST

⇐ ⇒