Skip to content

Commit

Permalink
v2.17.1, v2.18.1dev
Browse files Browse the repository at this point in the history
  • Loading branch information
sakov committed Feb 21, 2023
1 parent ea74998 commit 724f45e
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 29 deletions.
8 changes: 8 additions & 0 deletions enkf/CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
v.2.17.1
PS 21022023
-- Exit with error if during UPDATE the stride is different to that in the
transform file.
-- Changed analysis variable names in the spread file from <var>_an to
<var>_inc when UPDATE is run with "--output-increment" because in that
case the spread is calculated for increments rather than for analysed
variables.
v.2.17.0
PS 09022023
-- Added UPDATE option "--calculate-spread-only" to calculate forecast and
Expand Down
2 changes: 1 addition & 1 deletion enkf/common/version.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,4 @@
*
*****************************************************************************/

char* ENKF_VERSION = "2.17.0";
char* ENKF_VERSION = "2.17.1";
71 changes: 43 additions & 28 deletions enkf/update/diags.c
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,10 @@ void das_allocatespread(dasystem* das, char fname[])
char varname_dst[NC_MAX_NAME];

strcpy(varname_dst, varname_src);
strncat(varname_dst, "_an", NC_MAX_NAME - 1);
if (das->updatespec & UPDATE_OUTPUTINC)
strncat(varname_dst, "_inc", NC_MAX_NAME - 1);
else
strncat(varname_dst, "_an", NC_MAX_NAME - 1);
ncw_def_var_as(ncid, varname_src, varname_dst);
}
ncw_close(ncid_src);
Expand All @@ -72,28 +75,23 @@ void das_allocatespread(dasystem* das, char fname[])
*/
void das_writespread(dasystem* das, int nfields, void** fieldbuffer, field fields[], int isanalysis)
{
char fname[MAXSTRLEN];
model* m = das->m;
int nmem = (das->mode == MODE_HYBRID && isanalysis) ? das->nmem_dynamic : das->nmem;
int ni, nj, nk;
int ni, nj;
int fid, e, i, nij;
double* v1 = NULL;
double* v2 = NULL;
float*** v_src = NULL;

if (das->updatespec & UPDATE_DIRECTWRITE)
strcpy(fname, FNAME_SPREAD);

model_getvargridsize(m, fields[0].varid, &ni, &nj, &nk);
model_getvargridsize(m, fields[0].varid, &ni, &nj, NULL);
nij = ni * nj;
v1 = malloc(nij * sizeof(double));
v2 = malloc(nij * sizeof(double));

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

v_src = (float***) fieldbuffer[fid];
memset(v1, 0, nij * sizeof(double));
memset(v2, 0, nij * sizeof(double));

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

strncpy(varname, f->varname, NC_MAX_NAME - 1);
if (isanalysis)
strncat(varname, "_an", NC_MAX_NAME - 1);
if (isanalysis) {
if (das->updatespec & UPDATE_OUTPUTINC)
strncat(varname, "_inc", NC_MAX_NAME - 1);
else
strncat(varname, "_an", NC_MAX_NAME - 1);
}

if (!(das->updatespec & UPDATE_DIRECTWRITE)) { /* create file for *
* this field */
if (!(das->updatespec & UPDATE_DIRECTWRITE)) {
char fname[MAXSTRLEN];
int ncid, vid;
int dimids[2];

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

model_writefieldas(m, fname, varname, f->varname, f->level, v, 1);
model_writefieldas(m, FNAME_SPREAD, varname, f->varname, f->level, v, 1);
free(v);
}
}
Expand All @@ -164,21 +166,15 @@ void das_assemblespread(dasystem* das)

for (i = 0; i < nvar; ++i) {
char* varname = model_getvarname(m, i);
char varname_an[NC_MAX_NAME];
int nlev, k;
int nlev = ncu_getnlevels(FNAME_SPREAD, varname);
int ni, nj;
float* v = NULL;

enkf_printf(" %s:", varname);
nlev = ncu_getnlevels(FNAME_SPREAD, varname);
if ((das->mode == MODE_ENKF || das->mode == MODE_HYBRID) && das->updatespec & UPDATE_DOANALYSISSPREAD) {
strncpy(varname_an, varname, NC_MAX_NAME - 1);
strncat(varname_an, "_an", NC_MAX_NAME - 1);
}
float* v;
int k;

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

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

model_writefield(m, FNAME_SPREAD, varname, k, v, 1);
enkf_printf(".");
enkf_flush();
}
enkf_printf("\n");
enkf_flush();

if ((das->mode == MODE_ENKF || das->mode == MODE_HYBRID) && das->updatespec & UPDATE_DOANALYSISSPREAD) {
char varname_an[NC_MAX_NAME];

strncpy(varname_an, varname, NC_MAX_NAME - 1);
if (das->updatespec & UPDATE_OUTPUTINC)
strncat(varname_an, "_inc", NC_MAX_NAME - 1);
else
strncat(varname_an, "_an", NC_MAX_NAME - 1);

enkf_printf(" %s:", varname_an);
for (k = 0; k < nlev; ++k) {
char fname_src[MAXSTRLEN];
int ncid_src, vid;

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

model_writefieldas(m, FNAME_SPREAD, varname_an, varname, k, v, 1);
enkf_printf(".");
enkf_flush();
}

enkf_printf(".");
}
free(v);
enkf_printf("\n");
enkf_flush();
free(v);
}
}

Expand Down
7 changes: 7 additions & 0 deletions enkf/update/update.c
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,13 @@ static void das_updatefields(dasystem* das, int nfields, void** fieldbuffer, fie
ncw_inq_varid(ncid, "T", &varid_T);
ncw_inq_varid(ncid, "w", &varid_w);
ncw_inq_vardims(ncid, varid_T, 4, NULL, dimlens);
if (rank == 0) {
int stride_transforms;

ncw_get_att_int(ncid, NC_GLOBAL, "stride", &stride_transforms);
if (stride_transforms != stride)
enkf_quit("grid \"%s\": stride = %d is not equal to the stride of transforms = %d", grid_getname(g), stride, stride_transforms);
}
nj = dimlens[0];
ni = dimlens[1];

Expand Down

0 comments on commit 724f45e

Please sign in to comment.