185
185
for(size_t k=0;k<nlevels;k++){
186
186
for(size_t j=0; j<(size_t)jdim0; j++){
187
187
for(size_t i=0; i<(size_t)idim0; i++){
188
if(fabs(variable[0][k][j*idim0+i]-land_val)>1.0){
189
for(size_t m=0;m<variable.size();m++)
190
d[m] = variable[m][k][j*idim0+i];
192
kilworth_correction(A, d);
194
for(size_t m=0;m<variable.size();m++){
197
for(size_t ii=0;ii<(size_t)n;ii++){
198
for(size_t jj=0;jj<(size_t)n;jj++)
199
cout<<A[ii*n+jj]<<" ";
203
for(size_t m=0;m<variable.size();m++)
204
cout<<variable[m][k][j*idim0+i]<<" ";
207
for(size_t m=0;m<variable.size();m++)
211
max_v = max(max_v, (float)d[m]);
212
min_v = min(min_v, (float)d[m]);
213
variable[m][k][j*idim0+i] = d[m];
188
if(fabs(variable[0][k][j*idim0+i]-land_val)>1.0){
189
for(size_t m=0;m<variable.size();m++)
190
d[m] = variable[m][k][j*idim0+i];
192
kilworth_correction(A, d);
194
for(size_t m=0;m<variable.size();m++){
197
for(size_t ii=0;ii<(size_t)n;ii++){
198
for(size_t jj=0;jj<(size_t)n;jj++)
199
cout<<A[ii*n+jj]<<" ";
203
for(size_t m=0;m<variable.size();m++)
204
cout<<variable[m][k][j*idim0+i]<<" ";
207
for(size_t m=0;m<variable.size();m++)
211
max_v = max(max_v, (float)d[m]);
212
min_v = min(min_v, (float)d[m]);
213
variable[m][k][j*idim0+i] = d[m];
223
223
int diffuse_boundaries(deque< deque< vector<float> > > &dat, float minv, int iterations){
224
224
// Iterate through time
225
225
for(deque< deque< vector<float> > >::iterator tdat=dat.begin(); tdat!=dat.end(); tdat++){
226
// Iterate through levels
226
// Iterate through levels
227
227
for(size_t k=0;k<tdat->size();k++){
229
// Find which points are null
230
vector<bool> null_points(idim0*jdim0, false);
231
for(size_t j=0; j<(size_t)jdim0; j++){
232
for(size_t i=0; i<(size_t)idim0; i++){
229
// Find which points are null
230
vector<bool> null_points(idim0*jdim0, false);
231
for(size_t j=0; j<(size_t)jdim0; j++){
232
for(size_t i=0; i<(size_t)idim0; i++){
233
233
if(fabs((*tdat)[k][j*idim0+i]-land_val)<1.0){
234
null_points[j*idim0+i] = true;
235
(*tdat)[k][j*idim0+i] = minv;
234
null_points[j*idim0+i] = true;
235
(*tdat)[k][j*idim0+i] = minv;
241
for(size_t its=0;its<iterations;its++){
242
for(size_t j=0; j<(size_t)jdim0; j++){
243
for(size_t i=0; i<(size_t)idim0; i++){
244
if(null_points[j*idim0+i]){
245
float sum=(*tdat)[k][j*idim0+i];
249
sum+=(*tdat)[k][(j-1)*idim0+i];
254
sum+=(*tdat)[k][(j+1)*idim0+i];
258
sum+=(*tdat)[k][j*idim0+(i+idim0-1)%idim0];
261
sum+=(*tdat)[k][j*idim0+(i+1)%idim0];
265
sum+=(*tdat)[k-1][j*idim0+i];
269
(*tdat)[k][j*idim0+i] = sum/npts;
241
for(size_t its=0;its<iterations;its++){
242
for(size_t j=0; j<(size_t)jdim0; j++){
243
for(size_t i=0; i<(size_t)idim0; i++){
244
if(null_points[j*idim0+i]){
245
float sum=(*tdat)[k][j*idim0+i];
249
sum+=(*tdat)[k][(j-1)*idim0+i];
254
sum+=(*tdat)[k][(j+1)*idim0+i];
258
sum+=(*tdat)[k][j*idim0+(i+idim0-1)%idim0];
261
sum+=(*tdat)[k][j*idim0+(i+1)%idim0];
265
sum+=(*tdat)[k-1][j*idim0+i];
269
(*tdat)[k][j*idim0+i] = sum/npts;
280
280
int write_netcdf_variable(int ncid, const int* dimids, const char* name, const char* long_name, const char *units,
281
deque< deque< vector<float> > >& variable){
281
deque< deque< vector<float> > >& variable){
282
282
#ifdef HAVE_NETCDF
284
284
float max_v, min_v;
320
320
for(size_t k=0;k<variable[m].size();k++){
322
322
for(size_t j=0; j<(size_t)jdim0; j++)
323
for(size_t i=0; i<(size_t)idim0; i++){
324
// After applying a diffusion filter we need to ensure the
325
// values are still within bounds.
326
float v = min(max_v, variable[m][k][j*idim0+i]);
329
frame[j*idim0+i] = lround((v - add_offset)/scale_factor);
323
for(size_t i=0; i<(size_t)idim0; i++){
324
// After applying a diffusion filter we need to ensure the
325
// values are still within bounds.
326
float v = min(max_v, variable[m][k][j*idim0+i]);
329
frame[j*idim0+i] = lround((v - add_offset)/scale_factor);
331
331
ncvarput(ncid, varid, start, count, &(frame[0]));
460
460
for(size_t k=0; k<24; k++){
461
461
// cout<<"Reading level "<<k<<endl;
462
462
for(size_t j=0; j<(size_t)jdim0; j++)
463
for(size_t i=0; i<(size_t)idim0; i++){
464
fscanf(fp, "%f", &(dat[m][k][j*idim0+i]));
463
for(size_t i=0; i<(size_t)idim0; i++){
464
fscanf(fp, "%f", &(dat[m][k][j*idim0+i]));
489
489
for(size_t k=0; k<24; k++){
490
490
// cout<<"Reading level "<<k<<endl;
491
491
for(size_t j=0; j<(size_t)jdim0; j++)
492
for(size_t i=0; i<(size_t)idim0; i++){
493
fscanf(fp, "%f", &(dat[m][k][j*idim0+i]));
492
for(size_t i=0; i<(size_t)idim0; i++){
493
fscanf(fp, "%f", &(dat[m][k][j*idim0+i]));
526
526
for(size_t k=0; k<33; k++){
527
527
// cout<<"Reading level "<<k<<endl;
528
528
for(size_t j=0; j<(size_t)jdim0; j++)
529
for(size_t i=0; i<(size_t)idim0; i++){
531
fscanf(fp, "%f", &v);
533
dat[m][k-24][j*idim0+i] = v;
529
for(size_t i=0; i<(size_t)idim0; i++){
531
fscanf(fp, "%f", &v);
533
dat[m][k-24][j*idim0+i] = v;
558
558
for(size_t k=0; k<33; k++){
559
559
// cout<<"Reading level "<<k<<endl;
560
560
for(size_t j=0; j<(size_t)jdim0; j++)
561
for(size_t i=0; i<(size_t)idim0; i++){
563
fscanf(fp, "%f", &v);
565
dat[m][k-24][j*idim0+i] = v;
561
for(size_t i=0; i<(size_t)idim0; i++){
563
fscanf(fp, "%f", &v);
565
dat[m][k-24][j*idim0+i] = v;