Skip to content

Commit 724f45e

Browse files
committed
v2.17.1, v2.18.1dev
1 parent ea74998 commit 724f45e

File tree

4 files changed

+59
-29
lines changed

4 files changed

+59
-29
lines changed

enkf/CHANGELOG

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
v.2.17.1
2+
PS 21022023
3+
-- Exit with error if during UPDATE the stride is different to that in the
4+
transform file.
5+
-- Changed analysis variable names in the spread file from <var>_an to
6+
<var>_inc when UPDATE is run with "--output-increment" because in that
7+
case the spread is calculated for increments rather than for analysed
8+
variables.
19
v.2.17.0
210
PS 09022023
311
-- Added UPDATE option "--calculate-spread-only" to calculate forecast and

enkf/common/version.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@
1313
*
1414
*****************************************************************************/
1515

16-
char* ENKF_VERSION = "2.17.0";
16+
char* ENKF_VERSION = "2.17.1";

enkf/update/diags.c

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,10 @@ void das_allocatespread(dasystem* das, char fname[])
5656
char varname_dst[NC_MAX_NAME];
5757

5858
strcpy(varname_dst, varname_src);
59-
strncat(varname_dst, "_an", NC_MAX_NAME - 1);
59+
if (das->updatespec & UPDATE_OUTPUTINC)
60+
strncat(varname_dst, "_inc", NC_MAX_NAME - 1);
61+
else
62+
strncat(varname_dst, "_an", NC_MAX_NAME - 1);
6063
ncw_def_var_as(ncid, varname_src, varname_dst);
6164
}
6265
ncw_close(ncid_src);
@@ -72,28 +75,23 @@ void das_allocatespread(dasystem* das, char fname[])
7275
*/
7376
void das_writespread(dasystem* das, int nfields, void** fieldbuffer, field fields[], int isanalysis)
7477
{
75-
char fname[MAXSTRLEN];
7678
model* m = das->m;
7779
int nmem = (das->mode == MODE_HYBRID && isanalysis) ? das->nmem_dynamic : das->nmem;
78-
int ni, nj, nk;
80+
int ni, nj;
7981
int fid, e, i, nij;
8082
double* v1 = NULL;
8183
double* v2 = NULL;
82-
float*** v_src = NULL;
83-
84-
if (das->updatespec & UPDATE_DIRECTWRITE)
85-
strcpy(fname, FNAME_SPREAD);
8684

87-
model_getvargridsize(m, fields[0].varid, &ni, &nj, &nk);
85+
model_getvargridsize(m, fields[0].varid, &ni, &nj, NULL);
8886
nij = ni * nj;
8987
v1 = malloc(nij * sizeof(double));
9088
v2 = malloc(nij * sizeof(double));
9189

9290
for (fid = 0; fid < nfields; ++fid) {
9391
field* f = &fields[fid];
92+
float*** v_src = (float***) fieldbuffer[fid];
9493
char varname[NC_MAX_NAME];
9594

96-
v_src = (float***) fieldbuffer[fid];
9795
memset(v1, 0, nij * sizeof(double));
9896
memset(v2, 0, nij * sizeof(double));
9997

@@ -115,11 +113,15 @@ void das_writespread(dasystem* das, int nfields, void** fieldbuffer, field field
115113
}
116114

117115
strncpy(varname, f->varname, NC_MAX_NAME - 1);
118-
if (isanalysis)
119-
strncat(varname, "_an", NC_MAX_NAME - 1);
116+
if (isanalysis) {
117+
if (das->updatespec & UPDATE_OUTPUTINC)
118+
strncat(varname, "_inc", NC_MAX_NAME - 1);
119+
else
120+
strncat(varname, "_an", NC_MAX_NAME - 1);
121+
}
120122

121-
if (!(das->updatespec & UPDATE_DIRECTWRITE)) { /* create file for *
122-
* this field */
123+
if (!(das->updatespec & UPDATE_DIRECTWRITE)) {
124+
char fname[MAXSTRLEN];
123125
int ncid, vid;
124126
int dimids[2];
125127

@@ -142,7 +144,7 @@ void das_writespread(dasystem* das, int nfields, void** fieldbuffer, field field
142144
for (i = 0; i < nij; ++i)
143145
v[i] = (float) v2[i];
144146

145-
model_writefieldas(m, fname, varname, f->varname, f->level, v, 1);
147+
model_writefieldas(m, FNAME_SPREAD, varname, f->varname, f->level, v, 1);
146148
free(v);
147149
}
148150
}
@@ -164,21 +166,15 @@ void das_assemblespread(dasystem* das)
164166

165167
for (i = 0; i < nvar; ++i) {
166168
char* varname = model_getvarname(m, i);
167-
char varname_an[NC_MAX_NAME];
168-
int nlev, k;
169+
int nlev = ncu_getnlevels(FNAME_SPREAD, varname);
169170
int ni, nj;
170-
float* v = NULL;
171-
172-
enkf_printf(" %s:", varname);
173-
nlev = ncu_getnlevels(FNAME_SPREAD, varname);
174-
if ((das->mode == MODE_ENKF || das->mode == MODE_HYBRID) && das->updatespec & UPDATE_DOANALYSISSPREAD) {
175-
strncpy(varname_an, varname, NC_MAX_NAME - 1);
176-
strncat(varname_an, "_an", NC_MAX_NAME - 1);
177-
}
171+
float* v;
172+
int k;
178173

179174
model_getvargridsize(m, i, &ni, &nj, NULL);
180175
v = malloc(ni * nj * sizeof(float));
181176

177+
enkf_printf(" %s:", varname);
182178
for (k = 0; k < nlev; ++k) {
183179
char fname_src[MAXSTRLEN];
184180
int ncid_src, vid;
@@ -194,8 +190,26 @@ void das_assemblespread(dasystem* das)
194190
file_delete(fname_src);
195191

196192
model_writefield(m, FNAME_SPREAD, varname, k, v, 1);
193+
enkf_printf(".");
194+
enkf_flush();
195+
}
196+
enkf_printf("\n");
197+
enkf_flush();
198+
199+
if ((das->mode == MODE_ENKF || das->mode == MODE_HYBRID) && das->updatespec & UPDATE_DOANALYSISSPREAD) {
200+
char varname_an[NC_MAX_NAME];
201+
202+
strncpy(varname_an, varname, NC_MAX_NAME - 1);
203+
if (das->updatespec & UPDATE_OUTPUTINC)
204+
strncat(varname_an, "_inc", NC_MAX_NAME - 1);
205+
else
206+
strncat(varname_an, "_an", NC_MAX_NAME - 1);
207+
208+
enkf_printf(" %s:", varname_an);
209+
for (k = 0; k < nlev; ++k) {
210+
char fname_src[MAXSTRLEN];
211+
int ncid_src, vid;
197212

198-
if ((das->mode == MODE_ENKF || das->mode == MODE_HYBRID) && das->updatespec & UPDATE_DOANALYSISSPREAD) {
199213
if (nlev > 1)
200214
getfieldfname(DIRNAME_TMP, "spread", varname_an, k, fname_src);
201215
else
@@ -207,12 +221,13 @@ void das_assemblespread(dasystem* das)
207221
file_delete(fname_src);
208222

209223
model_writefieldas(m, FNAME_SPREAD, varname_an, varname, k, v, 1);
224+
enkf_printf(".");
225+
enkf_flush();
210226
}
211-
212-
enkf_printf(".");
213227
}
214-
free(v);
215228
enkf_printf("\n");
229+
enkf_flush();
230+
free(v);
216231
}
217232
}
218233

enkf/update/update.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,13 @@ static void das_updatefields(dasystem* das, int nfields, void** fieldbuffer, fie
126126
ncw_inq_varid(ncid, "T", &varid_T);
127127
ncw_inq_varid(ncid, "w", &varid_w);
128128
ncw_inq_vardims(ncid, varid_T, 4, NULL, dimlens);
129+
if (rank == 0) {
130+
int stride_transforms;
131+
132+
ncw_get_att_int(ncid, NC_GLOBAL, "stride", &stride_transforms);
133+
if (stride_transforms != stride)
134+
enkf_quit("grid \"%s\": stride = %d is not equal to the stride of transforms = %d", grid_getname(g), stride, stride_transforms);
135+
}
129136
nj = dimlens[0];
130137
ni = dimlens[1];
131138

0 commit comments

Comments
 (0)