@@ -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 */
7376void 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
0 commit comments