Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpim-sw
libcdi
Commits
b7c29e8a
Commit
b7c29e8a
authored
May 27, 2013
by
Uwe Schulzweida
Browse files
added examples/cdi_write_hybrid.c
parent
951b70da
Changes
2
Hide whitespace changes
Inline
Side-by-side
.gitattributes
View file @
b7c29e8a
...
...
@@ -117,6 +117,7 @@ examples/cdi_write.c -text
examples/cdi_write_ens.c -text
examples/cdi_write_f.f -text
examples/cdi_write_f2003.f90 -text
examples/cdi_write_hybrid.c -text
examples/cdi_write_reset.c -text
examples/compf -text
examples/pio/Makefile.am -text
...
...
examples/cdi_write_hybrid.c
0 → 100644
View file @
b7c29e8a
#include
<stdio.h>
#include
"cdi.h"
#define nlon 12 // Number of longitudes
#define nlat 6 // Number of latitudes
#define nhlev 6 // Number of half hybrid levels
#define nflev 5 // Number of full hybrid levels
#define nts 3 // Number of time steps
int
main
(
void
)
{
int
gridID
,
zaxisID1
,
zaxisID2
,
zaxisID3
,
zaxisID4
,
taxisID
;
int
vlistID
,
varID1
,
varID2
,
varID3
,
varID4
,
streamID
,
tsID
;
int
i
,
k
,
nmiss
=
0
;
double
lons
[
nlon
]
=
{
0
,
30
,
60
,
90
,
120
,
150
,
180
,
210
,
240
,
270
,
300
,
330
};
double
lats
[
nlat
]
=
{
-
75
,
-
45
,
-
15
,
15
,
45
,
75
};
double
levs
[
nhlev
]
=
{
1
,
2
,
3
,
4
,
5
,
6
};
double
levs2
[
nhlev
]
=
{
2
,
3
,
4
,
5
,
6
,
-
1
};
double
vct
[
2
*
nhlev
]
=
{
0
,
6000
,
10000
,
16000
,
8000
,
0
,
0
,
0
.
0004
,
0
.
03
,
0
.
2
,
0
.
7
,
1
.
0
};
double
var1
[
nlon
*
nlat
];
double
var2
[
nlon
*
nlat
*
nflev
];
double
var3
[
nlon
*
nlat
*
nhlev
];
double
var4
[
nlon
*
nlat
*
nflev
];
// Create a regular lon/lat grid
gridID
=
gridCreate
(
GRID_LONLAT
,
nlon
*
nlat
);
gridDefXsize
(
gridID
,
nlon
);
gridDefYsize
(
gridID
,
nlat
);
gridDefXvals
(
gridID
,
lons
);
gridDefYvals
(
gridID
,
lats
);
// Create a surface level Z-axis
zaxisID1
=
zaxisCreate
(
ZAXIS_SURFACE
,
1
);
// Create a hybrid level Z-axis
zaxisID2
=
zaxisCreate
(
ZAXIS_HYBRID
,
nflev
);
zaxisDefLevels
(
zaxisID2
,
levs
);
zaxisDefVct
(
zaxisID2
,
nhlev
*
2
,
vct
);
// Create a hybrid half level Z-axis
zaxisID3
=
zaxisCreate
(
ZAXIS_HYBRID
,
nhlev
);
zaxisDefLevels
(
zaxisID3
,
levs
);
zaxisDefVct
(
zaxisID3
,
nhlev
*
2
,
vct
);
// Create a hybrid level Z-axis
zaxisID4
=
zaxisCreate
(
ZAXIS_HYBRID
,
nflev
);
zaxisDefLevels
(
zaxisID4
,
levs
);
zaxisDefLbounds
(
zaxisID4
,
levs
);
zaxisDefUbounds
(
zaxisID4
,
levs2
);
zaxisDefVct
(
zaxisID4
,
nhlev
*
2
,
vct
);
// Create a variable list
vlistID
=
vlistCreate
();
// Define the variables
varID1
=
vlistDefVar
(
vlistID
,
gridID
,
zaxisID1
,
TIME_VARIABLE
);
varID2
=
vlistDefVar
(
vlistID
,
gridID
,
zaxisID2
,
TIME_VARIABLE
);
varID3
=
vlistDefVar
(
vlistID
,
gridID
,
zaxisID3
,
TIME_VARIABLE
);
varID4
=
vlistDefVar
(
vlistID
,
gridID
,
zaxisID4
,
TIME_VARIABLE
);
// Define the variable names
vlistDefVarName
(
vlistID
,
varID1
,
"sp"
);
vlistDefVarName
(
vlistID
,
varID2
,
"t"
);
vlistDefVarName
(
vlistID
,
varID3
,
"w"
);
vlistDefVarName
(
vlistID
,
varID4
,
"u"
);
// Create a Time axis
taxisID
=
taxisCreate
(
TAXIS_ABSOLUTE
);
// Assign the Time axis to the variable list
vlistDefTaxis
(
vlistID
,
taxisID
);
// Create a dataset in netCDF format
streamID
=
streamOpenWrite
(
"example.grb2"
,
FILETYPE_GRB2
);
if
(
streamID
<
0
)
{
fprintf
(
stderr
,
"%s
\n
"
,
cdiStringError
(
streamID
));
return
(
1
);
}
// Assign the variable list to the dataset
streamDefVlist
(
streamID
,
vlistID
);
// Loop over the number of time steps
for
(
tsID
=
0
;
tsID
<
nts
;
tsID
++
)
{
// Set the verification date to 1985-01-01 + tsID
taxisDefVdate
(
taxisID
,
19850101
+
tsID
);
// Set the verification time to 12:00:00
taxisDefVtime
(
taxisID
,
120000
);
// Define the time step
streamDefTimestep
(
streamID
,
tsID
);
// Init var1 and var2
for
(
i
=
0
;
i
<
nlon
*
nlat
;
++
i
)
var1
[
i
]
=
1
.
1
;
for
(
k
=
0
;
k
<
nflev
;
++
k
)
for
(
i
=
0
;
i
<
nlon
*
nlat
;
++
i
)
var2
[
i
+
k
*
nlon
*
nlat
]
=
2
.
2
+
k
;
for
(
k
=
0
;
k
<
nhlev
;
++
k
)
for
(
i
=
0
;
i
<
nlon
*
nlat
;
++
i
)
var3
[
i
+
k
*
nlon
*
nlat
]
=
-
2
.
2
-
k
;
for
(
k
=
0
;
k
<
nflev
;
++
k
)
for
(
i
=
0
;
i
<
nlon
*
nlat
;
++
i
)
var4
[
i
+
k
*
nlon
*
nlat
]
=
100
+
k
;
// Write var1 and var2
streamWriteVar
(
streamID
,
varID1
,
var1
,
nmiss
);
streamWriteVar
(
streamID
,
varID2
,
var2
,
nmiss
);
streamWriteVar
(
streamID
,
varID3
,
var3
,
nmiss
);
streamWriteVar
(
streamID
,
varID4
,
var4
,
nmiss
);
}
// Close the output stream
streamClose
(
streamID
);
// Destroy the objects
vlistDestroy
(
vlistID
);
taxisDestroy
(
taxisID
);
zaxisDestroy
(
zaxisID1
);
zaxisDestroy
(
zaxisID2
);
gridDestroy
(
gridID
);
return
0
;
}
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment