[Thread Prev][Thread Next][Index]

Re: [ferret_users] openDAP default value



Hi Ansley,

Actually my opendap server is under test and so it is not publicly available.
I send you the ncdump output of the netcdf file (coriolis.ncdump). But I have no fillValue problem when I read that file with ferret.
So I send you the 'dncdump -h' output of the opendap result, where my fillValue problem is.

What I first can see when I compare the headers is that the 'temperature' variable type is 'short' in the netcdf file and becomes 'Float' in the opendap output. But the _fillValue type is still 'short' in both cases.
The CF standards ask for the _FillValue to have the same type as its variable, but it is not true in my Grads-openDAP output. Is that the reason why ferret cannot understand my _fillValue ?

Thomas



Ansley Manke wrote:

Hi Thomas,
The missing_value and _fillValue in your file are assumed to be packed according to the same add_offset and scale_values as the variable. This is described in the CF standard for for missing values, and Ferret applies the same logic to _fillValue as well. The paragraph in the CF standard is under the section on Missing data:

http://www.cgd.ucar.edu/cms/eaton/cf-metadata/CF-1.0.html#miss

So, you should apply add_offset and scale_factor from the variable to the values that you wish to use for the missing or fill flag. Of course there may be a problem with computational precision.

I am not able to open your file; if this does not answer your question, could you send the NetCDF header so I can see what your settings are (the result of the command ncdump -h filename)

Ansley

Thomas LOUBRIEU wrote:

Hello,

I am testing a netcdf dataset that I made available through a GDS openDAP server but I cannot set the default value.

My variables are packed thanks to the 'add_offset' and 'scale_factor' attributes.
I have set the 'missing_value' and '_fillValue' attributes to the unpacked default value but ferret does not seem to understand it :

yes? use "http://rhisib18:8080/grads-dods/coriolis/coriolis-atlantic-temperature-weekly-oa_v3_rt";
yes? list/t=10-nov-2004/z=10/x=-100 temperature
...
10.93N / 332: 52.77
10.60N / 331: 52.77
10.28N / 330: 52.77
9.95N / 329: 52.77
9.62N / 328: 52.77
9.29N / 327: 52.77
8.96N / 326: 52.77
...

where 52.77 is something like the result of '32767*0.001 + 20.0'
Why this result is not recognized as the default value ? Is it because the unpacked value is rounded ?

I am also trying to force the default value by doing :

yes?set variable/bad=32767.0 temperature

But it doesn't work . I also try unpacked value (52.77) as default value but it doesn't work better.

Otherwise, I have no problem while I directly access the netcdf file with ferret.

Does anyone know what happens ?

Thomas

PS
I uses ferret v5.81 on redhat9.
My dataset is made available with gds-1.3 and grads-1.9b4

The opendap DAS output is as follow :

Attributes {
NC_GLOBAL {
String CONVENTIONS "COARDS";
String producer_agengy "IFREMER";
String project_name "CORIOLIS";
String creation_time "12-Jan-2005 20:02:03";
String software_version "OA_V3.02";
String product_version "OA3_02";
String data_set "STD3_02";
String data_manager "Emmanuelle Autret, Thomas Loubrieu";
String estimate_date "05-Jan-2000";
String south_latitude "-70";
String north_latitude "70";
String west_longitude "-100";
String east_longitude "40";
String title "CORIOLIS Analysed temperature";
String Conventions "COARDS", "GrADS";
String dataType "Grid";
String history "Tue Aug 02 11:16:50 CEST 2005 : imported by GrADS Data Server 1.3";
}
temperature {
String long_name "Temperature";
Int16 missing_value 32767;
Int16 _FillValue 32767;
String units "degree_Celsius";
Int16 valid_min -3;
Int16 valid_max 40;
Float64 add_offset 20;
Float64 scale_factor 0.001;
String comment "Temperature estimate (by objective analysis)";
}
pct_variance {
String long_name "Estimate variance / a priori variance (percent)";
Int16 missing_value 32767;
Int16 _FillValue 32767;
String units "percent";
Int16 valid_min 0;
Int16 valid_max 100;
Float64 scale_factor 0.01;
}
lon {
String grads_dim "x";
String grads_mapping "levels";
String grads_size "421";
String units "degrees_east";
String long_name "longitude";
Float64 minimum -100;
Float64 maximum 40;
Float32 resolution 0.33333334;
}
lat {
String grads_dim "y";
String grads_mapping "levels";
String grads_size "597";
String units "degrees_north";
String long_name "latitude";
Float64 minimum -69.9662;
Float64 maximum 69.9662;
Float32 resolution 0.2347859;
}
time {
String grads_dim "t";
String grads_mapping "linear";
String grads_size "255";
String grads_min "00z05jan2000";
String grads_step "10080mn";
String units "days since 1-1-1 00:00:0.0";
String long_name "time";
String minimum "00z05jan2000";
String maximum "00z17nov2004";
Float32 resolution 7.0;
}
lev {
String grads_dim "z";
String grads_mapping "levels";
String units "millibar";
String long_name "altitude";
Float64 minimum 5;
Float64 maximum 1950;
Float32 resolution 33.53448;
}
}






