125
126
128
129
130
131 integer, intent(in) :: ng, tile, kout, nout
132# ifdef ADJUST_BOUNDARY
133 integer, intent(in) :: LBij, UBij
134# endif
135 integer, intent(in) :: LBi, UBi, LBj, UBj
136
137
138
139 integer :: Fcount, i, j, gfactor, gtype, status
140# ifdef SOLVE3D
141 integer :: itrc, k
142# endif
143
144 real(dp) :: scale
145
146 character (len=*), parameter :: MyFile = &
147 & __FILE__//", wrt_error_nf90"
148
149 sourcefile=myfile
150
151
152
153
154
155 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
156
157
158
159
160# if defined WRITE_WATER && defined MASKING
161 gfactor=-1
162# else
163 gfactor=1
164# endif
165
166
167
168 err(ng)%Rindex=err(ng)%Rindex+1
169 fcount=err(ng)%Fcount
170 err(ng)%Nrec(fcount)=err(ng)%Nrec(fcount)+1
171
172
173
174# ifdef SOLVE3D
175# ifdef NESTING
176 IF (master) WRITE (stdout,10) kout, nout, err(ng)%Rindex, ng
177# else
178 IF (master) WRITE (stdout,10) kout, nout, err(ng)%Rindex
179# endif
180# else
181# ifdef NESTING
182 IF (master) WRITE (stdout,10) kout, err(ng)%Rindex, ng
183# else
184 IF (master) WRITE (stdout,10) kout, err(ng)%Rindex
185# endif
186# endif
187
188
189
191 & trim(vname(1,idtime)), time(ng:), &
192 & (/err(ng)%Rindex/), (/1/), &
193 & ncid = err(ng)%ncid, &
194 & varid = err(ng)%Vid(idtime))
195 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
196
197
198
200 & 'zLanczos_coef', zlanczos_coef, &
201 & (/1,1/), (/ninner,ninner/), &
202 & ncid = err(ng)%ncid)
203 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
204
206 & 'zLanczos_inv', zlanczos_inv, &
207 & (/1,1/), (/ninner,ninner/), &
208 & ncid = err(ng)%ncid)
209 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
210
212 & 'zLanczos_err', zlanczos_err, &
213 & (/1,1/), (/ninner,ninner/), &
214 & ncid = err(ng)%ncid)
215 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
216
217
218
219 scale=1.0_dp
220 gtype=gfactor*r2dvar
221 status=nf_fwrite2d(ng, itlm, err(ng)%ncid, idfsur, &
222 & err(ng)%Vid(idfsur), &
223 & err(ng)%Rindex, gtype, &
224 & lbi, ubi, lbj, ubj, scale, &
225# ifdef MASKING
226 & grid(ng) % rmask, &
227# endif
228 & ocean(ng)% tl_zeta(:,:,kout))
229 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
230 IF (master) THEN
231 WRITE (stdout,20) trim(vname(1,idfsur)), err(ng)%Rindex
232 END IF
233 exit_flag=3
234 ioerror=status
235 RETURN
236 END IF
237
238# ifdef ADJUST_BOUNDARY
239
240
241
242 IF (any(lobc(:,isfsur,ng))) THEN
243 scale=1.0_dp
244 status=nf_fwrite2d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
245 & vname(1,idsbry(isfsur)), &
246 & err(ng)%Vid(idsbry(isfsur)), &
247 & err(ng)%Rindex, r2dvar, &
248 & lbij, ubij, nbrec(ng), scale, &
249 & boundary(ng) % tl_zeta_obc(lbij:,:,:, &
250 & kout))
251 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
252 IF (master) THEN
253 WRITE (stdout,20) trim(vname(1,idsbry(isfsur))), &
254 & err(ng)%Rindex
255 END IF
256 exit_flag=3
257 ioerror=status
258 RETURN
259 END IF
260 END IF
261# endif
262
263
264
265 scale=1.0_dp
266 gtype=gfactor*u2dvar
267 status=nf_fwrite2d(ng, itlm, err(ng)%ncid, idubar, &
268 & err(ng)%Vid(idubar), &
269 & err(ng)%Rindex, gtype, &
270 & lbi, ubi, lbj, ubj, scale, &
271# ifdef MASKING
272 & grid(ng) % umask_full, &
273# endif
274 & ocean(ng) % tl_ubar(:,:,kout))
275 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
276 IF (master) THEN
277 WRITE (stdout,20) trim(vname(1,idubar)), err(ng)%Rindex
278 END IF
279 exit_flag=3
280 ioerror=status
281 RETURN
282 END IF
283
284# ifdef ADJUST_BOUNDARY
285
286
287
288 IF (any(lobc(:,isubar,ng))) THEN
289 scale=1.0_dp
290 status=nf_fwrite2d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
291 & vname(1,idsbry(isubar)), &
292 & err(ng)%Vid(idsbry(isubar)), &
293 & err(ng)%Rindex, u2dvar, &
294 & lbij, ubij, nbrec(ng), scale, &
295 & boundary(ng) % tl_ubar_obc(lbij:,:,:, &
296 & kout))
297 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
298 IF (master) THEN
299 WRITE (stdout,20) trim(vname(1,idsbry(isubar))), &
300 & err(ng)%Rindex
301 END IF
302 exit_flag=3
303 ioerror=status
304 RETURN
305 END IF
306 END IF
307# endif
308
309
310
311 scale=1.0_dp
312 gtype=gfactor*v2dvar
313 status=nf_fwrite2d(ng, itlm, err(ng)%ncid, idvbar, &
314 & err(ng)%Vid(idvbar), &
315 & err(ng)%Rindex, gtype, &
316 & lbi, ubi, lbj, ubj, scale, &
317# ifdef MASKING
318 & grid(ng) % vmask_full, &
319# endif
320 & ocean(ng) % tl_vbar(:,:,kout))
321 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
322 IF (master) THEN
323 WRITE (stdout,20) trim(vname(1,idvbar)), err(ng)%Rindex
324 END IF
325 exit_flag=3
326 ioerror=status
327 RETURN
328 END IF
329
330# ifdef ADJUST_BOUNDARY
331
332
333
334 IF (any(lobc(:,isvbar,ng))) THEN
335 scale=1.0_dp
336 status=nf_fwrite2d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
337 & vname(1,idsbry(isvbar)), &
338 & err(ng)%Vid(idsbry(isvbar)), &
339 & err(ng)%Rindex, v2dvar, &
340 & lbij, ubij, nbrec(ng), scale, &
341 & boundary(ng) % tl_vbar_obc(lbij:,:,:, &
342 & kout))
343 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
344 IF (master) THEN
345 WRITE (stdout,20) trim(vname(1,idsbry(isvbar))), &
346 & err(ng)%Rindex
347 END IF
348 exit_flag=3
349 ioerror=status
350 RETURN
351 END IF
352 END IF
353# endif
354
355# ifdef SOLVE3D
356
357
358
359 scale=1.0_dp
360 gtype=gfactor*u3dvar
361 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, iduvel, &
362 & err(ng)%Vid(iduvel), &
363 & err(ng)%Rindex, gtype, &
364 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
365# ifdef MASKING
366 & grid(ng) % umask_full, &
367# endif
368 & ocean(ng) % tl_u(:,:,:,nout))
369 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
370 IF (master) THEN
371 WRITE (stdout,20) trim(vname(1,iduvel)), err(ng)%Rindex
372 END IF
373 exit_flag=3
374 ioerror=status
375 RETURN
376 END IF
377
378# ifdef ADJUST_BOUNDARY
379
380
381
382 IF (any(lobc(:,isuvel,ng))) THEN
383 scale=1.0_dp
384 status=nf_fwrite3d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
385 & vname(1,idsbry(isuvel)), &
386 & err(ng)%Vid(idsbry(isuvel)), &
387 & err(ng)%Rindex, u3dvar, &
388 & lbij, ubij, 1, n(ng), nbrec(ng), scale, &
389 & boundary(ng) % tl_u_obc(lbij:,:,:,:, &
390 & nout))
391 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
392 IF (master) THEN
393 WRITE (stdout,20) trim(vname(1,idsbry(isuvel))), &
394 & err(ng)%Rindex
395 END IF
396 exit_flag=3
397 ioerror=status
398 RETURN
399 END IF
400 END IF
401# endif
402
403
404
405 scale=1.0_dp
406 gtype=gfactor*v3dvar
407 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, idvvel, &
408 & err(ng)%Vid(idvvel), &
409 & err(ng)%Rindex, gtype, &
410 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
411# ifdef MASKING
412 & grid(ng) % vmask_full, &
413# endif
414 & ocean(ng) % tl_v(:,:,:,nout))
415 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
416 IF (master) THEN
417 WRITE (stdout,20) trim(vname(1,idvvel)), err(ng)%Rindex
418 END IF
419 exit_flag=3
420 ioerror=status
421 RETURN
422 END IF
423
424# ifdef ADJUST_BOUNDARY
425
426
427
428 IF (any(lobc(:,isvvel,ng))) THEN
429 scale=1.0_dp
430 status=nf_fwrite3d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
431 & vname(1,idsbry(isvvel)), &
432 & err(ng)%Vid(idsbry(isvvel)), &
433 & err(ng)%Rindex, v3dvar, &
434 & lbij, ubij, 1, n(ng), nbrec(ng), scale, &
435 & boundary(ng) % tl_v_obc(lbij:,:,:,:, &
436 & nout))
437 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
438 IF (master) THEN
439 WRITE (stdout,20) trim(vname(1,idsbry(isvvel))), &
440 & err(ng)%Rindex
441 END IF
442 exit_flag=3
443 ioerror=status
444 RETURN
445 END IF
446 END IF
447# endif
448
449
450
451 DO itrc=1,nt(ng)
452 scale=1.0_dp
453 gtype=gfactor*r3dvar
454 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, idtvar(itrc), &
455 & err(ng)%Tid(itrc), &
456 & err(ng)%Rindex, gtype, &
457 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
458# ifdef MASKING
459 & grid(ng) % rmask, &
460# endif
461 & ocean(ng) % tl_t(:,:,:,nout,itrc))
462 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
463 IF (master) THEN
464 WRITE (stdout,20) trim(vname(1,idtvar(itrc))), &
465 & err(ng)%Rindex
466 END IF
467 exit_flag=3
468 ioerror=status
469 RETURN
470 END IF
471 END DO
472
473# ifdef ADJUST_BOUNDARY
474
475
476
477 DO itrc=1,nt(ng)
478 IF (any(lobc(:,istvar(itrc),ng))) THEN
479 scale=1.0_dp
480 status=nf_fwrite3d_bry(ng, itlm, err(ng)%name, err(ng)%ncid, &
481 & vname(1,idsbry(istvar(itrc))), &
482 & err(ng)%Vid(idsbry(istvar(itrc))), &
483 & err(ng)%Rindex, r3dvar, &
484 & lbij, ubij, 1, n(ng), nbrec(ng), &
485 & scale, &
486 & boundary(ng) % tl_t_obc(lbij:,:,:,:, &
487 & nout,itrc))
488 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
489 IF (master) THEN
490 WRITE (stdout,20) trim(vname(1,idsbry(istvar(itrc)))), &
491 & err(ng)%Rindex
492 END IF
493 exit_flag=3
494 ioerror=status
495 RETURN
496 END IF
497 END IF
498 END DO
499# endif
500
501# ifdef ADJUST_STFLUX
502
503
504
505
506
507 DO itrc=1,nt(ng)
508 IF (lstflux(itrc,ng)) THEN
509 scale=1.0_dp
510 gtype=gfactor*r3dvar
511 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, idtsur(itrc), &
512 & err(ng)%Vid(idtsur(itrc)), &
513 & err(ng)%Rindex, gtype, &
514 & lbi, ubi, lbj, ubj, 1, nfrec(ng), scale, &
515# ifdef MASKING
516 & grid(ng) % rmask, &
517# endif
518 & forces(ng) % tl_tflux(:,:,:,kout,itrc))
519 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
520 IF (master) THEN
521 WRITE (stdout,20) trim(vname(1,idtsur(itrc))), &
522 & err(ng)%Rindex
523 END IF
524 exit_flag=3
525 ioerror=status
526 RETURN
527 END IF
528 END IF
529 END DO
530# endif
531# endif
532# ifdef ADJUST_WSTRESS
533
534
535
536
537
538 scale=1.0_dp
539 gtype=gfactor*u3dvar
540 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, idusms, &
541 & err(ng)%Vid(idusms), &
542 & err(ng)%Rindex, gtype, &
543 & lbi, ubi, lbj, ubj, 1, nfrec(ng), scale, &
544# ifdef MASKING
545 & grid(ng) % umask, &
546# endif
547 & forces(ng) % tl_ustr(:,:,:,kout))
548 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
549 IF (master) THEN
550 WRITE (stdout,20) trim(vname(1,idusms)), err(ng)%Rindex
551 END IF
552 exit_flag=3
553 ioerror=status
554 RETURN
555 END IF
556
557
558
559 scale=1.0_dp
560 gtype=gfactor*v3dvar
561 status=nf_fwrite3d(ng, itlm, err(ng)%ncid, idvsms, &
562 & err(ng)%Vid(idvsms), &
563 & err(ng)%Rindex, gtype, &
564 & lbi, ubi, lbj, ubj, 1, nfrec(ng), scale, &
565# ifdef MASKING
566 & grid(ng) % vmask, &
567# endif
568 & forces(ng) % tl_vstr(:,:,:,kout))
569 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
570 IF (master) THEN
571 WRITE (stdout,20) trim(vname(1,idvsms)), err(ng)%Rindex
572 END IF
573 exit_flag=3
574 ioerror=status
575 RETURN
576 END IF
577# endif
578
579
580
581
582
583
584 CALL netcdf_sync (ng, itlm, err(ng)%name, err(ng)%ncid)
585 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
586
587 10 FORMAT (2x,'WRT_ERROR_NF90 - writing error', t42, &
588# ifdef SOLVE3D
589# ifdef NESTING
590 & 'fields (Index=',i1,',',i1,') in record = ',i0,t92,i2.2)
591# else
592 & 'fields (Index=',i1,',',i1,') in record = ',i0)
593# endif
594# else
595# ifdef NESTING
596 & 'fields (Index=',i1,') in record = ',i0,t92,i2.2)
597# else
598 & 'fields (Index=',i1,') in record = ',i0)
599# endif
600# endif
601 20 FORMAT (/,' WRT_ERROR_NF90 - error while writing variable: ',a, &
602 & /,18x,'into 4DVar error NetCDF file for time record: ',i0)
603
604 RETURN
subroutine, public netcdf_sync(ng, model, ncname, ncid)