292
293
295
296
297
298 integer, intent(in) :: ng, tile, model, Iinp, Iout
299 integer, intent(in) :: LBi, UBi, LBj, UBj
300
301
302
303 integer :: itrc, status
304
305 real(dp) :: scale
306
307 character (len=*), parameter :: MyFile = &
308 & __FILE__", wrt_aug_imp_pio"
309
310 TYPE (IO_desc_t), pointer :: ioDesc
311
312# include "set_bounds.h"
313
314 sourcefile=myfile
315
316
317
318
319
320 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
321
322
323
324 IF (master) WRITE (stdout,20) iout, trim(tlf(ng)%name)
325
326
327
328 scale=1.0_dp
329 IF (tlf(ng)%pioVar(idztlf)%dkind.eq.pio_double) THEN
331 ELSE
333 END IF
334
335 status=nf_fwrite2d(ng, model, tlf(ng)%pioFile, idztlf, &
336 & tlf(ng)%pioVar(idztlf), iout, &
337 & iodesc, &
338 & lbi, ubi, lbj, ubj, scale, &
339# ifdef MASKING
340 & grid(ng) % rmask, &
341# endif
342 & ocean(ng) % tl_zeta(:,:,iinp))
343 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
344 IF (master) THEN
345 WRITE (stdout,20) trim(vname(1,idztlf)), iout, &
346 & trim(tlf(ng)%name)
347 END IF
348 exit_flag=3
349 ioerror=status
350 RETURN
351 END IF
352
353# ifndef SOLVE3D
354
355
356
357 scale=1.0_dp
358 IF (tlf(ng)%pioVar(idubtf)%dkind.eq.pio_double) THEN
360 ELSE
362 END IF
363
364 status=nf_fwrite2d(ng, model, tlf(ng)%pioFile, idubtf, &
365 & tlf(ng)%pioVar(idubtf), iout, &
366 & iodesc, &
367 & lbi, ubi, lbj, ubj, scale, &
368# ifdef MASKING
369 & grid(ng) % umask_full, &
370# endif
371 & ocean(ng) % tl_ubar(:,:,iinp))
372 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
373 IF (master) THEN
374 WRITE (stdout,20) trim(vname(1,idubtf)), iout, &
375 & trim(tlf(ng)%name)
376 END IF
377 exit_flag=3
378 ioerror=status
379 RETURN
380 END IF
381
382
383
384 scale=1.0_dp
385 IF (tlf(ng)%pioVar(idvbtf)%dkind.eq.pio_double) THEN
387 ELSE
389 END IF
390
391 status=nf_fwrite2d(ng, model, tlf(ng)%pioFile, idvbtf, &
392 & tlf(ng)%pioVar(idvbtf), iout, &
393 & iodesc, &
394 & lbi, ubi, lbj, ubj, scale, &
395# ifdef MASKING
396 & grid(ng) % vmask_full, &
397# endif
398 & ocean(ng) % tl_vbar(:,:,iinp))
399 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
400 IF (master) THEN
401 WRITE (stdout,20) trim(vname(1,idvbtf)), iout, &
402 & trim(tlf(ng)%name)
403 END IF
404 exit_flag=3
405 ioerror=status
406 RETURN
407 END IF
408# endif
409# ifdef SOLVE3D
410
411
412
413 scale=1.0_dp
414 IF (tlf(ng)%pioVar(idutlf)%dkind.eq.pio_double) THEN
416 ELSE
418 END IF
419
420 status=nf_fwrite3d(ng, model, tlf(ng)%pioFile, idutlf, &
421 & tlf(ng)%pioVar(idutlf), iout, &
422 & iodesc, &
423 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
424# ifdef MASKING
425 & grid(ng) % umask_full, &
426# endif
427 & ocean(ng) % tl_u(:,:,:,iinp))
428 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
429 IF (master) THEN
430 WRITE (stdout,20) trim(vname(1,idutlf)), iout, &
431 & trim(tlf(ng)%name)
432 END IF
433 exit_flag=3
434 ioerror=status
435 RETURN
436 END IF
437
438
439
440 scale=1.0_dp
441 IF (tlf(ng)%pioVar(idvtlf)%dkind.eq.pio_double) THEN
443 ELSE
445 END IF
446
447 status=nf_fwrite3d(ng, model, tlf(ng)%pioFile, idvtlf, &
448 & tlf(ng)%pioVar(idvtlf), iout, &
449 & iodesc, &
450 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
451# ifdef MASKING
452 & grid(ng) % vmask_full, &
453# endif
454 & ocean(ng) % tl_v(:,:,:,iinp))
455 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
456 IF (master) THEN
457 WRITE (stdout,20) trim(vname(1,idvtlf)), iout, &
458 & trim(tlf(ng)%name)
459 END IF
460 exit_flag=3
461 ioerror=status
462 RETURN
463 END IF
464
465
466
467 DO itrc=1,nt(ng)
468 scale=1.0_dp
469 IF (tlf(ng)%pioTrc(itrc)%dkind.eq.pio_double) THEN
471 ELSE
473 END IF
474
475 status=nf_fwrite3d(ng, model, tlf(ng)%pioFile, idttlf(itrc), &
476 & tlf(ng)%pioTrc(itrc), iout, &
477 & iodesc, &
478 & lbi, ubi, lbj, ubj, 1, n(ng), scale, &
479# ifdef MASKING
480 & grid(ng) % rmask_full, &
481# endif
482 & ocean(ng) % tl_t(:,:,:,iinp,itrc))
483 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
484 IF (master) THEN
485 WRITE (stdout,20) trim(vname(1,idttlf(itrc))), iout, &
486 & trim(tlf(ng)%name)
487 END IF
488 exit_flag=3
489 ioerror=status
490 RETURN
491 END IF
492 END DO
493# endif
494
495
496
497
498
499
501 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
502
503 10 FORMAT (2x,'WRT_AUG_IMP_PIO - writing augmented adjoint', &
504 & ' impulses, record: ',i0,/,22x,'file: ',a)
505 20 FORMAT (/,' WRT_AUG_IMP_PIO - error while writing variable: ',a, &
506 & 2x,'at time record = ',i0, &
507 & /,20x,'into NetCDF file: ',a)
508
509 RETURN
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
subroutine, public pio_netcdf_sync(ng, model, ncname, piofile)
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar