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
6e820f8f
Commit
6e820f8f
authored
Jan 13, 2010
by
Uwe Schulzweida
Browse files
added optional sorting of parameters
parent
9c96cf72
Changes
4
Hide whitespace changes
Inline
Side-by-side
ChangeLog
View file @
6e820f8f
2010-01-07 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
2010-01-07 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
2010-01-13 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
*
using CGRIBEX library version 1.4.2 (large record support)
2010-01-13 Oliver Fuhrer <oliver.fuhrer@meteoswiss.ch>
*
added optional sorting of parameters
2010-01-13
Oliver Fuhrer <oliver.fuhrer@meteoswiss.ch>
* added support for cosmo GRIB parameter tables
* added missing value support for cosmo GRIB files
2010-01-07 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
* using CGRIBEX library version 1.4.2 (large record support)
2009-12-29 Uwe Schulzweida <Uwe.Schulzweida@zmaw.de>
* using EXSE library version 1.2.0
...
...
src/model.c
View file @
6e820f8f
...
...
@@ -227,6 +227,7 @@ static void model_defaults(void)
(
void
)
modelDef
(
instID
,
149
,
"GME"
);
instID
=
institutInq
(
0
,
0
,
"MCH"
,
NULL
);
//(void) = modelDef(instID, 137, "COSMO");
COSMO
=
modelDef
(
instID
,
255
,
"COSMO"
);
instID
=
institutInq
(
0
,
1
,
"NCEP"
,
NULL
);
...
...
src/stream_cdf.c
View file @
6e820f8f
...
...
@@ -4037,14 +4037,14 @@ typedef struct
int
ncvarid
;
char
name
[
128
];
}
V
ar
I
nfo
;
v
ar
i
nfo
_t
;
static
int
cmpvarname
(
const
void
*
s1
,
const
void
*
s2
)
{
V
ar
I
nfo
*
x
=
(
V
ar
I
nfo
*
)
s1
;
V
ar
I
nfo
*
y
=
(
V
ar
I
nfo
*
)
s2
;
v
ar
i
nfo
_t
*
x
=
(
v
ar
i
nfo
_t
*
)
s1
;
v
ar
i
nfo
_t
*
y
=
(
v
ar
i
nfo
_t
*
)
s2
;
return
(
strcmp
(
x
->
name
,
y
->
name
));
}
...
...
@@ -5725,9 +5725,9 @@ int cdfInqContents(int streamID)
if
(
streamptr
->
sortname
)
{
int
index
;
V
ar
I
nfo
**
varInfo
;
varInfo
=
(
V
ar
I
nfo
**
)
malloc
(
nvars
*
sizeof
(
V
ar
I
nfo
*
));
varInfo
[
0
]
=
(
V
ar
I
nfo
*
)
malloc
(
nvars
*
sizeof
(
V
ar
I
nfo
));
v
ar
i
nfo
_t
**
varInfo
;
varInfo
=
(
v
ar
i
nfo
_t
**
)
malloc
(
nvars
*
sizeof
(
v
ar
i
nfo
_t
*
));
varInfo
[
0
]
=
(
v
ar
i
nfo
_t
*
)
malloc
(
nvars
*
sizeof
(
v
ar
i
nfo
_t
));
for
(
index
=
1
;
index
<
nvars
;
index
++
)
varInfo
[
index
]
=
varInfo
[
0
]
+
index
;
...
...
@@ -5738,7 +5738,7 @@ int cdfInqContents(int streamID)
varInfo
[
varID
]
->
ncvarid
=
ncvarid
;
strcpy
(
varInfo
[
varID
]
->
name
,
ncvars
[
ncvarid
].
name
);
}
qsort
(
varInfo
[
0
],
nvars
,
sizeof
(
V
ar
I
nfo
),
cmpvarname
);
qsort
(
varInfo
[
0
],
nvars
,
sizeof
(
v
ar
i
nfo
_t
),
cmpvarname
);
for
(
varID
=
0
;
varID
<
nvars
;
varID
++
)
{
varids
[
varID
]
=
varInfo
[
varID
]
->
ncvarid
;
...
...
src/varscan.c
View file @
6e820f8f
...
...
@@ -334,6 +334,28 @@ int cmpLevelTable(const void *s1, const void *s2)
}
typedef
struct
{
int
varid
;
int
param
;
}
param_t
;
static
int
cmpparam
(
const
void
*
s1
,
const
void
*
s2
)
{
int
cmp
=
0
;
param_t
*
x
=
(
param_t
*
)
s1
;
param_t
*
y
=
(
param_t
*
)
s2
;
if
(
x
->
param
<
y
->
param
)
cmp
=
1
;
else
if
(
x
->
param
>
y
->
param
)
cmp
=
-
1
;
return
(
cmp
);
}
void
cdiGenVars
(
int
streamID
)
{
static
char
func
[]
=
"cdiGenVars"
;
...
...
@@ -349,44 +371,75 @@ void cdiGenVars(int streamID)
double
*
dlevels1
=
NULL
;
double
*
dlevels2
=
NULL
;
int
vlistID
;
int
*
varids
,
index
,
varid
;
stream_t
*
streamptr
;
streamptr
=
stream_to_pointer
(
streamID
);
vlistID
=
streamInqVlist
(
streamID
);
for
(
varID
=
0
;
varID
<
nvars
;
varID
++
)
varids
=
(
int
*
)
malloc
(
nvars
*
sizeof
(
int
));
for
(
varID
=
0
;
varID
<
nvars
;
varID
++
)
varids
[
varID
]
=
varID
;
if
(
streamptr
->
sortname
)
{
int
index
;
param_t
**
varInfo
;
varInfo
=
(
param_t
**
)
malloc
(
nvars
*
sizeof
(
param_t
*
));
varInfo
[
0
]
=
(
param_t
*
)
malloc
(
nvars
*
sizeof
(
param_t
));
for
(
index
=
1
;
index
<
nvars
;
index
++
)
varInfo
[
index
]
=
varInfo
[
0
]
+
index
;
for
(
varid
=
0
;
varid
<
nvars
;
varid
++
)
{
varInfo
[
varid
]
->
varid
=
varids
[
varid
];
varInfo
[
varid
]
->
param
=
vartable
[
varid
].
param
;
}
qsort
(
varInfo
[
0
],
nvars
,
sizeof
(
param_t
),
cmpparam
);
for
(
varid
=
0
;
varid
<
nvars
;
varid
++
)
{
varids
[
varid
]
=
varInfo
[
varid
]
->
varid
;
}
free
(
varInfo
[
0
]);
free
(
varInfo
);
}
for
(
index
=
0
;
index
<
nvars
;
index
++
)
{
gridID
=
vartable
[
varID
].
gridID
;
param
=
vartable
[
varID
].
param
;
nlevels
=
vartable
[
varID
].
nlevels
;
ltype
=
vartable
[
varID
].
ltype
;
zaxistype
=
vartable
[
varID
].
zaxistype
;
varid
=
varids
[
index
];
gridID
=
vartable
[
varid
].
gridID
;
param
=
vartable
[
varid
].
param
;
nlevels
=
vartable
[
varid
].
nlevels
;
ltype
=
vartable
[
varid
].
ltype
;
zaxistype
=
vartable
[
varid
].
zaxistype
;
if
(
ltype
==
0
&&
zaxistype
==
ZAXIS_GENERIC
&&
cdiDefaultLeveltype
!=
-
1
)
zaxistype
=
cdiDefaultLeveltype
;
lbounds
=
vartable
[
var
ID
].
lbounds
;
prec
=
vartable
[
var
ID
].
prec
;
instID
=
vartable
[
var
ID
].
instID
;
modelID
=
vartable
[
var
ID
].
modelID
;
tableID
=
vartable
[
var
ID
].
tableID
;
timave
=
vartable
[
var
ID
].
timave
;
timaccu
=
vartable
[
var
ID
].
timaccu
;
ztype
=
vartable
[
var
ID
].
ztype
;
lbounds
=
vartable
[
var
id
].
lbounds
;
prec
=
vartable
[
var
id
].
prec
;
instID
=
vartable
[
var
id
].
instID
;
modelID
=
vartable
[
var
id
].
modelID
;
tableID
=
vartable
[
var
id
].
tableID
;
timave
=
vartable
[
var
id
].
timave
;
timaccu
=
vartable
[
var
id
].
timaccu
;
ztype
=
vartable
[
var
id
].
ztype
;
zaxisID
=
UNDEFID
;
if
(
ltype
==
0
&&
zaxistype
==
ZAXIS_GENERIC
&&
nlevels
==
1
&&
!
(
fabs
(
vartable
[
varID
].
levelTable
[
0
].
level1
)
>
0
)
)
if
(
ltype
==
0
&&
zaxistype
==
ZAXIS_GENERIC
&&
nlevels
==
1
&&
!
(
fabs
(
vartable
[
varid
].
levelTable
[
0
].
level1
)
>
0
)
)
zaxistype
=
ZAXIS_SURFACE
;
dlevels
=
(
double
*
)
malloc
(
nlevels
*
sizeof
(
double
));
if
(
lbounds
&&
zaxistype
!=
ZAXIS_HYBRID
&&
zaxistype
!=
ZAXIS_HYBRID_HALF
)
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels
[
levelID
]
=
(
vartable
[
var
ID
].
levelTable
[
levelID
].
level1
+
vartable
[
var
ID
].
levelTable
[
levelID
].
level2
)
/
2
;
dlevels
[
levelID
]
=
(
vartable
[
var
id
].
levelTable
[
levelID
].
level1
+
vartable
[
var
id
].
levelTable
[
levelID
].
level2
)
/
2
;
else
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels
[
levelID
]
=
vartable
[
var
ID
].
levelTable
[
levelID
].
level1
;
dlevels
[
levelID
]
=
vartable
[
var
id
].
levelTable
[
levelID
].
level1
;
if
(
nlevels
>
1
)
{
...
...
@@ -412,16 +465,16 @@ void cdiGenVars(int streamID)
/*
qsort(dlevels, nlevels, sizeof(double), dblcmp);
*/
qsort
(
vartable
[
var
ID
].
levelTable
,
nlevels
,
qsort
(
vartable
[
var
id
].
levelTable
,
nlevels
,
sizeof
(
leveltable_t
),
cmpLevelTable
);
if
(
lbounds
&&
zaxistype
!=
ZAXIS_HYBRID
&&
zaxistype
!=
ZAXIS_HYBRID_HALF
)
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels
[
levelID
]
=
(
vartable
[
var
ID
].
levelTable
[
levelID
].
level1
+
vartable
[
var
ID
].
levelTable
[
levelID
].
level2
)
/
2
.;
dlevels
[
levelID
]
=
(
vartable
[
var
id
].
levelTable
[
levelID
].
level1
+
vartable
[
var
id
].
levelTable
[
levelID
].
level2
)
/
2
.;
else
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels
[
levelID
]
=
vartable
[
var
ID
].
levelTable
[
levelID
].
level1
;
dlevels
[
levelID
]
=
vartable
[
var
id
].
levelTable
[
levelID
].
level1
;
}
}
}
...
...
@@ -430,10 +483,10 @@ void cdiGenVars(int streamID)
{
dlevels1
=
(
double
*
)
malloc
(
nlevels
*
sizeof
(
double
));
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels1
[
levelID
]
=
vartable
[
var
ID
].
levelTable
[
levelID
].
level1
;
dlevels1
[
levelID
]
=
vartable
[
var
id
].
levelTable
[
levelID
].
level1
;
dlevels2
=
(
double
*
)
malloc
(
nlevels
*
sizeof
(
double
));
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
dlevels2
[
levelID
]
=
vartable
[
var
ID
].
levelTable
[
levelID
].
level2
;
dlevels2
[
levelID
]
=
vartable
[
var
id
].
levelTable
[
levelID
].
level2
;
}
zaxisID
=
varDefZaxis
(
vlistID
,
zaxistype
,
nlevels
,
dlevels
,
lbounds
,
dlevels1
,
dlevels2
,
...
...
@@ -452,9 +505,9 @@ void cdiGenVars(int streamID)
vlistDefVarTimaccu
(
vlistID
,
varID
,
timaccu
);
vlistDefVarZtype
(
vlistID
,
varID
,
ztype
);
if
(
vartable
[
var
ID
].
name
)
vlistDefVarName
(
vlistID
,
varID
,
vartable
[
var
ID
].
name
);
if
(
vartable
[
var
ID
].
longname
)
vlistDefVarLongname
(
vlistID
,
varID
,
vartable
[
var
ID
].
longname
);
if
(
vartable
[
var
ID
].
units
)
vlistDefVarUnits
(
vlistID
,
varID
,
vartable
[
var
ID
].
units
);
if
(
vartable
[
var
id
].
name
)
vlistDefVarName
(
vlistID
,
varID
,
vartable
[
var
id
].
name
);
if
(
vartable
[
var
id
].
longname
)
vlistDefVarLongname
(
vlistID
,
varID
,
vartable
[
var
id
].
longname
);
if
(
vartable
[
var
id
].
units
)
vlistDefVarUnits
(
vlistID
,
varID
,
vartable
[
var
id
].
units
);
if
(
cdiDefaultTableID
!=
UNDEFID
)
{
...
...
@@ -489,25 +542,28 @@ void cdiGenVars(int streamID)
if
(
tableID
!=
UNDEFID
)
vlistDefVarTable
(
vlistID
,
varID
,
tableID
);
}
for
(
varID
=
0
;
varID
<
nvars
;
varID
++
)
for
(
index
=
0
;
index
<
nvars
;
index
++
)
{
nlevels
=
vartable
[
varID
].
nlevels
;
varID
=
index
;
varid
=
varids
[
index
];
nlevels
=
vartable
[
varid
].
nlevels
;
/*
for ( levelID = 0; levelID < nlevels; levelID++ )
{
lindex = vartable[var
ID
].levelTable[levelID].lindex;
lindex = vartable[var
id
].levelTable[levelID].lindex;
printf("%d %d %d %d %d\n", varID, levelID,
vartable[var
ID
].levelTable[levelID].lindex,
vartable[var
ID
].levelTable[levelID].recID,
vartable[var
ID
].levelTable[levelID].level1);
vartable[var
id
].levelTable[levelID].lindex,
vartable[var
id
].levelTable[levelID].recID,
vartable[var
id
].levelTable[levelID].level1);
}
*/
for
(
levelID
=
0
;
levelID
<
nlevels
;
levelID
++
)
{
streamptr
->
vars
[
varID
].
level
[
levelID
]
=
vartable
[
var
ID
].
levelTable
[
levelID
].
recID
;
vartable
[
var
id
].
levelTable
[
levelID
].
recID
;
for
(
lindex
=
0
;
lindex
<
nlevels
;
lindex
++
)
if
(
levelID
==
vartable
[
var
ID
].
levelTable
[
lindex
].
lindex
)
break
;
if
(
levelID
==
vartable
[
var
id
].
levelTable
[
lindex
].
lindex
)
break
;
if
(
lindex
==
nlevels
)
Error
(
func
,
"Internal problem! lindex not found."
);
...
...
@@ -516,6 +572,8 @@ void cdiGenVars(int streamID)
}
}
free
(
varids
);
varFree
();
}
...
...
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