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
316b9569
Commit
316b9569
authored
Apr 10, 2017
by
Uwe Schulzweida
Browse files
gridDefParamLCC: refactor interface.
parent
f6bf667e
Changes
6
Hide whitespace changes
Inline
Side-by-side
src/cdi.h
View file @
316b9569
...
...
@@ -932,7 +932,7 @@ void gridDefParamGME(int gridID, int nd, int ni, int ni2, int ni3);
void
gridInqParamGME
(
int
gridID
,
int
*
nd
,
int
*
ni
,
int
*
ni2
,
int
*
ni3
);
/* Lambert Conformal Conic grid (GRIB version) */
void
gridDefParamLCC
(
int
gridID
,
double
a
,
double
rf
,
double
xval
_0
,
double
yval_0
,
double
lon
_0
,
double
lat_1
,
double
lat_2
);
void
gridDefParamLCC
(
int
gridID
,
double
missval
,
double
lon_0
,
double
lat
_0
,
double
lat_1
,
double
lat_2
,
double
a
,
double
rf
,
double
xval
_0
,
double
yval_0
,
double
x_0
,
double
y_0
);
int
gridInqParamLCC
(
int
gridID
,
double
missval
,
double
*
lon_0
,
double
*
lat_0
,
double
*
lat_1
,
double
*
lat_2
,
double
*
a
,
double
*
rf
,
double
*
xval_0
,
double
*
yval_0
,
double
*
x_0
,
double
*
y_0
);
void
gridDefArea
(
int
gridID
,
const
double
area
[]);
...
...
src/cdi.inc
View file @
316b9569
...
...
@@ -1846,13 +1846,17 @@
!
!
gridDefParamLCC
!
(
INTEGER
gridID
,
!
DOUBLEPRECISION
missval
,
!
DOUBLEPRECISION
lon_0
,
!
DOUBLEPRECISION
lat_0
,
!
DOUBLEPRECISION
lat_1
,
!
DOUBLEPRECISION
lat_2
,
!
DOUBLEPRECISION
a
,
!
DOUBLEPRECISION
rf
,
!
DOUBLEPRECISION
xval_0
,
!
DOUBLEPRECISION
yval_0
,
!
DOUBLEPRECISION
lon_0
,
!
DOUBLEPRECISION
lat_1
,
!
DOUBLEPRECISION
lat_2
)
!
DOUBLEPRECISION
x_0
,
!
DOUBLEPRECISION
y_0
)
EXTERNAL
gridDefParamLCC
INTEGER
gridInqParamLCC
...
...
src/cdiFortran.c
View file @
316b9569
...
...
@@ -397,7 +397,7 @@ FCALLSCSUB5 (gridInqParamGME, GRIDINQPARAMGME, gridinqparamgme, INT, PINT, PINT,
/* Lambert Conformal Conic grid (GRIB version) */
FCALLSCSUB
8
(
gridDefParamLCC
,
GRIDDEFPARAMLCC
,
griddefparamlcc
,
INT
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
)
FCALLSCSUB
12
(
gridDefParamLCC
,
GRIDDEFPARAMLCC
,
griddefparamlcc
,
INT
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
,
DOUBLE
)
FCALLSCFUN12
(
INT
,
gridInqParamLCC
,
GRIDINQPARAMLCC
,
gridinqparamlcc
,
INT
,
DOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
,
PDOUBLE
)
FCALLSCSUB2
(
gridDefArea
,
GRIDDEFAREA
,
griddefarea
,
INT
,
DOUBLEV
)
FCALLSCSUB2
(
gridInqArea
,
GRIDINQAREA
,
gridinqarea
,
INT
,
DOUBLEV
)
...
...
src/grid.c
View file @
316b9569
...
...
@@ -20,7 +20,7 @@
#include
"serialize.h"
#include
"vlist.h"
double
grid_missval
=
9999
.;
double
grid_missval
=
-
9999
.;
/* the value in the second pair of brackets must match the length of
* the longest string (including terminating NUL) */
...
...
@@ -3590,23 +3590,28 @@ const double *gridInqYvalsPtr(int gridID)
@Function gridDefParamLCC
@Title Define the parameter of a Lambert Conformal Conic grid
@Prototype void gridDefParamLCC(int gridID, double
a
, double
rf
, double
xval
_0, double
yval_0, double lon
_0, double
lat_1
, double
lat_2
)
@Prototype void gridDefParamLCC(int gridID, double
missval
, double
lon_0
, double
lat
_0, double
lat_1, double lat_2, double a, double rf, double xval
_0, double
yval_0
, double
x_0, double y_0
)
@Parameter
@Item gridID Grid ID, from a previous call to @fref{gridCreate}.
@Item a Earth radius.
@Item rf Inverse flattening
@Item xval_0 Longitude of the first grid point.
@Item yval_0 Latitude of the first grid point.
@Item missval Missing value
@Item lon_0 The East longitude of the meridian which is parallel to the Y-axis.
@Item lat_0 Latitude of the projection origin
@Item lat_1 First latitude from the pole at which the secant cone cuts the sphere.
@Item lat_2 Second latitude at which the secant cone cuts the sphere.
@Item a Earth radius in metres (optional).
@Item rf Inverse flattening (1/f) (optional).
@Item xval_0 Longitude of the first grid point in degree (optional).
@Item yval_0 Latitude of the first grid point in degree (optional).
@Item x_0 False easting (optional).
@Item y_0 False northing (optional).
@Description
The function @func{gridDefParamLCC} defines the parameter of a Lambert Conformal Conic grid.
@EndFunction
*/
void
gridDefParamLCC
(
int
gridID
,
double
a
,
double
rf
,
double
xval_0
,
double
yval_0
,
double
lon_0
,
double
lat_1
,
double
lat_2
)
void
gridDefParamLCC
(
int
gridID
,
double
missval
,
double
lon_0
,
double
lat_0
,
double
lat_1
,
double
lat_2
,
double
a
,
double
rf
,
double
xval_0
,
double
yval_0
,
double
x_0
,
double
y_0
)
{
cdiGridDefKeyStr
(
gridID
,
CDI_KEY_MAPPING
,
CDI_MAX_NAME
,
"Lambert_Conformal"
);
...
...
@@ -3622,8 +3627,10 @@ void gridDefParamLCC(int gridID, double a, double rf, double xval_0, double yval
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"latitude_of_projection_origin"
,
CDI_DATATYPE_FLT64
,
1
,
&
lat_2
);
if
(
a
>
0
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"earth_radius"
,
CDI_DATATYPE_FLT64
,
1
,
&
a
);
if
(
rf
>
0
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"inverse_flattening"
,
CDI_DATATYPE_FLT64
,
1
,
&
rf
);
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"longitudeOfFirstGridPointInDegrees"
,
CDI_DATATYPE_FLT64
,
1
,
&
xval_0
);
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"latitudeOfFirstGridPointInDegrees"
,
CDI_DATATYPE_FLT64
,
1
,
&
yval_0
);
if
(
IS_NOT_EQUAL
(
xval_0
,
missval
)
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"longitudeOfFirstGridPointInDegrees"
,
CDI_DATATYPE_FLT64
,
1
,
&
xval_0
);
if
(
IS_NOT_EQUAL
(
yval_0
,
missval
)
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"latitudeOfFirstGridPointInDegrees"
,
CDI_DATATYPE_FLT64
,
1
,
&
yval_0
);
if
(
IS_NOT_EQUAL
(
x_0
,
missval
)
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"false_easting"
,
CDI_DATATYPE_FLT64
,
1
,
&
x_0
);
if
(
IS_NOT_EQUAL
(
y_0
,
missval
)
)
cdiDefAttFlt
(
gridID
,
CDI_GLOBAL
,
"false_northing"
,
CDI_DATATYPE_FLT64
,
1
,
&
y_0
);
grid_t
*
gridptr
=
grid_to_pointer
(
gridID
);
gridptr
->
projtype
=
CDI_PROJ_LCC
;
...
...
src/stream_cgribex.c
View file @
316b9569
...
...
@@ -402,7 +402,11 @@ void cgribexAddRecord(stream_t * streamptr, int param, int *isec1, int *isec2, d
double
lat_2
=
ISEC2_Lambert_LatS2
*
0
.
001
;
bool
lsouth
=
gribbyte_get_bit
(
ISEC2_Lambert_ProjFlag
,
1
);
if
(
lsouth
)
{
lat_1
=
-
lat_1
;
lat_2
=
-
lat_2
;
}
gridDefParamLCC
(
gridID
,
a
,
rf
,
xval_0
,
yval_0
,
lon_0
,
lat_1
,
lat_2
);
double
lat_0
=
lat_2
;
double
x_0
=
grid_missval
;
double
y_0
=
grid_missval
;
gridDefParamLCC
(
gridID
,
grid_missval
,
lon_0
,
lat_0
,
lat_1
,
lat_2
,
a
,
rf
,
xval_0
,
yval_0
,
x_0
,
y_0
);
}
}
else
...
...
src/stream_gribapi.c
View file @
316b9569
...
...
@@ -492,7 +492,7 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh,
long
earthIsOblate
;
grib_get_long
(
gh
,
"earthIsOblate"
,
&
earthIsOblate
);
if
(
earthIsOblate
)
{
a
=
6378160
.;
rf
=
297
.
0
;
}
double
xval_0
,
yval_0
,
lon_0
,
lat_1
,
lat_2
;
double
lon_0
,
lat_0
,
lat_1
,
lat_2
,
xval_0
,
yval_0
,
x_0
=
grid_missval
,
y_0
=
grid_missval
;
long
projflag
=
0
;
grib_get_double
(
gh
,
"longitudeOfFirstGridPointInDegrees"
,
&
xval_0
);
grib_get_double
(
gh
,
"latitudeOfFirstGridPointInDegrees"
,
&
yval_0
);
...
...
@@ -503,7 +503,8 @@ void gribapiAddRecord(stream_t * streamptr, int param, grib_handle *gh,
bool
lsouth
=
gribbyte_get_bit
(
projflag
,
1
);
if
(
lsouth
)
{
lat_1
=
-
lat_1
;
lat_2
=
-
lat_2
;
}
gridDefParamLCC
(
gridID
,
a
,
rf
,
xval_0
,
yval_0
,
lon_0
,
lat_1
,
lat_2
);
lat_0
=
lat_2
;
gridDefParamLCC
(
gridID
,
grid_missval
,
lon_0
,
lat_0
,
lat_1
,
lat_2
,
a
,
rf
,
xval_0
,
yval_0
,
x_0
,
y_0
);
}
int
zaxistype
=
gribapiGetZaxisType
(
gribEditionNumber
(
gh
),
leveltype1
);
...
...
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