netcdf OA_20000105 {
dimensions:
	time = 1 ;
	depth = 59 ;
	latitude = 597 ;
	longitude = 421 ;
variables:
	float time(time) ;
		time:units = "days since 1950-01-01 00:00:00" ;
	float latitude(latitude) ;
		latitude:units = "degree_north" ;
		latitude:valid_min = -90.f ;
		latitude:valid_max = 90.f ;
	float longitude(longitude) ;
		longitude:units = "degree_east" ;
		longitude:valid_min = -180.f ;
		longitude:valid_max = 180.f ;
	short depth(depth) ;
		depth:units = "m" ;
		depth:positive = "down" ;
		depth:valid_min = 0s ;
		depth:valid_max = 2000s ;
	short temperature(time, depth, latitude, longitude) ;
		temperature:long_name = "Temperature" ;
		temperature:missing_value = 32767s ;
		temperature:_FillValue = 32767s ;
		temperature:units = "degree_Celsius" ;
		temperature:valid_min = -3s ;
		temperature:valid_max = 40s ;
		temperature:add_offset = 20. ;
		temperature:scale_factor = 0.001 ;
		temperature:comment = "Temperature estimate (by objective analysis)" ;
	short pct_variance(time, depth, latitude, longitude) ;
		pct_variance:long_name = "Estimate variance / a priori variance (percent)" ;
		pct_variance:missing_value = 32767s ;
		pct_variance:_FillValue = 32767s ;
		pct_variance:units = "percent" ;
		pct_variance:valid_min = 0s ;
		pct_variance:valid_max = 100s ;
		pct_variance:scale_factor = 0.01 ;

// global attributes:
		:CONVENTIONS = "COARDS" ;
		:producer_agengy = "IFREMER" ;
		:project_name = "CORIOLIS" ;
		:creation_time = "12-Jan-2005 20:02:03" ;
		:software_version = "OA_V3.02" ;
		:product_version = "OA3_02" ;
		:data_set = "STD3_02" ;
		:data_manager = "Emmanuelle Autret, Thomas Loubrieu" ;
		:estimate_date = "05-Jan-2000" ;
		:south_latitude = "-70" ;
		:north_latitude = "70" ;
		:west_longitude = "-100" ;
		:east_longitude = "40" ;
}
netcdf coriolis-atlantic-temperature-weekly-oa_v3_rt {
dimensions:
	time = 1 ;
	lev = 59 ;
	lat = 597 ;
	lon = 421 ;
variables:
	float temperature(time, lev, lat, lon) ;
		temperature:long_name = "Temperature" ;
		temperature:missing_value = 32767s ;
		temperature:_FillValue = 32767s ;
		temperature:units = "degree_Celsius" ;
		temperature:valid_min = -3s ;
		temperature:valid_max = 40s ;
		temperature:add_offset = 20. ;
		temperature:scale_factor = 0.001 ;
		temperature:comment = "Temperature estimate (by objective analysis)" ;
	float pct_variance(time, lev, lat, lon) ;
		pct_variance:long_name = "Estimate variance / a priori variance (percent)" ;
		pct_variance:missing_value = 32767s ;
		pct_variance:_FillValue = 32767s ;
		pct_variance:units = "percent" ;
		pct_variance:valid_min = 0s ;
		pct_variance:valid_max = 100s ;
		pct_variance:scale_factor = 0.01 ;
	double time(time) ;
		time:grads_dim = "t" ;
		time:grads_mapping = "linear" ;
		time:grads_size = "1" ;
		time:grads_min = "00z05jan2000" ;
		time:grads_step = "10080mn" ;
		time:units = "days since 1-1-1 00:00:0.0" ;
		time:long_name = "time" ;
		time:minimum = "00z05jan2000" ;
		time:maximum = "00z05jan2000" ;
	double lev(lev) ;
		lev:grads_dim = "z" ;
		lev:grads_mapping = "levels" ;
		lev:units = "millibar" ;
		lev:long_name = "altitude" ;
		lev:minimum = 5. ;
		lev:maximum = 1950. ;
		lev:resolution = 33.534481f ;
	double lat(lat) ;
		lat:grads_dim = "y" ;
		lat:grads_mapping = "levels" ;
		lat:grads_size = "597" ;
		lat:units = "degrees_north" ;
		lat:long_name = "latitude" ;
		lat:minimum = -69.9662 ;
		lat:maximum = 69.9662 ;
		lat:resolution = 0.2347859f ;
	double lon(lon) ;
		lon:grads_dim = "x" ;
		lon:grads_mapping = "levels" ;
		lon:grads_size = "421" ;
		lon:units = "degrees_east" ;
		lon:long_name = "longitude" ;
		lon:minimum = -100. ;
		lon:maximum = 40. ;
		lon:resolution = 0.33333334f ;

// global attributes:
		:CONVENTIONS = "COARDS" ;
		:producer_agengy = "IFREMER" ;
		:project_name = "CORIOLIS" ;
		:creation_time = "12-Jan-2005 20:02:03" ;
		:software_version = "OA_V3.02" ;
		:product_version = "OA3_02" ;
		:data_set = "STD3_02" ;
		:data_manager = "Emmanuelle Autret, Thomas Loubrieu" ;
		:estimate_date = "05-Jan-2000" ;
		:south_latitude = "-70" ;
		:north_latitude = "70" ;
		:west_longitude = "-100" ;
		:east_longitude = "40" ;
		:title = "CORIOLIS Analysed temperature" ;
		:Conventions = "COARDS\n",
    "GrADS" ;
		:dataType = "Grid" ;
		:history = "Thu Aug 04 12:20:07 CEST 2005 : imported by GrADS Data Server 1.3" ;
}

[Thread Prev][Thread Next][Index]

Dept of Commerce / NOAA / OAR / PMEL / TMAP

Contact Us | Privacy Policy | Disclaimer | Accessibility Statement