#! /usr/bin/env perl # # This example writes some surface pressure and temperatures. It is # intended to illustrate the use of the netCDF perl API. The companion # program sfc_pres_temp_rd.pl shows how to read the netCDF data file # created by this program. # # Heiko Klein 2007-02-06 # use strict; use warnings; use PDL::Lite; use PDL::NetCDF; use Fcntl; my $NLAT = 6; my $NLON = 12; my $SAMPLE_PRESSURE = 900.0; my $SAMPLE_TEMP = 9.0; my $START_LAT = 25.0; my $START_LON = -125.0; my $ncfile = new PDL::NetCDF("sfc_pres_temp.nc", {REVERSE_DIMS => 1, MODE => O_CREAT}); my $latitude = (PDL::Basic::sequence($NLAT) * 5 + $START_LAT)->float; my $longitude = (PDL::Basic::sequence($NLON) * 5 + $START_LON)->float; $ncfile->put('latitude', ['latitude'], $latitude); $ncfile->put('longitude', ['longitude'], $longitude); $ncfile->putatt('degrees_north', 'units', 'latitude'); $ncfile->putatt('degrees_east', 'units', 'longitude'); my $pressure = PDL::Core::zeroes($NLON, $NLAT)->float; my $temp = PDL::Core::zeroes($NLON, $NLAT)->float; for (my $i = 0; $i < $NLAT; $i++) { for (my $j = 0; $j < $NLON; $j++) { $pressure->mslice($j, $i) .= $SAMPLE_PRESSURE + $i + $j * 5; $temp->mslice($j, $i) .= $SAMPLE_TEMP + $i * .25 + $j * .5; } } $ncfile->put('pressure', ['longitude', 'latitude'], $pressure); $ncfile->put('temperature', ['longitude', 'latitude'], $temp); $ncfile->putatt('hPa', 'units', 'pressure'); $ncfile->putatt('celcius', 'units', 'temperature'); $ncfile->close;