Skip to content

Commit f25d26a

Browse files
committed
- BUGFIX: Don’t break if “lon” or “lat” variable already exist in
output file
1 parent 757acd1 commit f25d26a

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed

src/OfflineMap.cpp

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1220,22 +1220,28 @@ void OfflineMap::Apply(
12201220
if (m_vecTargetDimNames[1] == "lon") {
12211221
dimLon = dim1;
12221222
}
1223-
NcVar * varLon =
1224-
ncTarget.add_var("lon", ncDouble, dimLon);
1225-
1223+
NcVar * varLon = ncTarget.get_var("lon");
12261224
if (varLon == NULL) {
1227-
_EXCEPTIONT("Cannot create variable \"lon\" in target file");
1228-
}
1225+
varLon = ncTarget.add_var("lon", ncDouble, dimLon);
1226+
if (varLon == NULL) {
1227+
_EXCEPTIONT("Cannot create variable \"lon\" in target file");
1228+
}
1229+
1230+
varLon->put(
1231+
&(m_dVectorTargetCenterLon[0]),
1232+
m_dVectorTargetCenterLon.GetRows());
12291233

1230-
varLon->put(
1231-
&(m_dVectorTargetCenterLon[0]),
1232-
m_dVectorTargetCenterLon.GetRows());
1234+
varLon->add_att("bounds", "lon_bnds");
1235+
varLon->add_att("units", "degrees_east");
1236+
varLon->add_att("axis", "X");
1237+
varLon->add_att("long_name", "longitude");
1238+
varLon->add_att("standard_name", "longitude");
12331239

1234-
varLon->add_att("bounds", "lon_bnds");
1235-
varLon->add_att("units", "degrees_east");
1236-
varLon->add_att("axis", "X");
1237-
varLon->add_att("long_name", "longitude");
1238-
varLon->add_att("standard_name", "longitude");
1240+
} else {
1241+
if (varLon->get_dim(0)->size() != dimLon->size()) {
1242+
_EXCEPTIONT("\"lon\" variable mismatch");
1243+
}
1244+
}
12391245

12401246
NcDim * dimLat;
12411247
if (m_vecTargetDimNames[0] == "lat") {
@@ -1244,34 +1250,42 @@ void OfflineMap::Apply(
12441250
if (m_vecTargetDimNames[1] == "lat") {
12451251
dimLat = dim1;
12461252
}
1247-
NcVar * varLat =
1248-
ncTarget.add_var("lat", ncDouble, dimLat);
1249-
1253+
NcVar * varLat = ncTarget.get_var("lat");
12501254
if (varLat == NULL) {
1251-
_EXCEPTIONT("Cannot create variable \"lat\" in target file");
1252-
}
1255+
varLat = ncTarget.add_var("lat", ncDouble, dimLat);
1256+
if (varLat == NULL) {
1257+
_EXCEPTIONT("Cannot create variable \"lat\" in target file");
1258+
}
1259+
1260+
varLat->put(
1261+
&(m_dVectorTargetCenterLat[0]),
1262+
m_dVectorTargetCenterLat.GetRows());
12531263

1254-
varLat->put(
1255-
&(m_dVectorTargetCenterLat[0]),
1256-
m_dVectorTargetCenterLat.GetRows());
1264+
varLat->add_att("bounds", "lat_bnds");
1265+
varLat->add_att("units", "degrees_north");
1266+
varLat->add_att("axis", "Y");
1267+
varLat->add_att("long_name", "latitude");
1268+
varLat->add_att("standard_name", "latitude");
12571269

1258-
varLat->add_att("bounds", "lat_bnds");
1259-
varLat->add_att("units", "degrees_north");
1260-
varLat->add_att("axis", "Y");
1261-
varLat->add_att("long_name", "latitude");
1262-
varLat->add_att("standard_name", "latitude");
1270+
} else {
1271+
if (varLat->get_dim(0)->size() != dimLat->size()) {
1272+
_EXCEPTIONT("\"lat\" variable mismatch");
1273+
}
1274+
}
12631275

12641276
// Output bounds variables
12651277
if ((m_dVectorTargetBoundsLon.GetRows() != 0) &&
1266-
(m_dVectorTargetBoundsLat.GetRows() != 0)
1278+
(m_dVectorTargetBoundsLat.GetRows() != 0) &&
1279+
(ncTarget.get_dim("bnds") != NULL)
12671280
) {
12681281
NcDim * dimBounds = ncTarget.add_dim("bnds", 2);
12691282

12701283
NcVar * varLonBounds =
12711284
ncTarget.add_var("lon_bnds", ncDouble, dimLon, dimBounds);
12721285

12731286
if (varLonBounds == NULL) {
1274-
_EXCEPTIONT("Cannot create variable \"lon_bnds\" in target file");
1287+
_EXCEPTIONT("Cannot create variable \"lon_bnds\""
1288+
" in target file");
12751289
}
12761290

12771291
varLonBounds->put(&(m_dVectorTargetBoundsLon[0][0]),
@@ -1281,7 +1295,8 @@ void OfflineMap::Apply(
12811295
ncTarget.add_var("lat_bnds", ncDouble, dimLat, dimBounds);
12821296

12831297
if (varLatBounds == NULL) {
1284-
_EXCEPTIONT("Cannot create variable \"lat_bnds\" in target file");
1298+
_EXCEPTIONT("Cannot create variable \"lat_bnds\""
1299+
" in target file");
12851300
}
12861301

12871302
varLatBounds->put(&(m_dVectorTargetBoundsLat[0][0]),

0 commit comments

Comments
 (0)