Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
mpim-sw
libcdi
Commits
9c57b031
Commit
9c57b031
authored
Jul 24, 2016
by
Uwe Schulzweida
Browse files
Added function gridInqProjParamRLL().
parent
b1aeefc2
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/cdf_write.c
View file @
9c57b031
...
@@ -175,7 +175,7 @@ void cdfDefineAttributes(int cdiID, int varID, int fileID, int ncvarID)
...
@@ -175,7 +175,7 @@ void cdfDefineAttributes(int cdiID, int varID, int fileID, int ncvarID)
int
natts
;
int
natts
;
vlistInqNatts
(
cdiID
,
varID
,
&
natts
);
vlistInqNatts
(
cdiID
,
varID
,
&
natts
);
for
(
int
iatt
=
0
;
iatt
<
natts
;
iatt
++
)
for
(
int
iatt
=
0
;
iatt
<
natts
;
++
iatt
)
{
{
vlistInqAtt
(
cdiID
,
varID
,
iatt
,
attname
,
&
atttype
,
&
attlen
);
vlistInqAtt
(
cdiID
,
varID
,
iatt
,
attname
,
&
atttype
,
&
attlen
);
...
...
src/cdi.h
View file @
9c57b031
...
@@ -837,6 +837,9 @@ double gridInqYinc(int gridID);
...
@@ -837,6 +837,9 @@ double gridInqYinc(int gridID);
int
gridIsCircular
(
int
gridID
);
int
gridIsCircular
(
int
gridID
);
int
gridIsRotated
(
int
gridID
);
int
gridIsRotated
(
int
gridID
);
void
gridInqProjParamRLL
(
int
gridID
,
double
*
xpole
,
double
*
ypole
,
double
*
angle
);
void
gridDefXpole
(
int
gridID
,
double
xpole
);
void
gridDefXpole
(
int
gridID
,
double
xpole
);
double
gridInqXpole
(
int
gridID
);
double
gridInqXpole
(
int
gridID
);
void
gridDefYpole
(
int
gridID
,
double
ypole
);
void
gridDefYpole
(
int
gridID
,
double
ypole
);
...
...
src/grid.c
View file @
9c57b031
...
@@ -1776,6 +1776,41 @@ double gridInqYinc(int gridID)
...
@@ -1776,6 +1776,41 @@ double gridInqYinc(int gridID)
return
yinc
;
return
yinc
;
}
}
void
gridInqProjParamRLL
(
int
gridID
,
double
*
xpole
,
double
*
ypole
,
double
*
angle
)
{
*
xpole
=
0
;
*
ypole
=
0
;
*
angle
=
0
;
char
mapping
[
CDI_MAX_NAME
];
mapping
[
0
]
=
0
;
cdiGridInqKeyStr
(
gridID
,
CDI_KEY_MAPPING
,
CDI_MAX_NAME
,
mapping
);
if
(
mapping
[
0
]
&&
strcmp
(
mapping
,
"rotated_latitude_longitude"
)
==
0
)
{
int
atttype
,
attlen
;
char
attname
[
CDI_MAX_NAME
+
1
];
int
natts
;
vlistInqNatts
(
gridID
,
CDI_GLOBAL
,
&
natts
);
for
(
int
iatt
=
0
;
iatt
<
natts
;
++
iatt
)
{
vlistInqAtt
(
gridID
,
CDI_GLOBAL
,
iatt
,
attname
,
&
atttype
,
&
attlen
);
if
(
attlen
!=
1
)
continue
;
if
(
atttype
==
DATATYPE_FLT32
||
atttype
==
DATATYPE_FLT64
)
{
double
attflt
;
vlistInqAttFlt
(
gridID
,
CDI_GLOBAL
,
attname
,
attlen
,
&
attflt
);
if
(
strcmp
(
attname
,
"grid_north_pole_longitude"
)
==
0
)
*
xpole
=
attflt
;
else
if
(
strcmp
(
attname
,
"grid_north_pole_latitude"
)
==
0
)
*
ypole
=
attflt
;
else
if
(
strcmp
(
attname
,
"north_pole_grid_longitude"
)
==
0
)
*
angle
=
attflt
;
}
}
}
else
Warning
(
"rotated_latitude_longitude mapping parameter missing!"
);
}
/*
/*
@Function
@Function
@Title
@Title
...
...
src/stream_cgribex.c
View file @
9c57b031
...
@@ -1612,8 +1612,9 @@ void cgribexDefTime(int *isec1, int vdate, int vtime, int tsteptype, int numavg,
...
@@ -1612,8 +1612,9 @@ void cgribexDefTime(int *isec1, int vdate, int vtime, int tsteptype, int numavg,
static
static
void
cgribexDefGrid
(
int
*
isec1
,
int
*
isec2
,
double
*
fsec2
,
int
*
isec4
,
int
gridID
)
void
cgribexDefGrid
(
int
*
isec1
,
int
*
isec2
,
double
*
fsec2
,
int
*
isec4
,
int
gridID
)
{
{
bool
lcurvi
=
false
;
static
bool
lwarning
=
true
;
static
bool
lwarning
=
true
;
bool
lrotatedll
=
false
;
bool
lcurvi
=
false
;
memset
(
isec2
,
0
,
16
*
sizeof
(
int
));
memset
(
isec2
,
0
,
16
*
sizeof
(
int
));
...
@@ -1660,6 +1661,17 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
...
@@ -1660,6 +1661,17 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
lcurvi
=
true
;
lcurvi
=
true
;
}
}
if
(
gridtype
==
GRID_PROJECTION
)
{
char
mapping
[
CDI_MAX_NAME
];
mapping
[
0
]
=
0
;
cdiGridInqKeyStr
(
gridID
,
CDI_KEY_MAPPING
,
CDI_MAX_NAME
,
mapping
);
if
(
mapping
[
0
]
&&
strcmp
(
mapping
,
"rotated_latitude_longitude"
)
==
0
)
{
gridtype
=
GRID_LONLAT
;
lrotatedll
=
true
;
}
}
ISEC2_Reduced
=
FALSE
;
ISEC2_Reduced
=
FALSE
;
ISEC2_ScanFlag
=
0
;
ISEC2_ScanFlag
=
0
;
...
@@ -1676,7 +1688,7 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
...
@@ -1676,7 +1688,7 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
if
(
gridtype
==
GRID_GAUSSIAN
||
gridtype
==
GRID_GAUSSIAN_REDUCED
)
if
(
gridtype
==
GRID_GAUSSIAN
||
gridtype
==
GRID_GAUSSIAN_REDUCED
)
ISEC2_GridType
=
GRIB1_GTYPE_GAUSSIAN
;
ISEC2_GridType
=
GRIB1_GTYPE_GAUSSIAN
;
else
if
(
gridtype
==
GRID_LONLAT
&&
isRotated
)
else
if
(
gridtype
==
GRID_LONLAT
&&
(
isRotated
||
lrotatedll
)
)
ISEC2_GridType
=
GRIB1_GTYPE_LATLON_ROT
;
ISEC2_GridType
=
GRIB1_GTYPE_LATLON_ROT
;
else
else
ISEC2_GridType
=
GRIB1_GTYPE_LATLON
;
ISEC2_GridType
=
GRIB1_GTYPE_LATLON
;
...
@@ -1752,14 +1764,23 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
...
@@ -1752,14 +1764,23 @@ void cgribexDefGrid(int *isec1, int *isec2, double *fsec2, int *isec4, int gridI
ISEC2_ResFlag
=
(
ISEC2_LatIncr
==
0
||
ISEC2_LonIncr
==
0
)
?
0
:
128
;
ISEC2_ResFlag
=
(
ISEC2_LatIncr
==
0
||
ISEC2_LonIncr
==
0
)
?
0
:
128
;
if
(
isRotated
)
if
(
isRotated
||
lrotatedll
)
{
{
ISEC2_LatSP
=
-
(
int
)
lround
(
gridInqYpole
(
gridID
)
*
1000
);
double
xpole
=
0
,
ypole
=
0
,
angle
=
0
;
ISEC2_LonSP
=
(
int
)
lround
((
gridInqXpole
(
gridID
)
+
180
)
*
1000
);
if
(
isRotated
)
double
angle
=
gridInqAngle
(
gridID
);
{
xpole
=
gridInqXpole
(
gridID
);
ypole
=
gridInqYpole
(
gridID
);
angle
=
gridInqAngle
(
gridID
);
}
else
gridInqProjParamRLL
(
gridID
,
&
xpole
,
&
ypole
,
&
angle
);
ISEC2_LatSP
=
-
(
int
)
lround
(
ypole
*
1000
);
ISEC2_LonSP
=
(
int
)
lround
((
xpole
+
180
)
*
1000
);
if
(
fabs
(
angle
)
>
0
)
angle
=
-
angle
;
if
(
fabs
(
angle
)
>
0
)
angle
=
-
angle
;
FSEC2_RotAngle
=
angle
;
FSEC2_RotAngle
=
angle
;
}
}
/* East -> West */
/* East -> West */
if
(
ISEC2_LastLon
<
ISEC2_FirstLon
)
ISEC2_ScanFlag
+=
128
;
if
(
ISEC2_LastLon
<
ISEC2_FirstLon
)
ISEC2_ScanFlag
+=
128
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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