2424
2425
2427
2428
2429
2430 integer, intent(in) :: ng
2431
2432
2433
2434 logical, dimension(NV) :: got_var(NV)
2435 logical :: foundAtt(2), foundit
2436
2437 integer, parameter :: Natt = 25
2438
2439 integer :: iterDim, recordDim, surveyDim, threeDim
2440 integer :: datumDim, datumDimP1
2441 integer :: NinnerDim, NinnerDimP1, NinnerDimP2
2442 integer :: NouterDim, NouterDimP1
2443# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
2444 integer :: RetaDim, RxiDim
2445# endif
2446 integer :: stateDim, stateDimP1
2447 integer :: Fcount
2448
2449 integer :: i, j, lstr, nvatt, nvdim, status, varid, vindex
2450 integer :: OBSncid
2451 integer :: vardim(3)
2452
2453 real(dp) :: Tstart, Tfinal
2454 real(r8) :: Aval(6)
2455
2456 character (len=22 ) :: str_date, end_date
2457 character (len=40 ) :: Aname, AttName(2)
2458 character (len=80 ) :: string
2459 character (len=256) :: ncname
2460 character (len=2048) :: AttValue(2)
2461 character (len=MaxLen) :: Vinfo(Natt)
2462
2463 character (len=*), parameter :: MyFile = &
2464 & __FILE__//", def_mod_pio"
2465
2466 TYPE (File_desc_t) :: OBSpioFile
2467 TYPE (Var_desc_t) :: VarDesc
2468
2469 sourcefile=myfile
2470
2471
2472
2473
2474
2475 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2476 ncname=dav(ng)%name
2477
2478 IF (master) THEN
2479 IF (ldefmod(ng)) THEN
2480 WRITE (stdout,10) ng, trim(ncname)
2481 ELSE
2482 WRITE (stdout,20) ng, trim(ncname)
2483 END IF
2484 END IF
2485
2486
2487
2488 DO i=1,natt
2489 DO j=1,len(vinfo(1))
2490 vinfo(i)(j:j)=' '
2491 END DO
2492 END DO
2493 DO i=1,6
2494 aval(i)=0.0_r8
2495 END DO
2496
2497
2498
2499
2500
2501 define : IF (ldefmod(ng)) THEN
2502
2503
2504
2505 IF (obs(ng)%pioFile%fh.eq.-1) THEN
2507 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
2508 IF (master) WRITE (stdout,30) trim(obs(ng)%name)
2509 RETURN
2510 END IF
2511 ELSE
2512 obspiofile=obs(ng)%pioFile
2513 END IF
2514
2515
2516
2518 & piofile = obspiofile)
2519 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2520
2521
2522
2523
2524 attname(1)='state_variables'
2525 attname(2)='obs_provenance'
2526
2528 & attname, attvalue, foundatt, &
2529 & piofile = obspiofile)
2530
2531
2532
2534 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
2535 IF (master) WRITE (stdout,40) trim(ncname)
2536 RETURN
2537 END IF
2538
2539
2540
2541
2542
2543# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
2544 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'xi_rho', &
2545 & iobounds(ng)%xi_rho, rxidim)
2546 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2547
2548 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'eta_rho', &
2549 & iobounds(ng)%eta_rho, retadim)
2550 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2551# endif
2552
2553 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'record', &
2554 & 2, recorddim)
2555 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2556
2557 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'survey', &
2558 & nsurvey(ng), surveydim)
2559 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2560
2561 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'state_var', &
2562 & nobsvar(ng), statedim)
2563 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2564
2565 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'cost_var', &
2566 & nobsvar(ng)+1, statedimp1)
2567 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2568
2569 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'datum', &
2570 & ndatum(ng), datumdim)
2571 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2572
2573# ifdef FOUR_DVAR
2574# ifdef RPCG
2575 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'datum+1', &
2576 & ndatum(ng)+1, datumdimp1)
2577 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2578# endif
2579 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'Nouter', &
2580 & nouter, nouterdim)
2581 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2582
2583 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'Nouter+1', &
2584 & nouter+1, nouterdimp1)
2585 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2586
2587 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'Ninner', &
2588 & ninner, ninnerdim)
2589 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2590
2591 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'Ninner+1', &
2592 & ninner+1, ninnerdimp1)
2593 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2594
2595# ifdef SP4DVAR
2596 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'Ninner+2', &
2597 & ninner+2, ninnerdimp2)
2598 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2599# endif
2600
2601# ifdef I4DVAR
2602 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'three', &
2603 & 3, threedim)
2604 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2605# endif
2606
2607# if defined I4DVAR || defined BACKGROUND
2608 status=def_dim(ng, inlm, dav(ng)%pioFile, ncname, 'iteration', &
2609 & pio_unlimited, iterdim)
2610 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2611# endif
2612# endif
2613
2614
2615
2616
2617
2618
2619
2620 IF (exit_flag.eq.noerror) THEN
2621 string='ROMS 4D-Var output observation processing file'
2622 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2623 & 'type', trim(string))
2624 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2625 IF (master) WRITE (stdout,50) 'type', trim(ncname)
2626 exit_flag=3
2627 ioerror=status
2628 END IF
2629 END IF
2630
2631
2632
2633 IF (exit_flag.eq.noerror) THEN
2634# if defined ARRAY_MODES
2635 string=uppercase('array_modes')
2636# elif defined SPLIT_I4DVAR
2637 string=uppercase('split_i4dvar')
2638# elif defined I4DVAR
2639 string=uppercase('i4dvar')
2640# elif defined I4DVAR_ANA_SENSITIVITY
2641 string=uppercase('i4dvar_ana_sensitivity')
2642# elif defined SPLIT_RBL4DVAR
2643 string=uppercase('split_rbl4dvar')
2644# elif defined RBL4DVAR
2645 string=uppercase('rbl4dvar')
2646# elif defined RBL4DVAR_ANA_SENSITIVITY
2647 string=uppercase('rbl4dvar_ana_sensitivity')
2648# elif defined RBL4DVAR_FCT_SENSITIVITY
2649 string=uppercase('rbl4dvar_fct_sensitivity')
2650# elif defined SPLIT_R4DVAR
2651 string=uppercase('split_r4dvar')
2652# elif defined R4DVAR
2653 string=uppercase('r4dvar')
2654# elif defined R4DVAR_ANA_SENSITIVITY
2655 string=uppercase('r4dvar_ana_sensitivity')
2656# elif defined TL_RBL4DVAR
2657 string=uppercase('tl_rbl4dvar')
2658# elif defined TL_R4DVAR
2659 string=uppercase('tl_r4dvar')
2660# elif defined VERIFICATION
2661 string=uppercase('verification')
2662# else
2663 string=uppercase('four_dvar')
2664# endif
2665 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2666 & 'Algorithm', trim(string))
2667 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2668 IF (master) WRITE (stdout,50) 'type', trim(ncname)
2669 exit_flag=3
2670 ioerror=status
2671 END IF
2672 END IF
2673
2674
2675
2676 IF (initime(ng).lt.0.0_dp) THEN
2677 tstart=time(ng)+dt(ng)
2678 ELSE
2679 tstart=initime(ng)
2680 END IF
2681 tfinal=tstart+ntimes(ng)*dt(ng)
2682 CALL time_string (tstart, str_date)
2683 CALL time_string (tfinal, end_date)
2684
2685 IF (exit_flag.eq.noerror) THEN
2686 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2687 & 'str_day', tstart*sec2day)
2688 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2689 IF (master) WRITE (stdout,50) 'str_day', trim(ncname)
2690 exit_flag=3
2691 ioerror=status
2692 END IF
2693 END IF
2694
2695 IF (exit_flag.eq.noerror) THEN
2696 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2697 & 'end_day', tfinal*sec2day)
2698 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2699 IF (master) WRITE (stdout,50) 'end_day', trim(ncname)
2700 exit_flag=3
2701 ioerror=status
2702 END IF
2703 END IF
2704
2705 IF (exit_flag.eq.noerror) THEN
2706 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2707 & 'str_date', str_date)
2708 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2709 IF (master) WRITE (stdout,50) 'str_date', trim(ncname)
2710 exit_flag=3
2711 ioerror=status
2712 END IF
2713 END IF
2714
2715 IF (exit_flag.eq.noerror) THEN
2716 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2717 & 'end_date', end_date)
2718 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2719 IF (master) WRITE (stdout,50) 'end_date', trim(ncname)
2720 exit_flag=3
2721 ioerror=status
2722 END IF
2723 END IF
2724
2725
2726
2727 IF (exit_flag.eq.noerror) THEN
2728 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2729 & 'obs_file', trim(obs(ng)%name))
2730 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2731 IF (master) WRITE (stdout,50) 'obs_file', trim(ncname)
2732 exit_flag=3
2733 ioerror=status
2734 END IF
2735 END IF
2736
2737
2738
2739
2740 IF (exit_flag.eq.noerror) THEN
2741 IF (foundatt(1)) THEN
2743 & 'state_variables', &
2744 & trim(obs(ng)%name), &
2745 & obspiofile, &
2746 & pio_global, &
2747 & trim(dav(ng)%name), &
2748 & dav(ng)%pioFile, &
2749 & pio_global)
2750 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2751 IF (master) WRITE (stdout,50) 'state_variables', &
2752 & trim(ncname)
2753 exit_flag=3
2754 ioerror=status
2755 END IF
2756 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2757 END IF
2758 END IF
2759
2760
2761
2762
2763 IF (exit_flag.eq.noerror) THEN
2764 IF (foundatt(2)) THEN
2766 & 'obs_provenance', &
2767 & trim(obs(ng)%name), &
2768 & obspiofile, &
2769 & pio_global, &
2770 & trim(dav(ng)%name), &
2771 & dav(ng)%pioFile, &
2772 & pio_global)
2773 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2774 IF (master) WRITE (stdout,50) 'obs_provenance', &
2775 & trim(ncname)
2776 exit_flag=3
2777 ioerror=status
2778 END IF
2779 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2780 END IF
2781 END IF
2782
2783
2784
2785 IF (exit_flag.eq.noerror) THEN
2786 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2787 & 'svn_url', trim(svn_url))
2788 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2789 IF (master) WRITE (stdout,50) 'svn_url', trim(ncname)
2790 exit_flag=3
2791 ioerror=status
2792 END IF
2793 END IF
2794
2795# ifndef DEBUGGING
2796# ifdef SVN_REV
2797 IF (exit_flag.eq.noerror) THEN
2798 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2799 & 'svn_rev', trim(svn_rev))
2800 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2801 IF (master) WRITE (stdout,50) 'svn_rev', trim(ncname)
2802 exit_flag=3
2803 ioerror=status
2804 END IF
2805 END IF
2806# endif
2807
2808# ifdef ROOT_DIR
2809 IF (exit_flag.eq.noerror) THEN
2810 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2811 & 'code_dir', trim(rdir))
2812 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2813 IF (master) WRITE (stdout,50) 'code_dir', trim(ncname)
2814 exit_flag=3
2815 ioerror=status
2816 END IF
2817 END IF
2818# endif
2819
2820# ifdef HEADER_DIR
2821 IF (exit_flag.eq.noerror) THEN
2822 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2823 & 'header_dir', trim(hdir))
2824 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2825 IF (master) WRITE (stdout,50) 'header_dir', trim(ncname)
2826 exit_flag=3
2827 ioerror=status
2828 END IF
2829 END IF
2830# endif
2831
2832# ifdef ROMS_HEADER
2833 IF (exit_flag.eq.noerror) THEN
2834 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2835 & 'header_file', trim(hfile))
2836 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2837 IF (master) WRITE (stdout,50) 'header_file', trim(ncname)
2838 exit_flag=3
2839 ioerror=status
2840 END IF
2841 END IF
2842# endif
2843
2844
2845
2846 IF (exit_flag.eq.noerror) THEN
2847 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2848 & 'os', trim(my_os))
2849 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2850 IF (master) WRITE (stdout,50) 'os', trim(ncname)
2851 exit_flag=3
2852 ioerror=status
2853 END IF
2854 END IF
2855
2856 IF (exit_flag.eq.noerror) THEN
2857 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2858 & 'cpu', trim(my_cpu))
2859 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2860 IF (master) WRITE (stdout,50) 'cpu', trim(ncname)
2861 exit_flag=3
2862 ioerror=status
2863 END IF
2864 END IF
2865
2866 IF (exit_flag.eq.noerror) THEN
2867 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2868 & 'compiler_system', trim(my_fort))
2869 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2870 IF (master) WRITE (stdout,50) 'compiler_system', &
2871 & trim(ncname)
2872 exit_flag=3
2873 ioerror=status
2874 END IF
2875 END IF
2876
2877 IF (exit_flag.eq.noerror) THEN
2878 status=pio_put_att(dav(ng)%pioFile,pio_global, &
2879 & 'compiler_command', trim(my_fc))
2880 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2881 IF (master) WRITE (stdout,50) 'compiler_command', &
2882 & trim(ncname)
2883 exit_flag=3
2884 ioerror=status
2885 END IF
2886 END IF
2887
2888 IF (exit_flag.eq.noerror) THEN
2889 lstr=index(my_fflags, 'free')-2
2890 IF (lstr.le.0) lstr=len_trim(my_fflags)
2891 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2892 & 'compiler_flags', my_fflags(1:lstr))
2893 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2894 IF (master) WRITE (stdout,50) 'compiler_flags', trim(ncname)
2895 exit_flag=3
2896 ioerror=status
2897 END IF
2898 END IF
2899
2900
2901
2902 IF (exit_flag.eq.noerror) THEN
2903 IF (len_trim(date_str).gt.0) THEN
2904 WRITE (history,'(a,1x,a,", ",a)') 'ROMS, Version', &
2905 & trim(version), &
2906 & trim(date_str)
2907 ELSE
2908 WRITE (history,'(a,1x,a)') 'ROMS, Version', &
2909 & trim(version)
2910 END IF
2911 status=pio_put_att(dav(ng)%pioFile, pio_global, &
2912 & 'history', trim(history))
2913 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
2914 IF (master) WRITE (stdout,50) 'history', trim(ncname)
2915 exit_flag=3
2916 ioerror=status
2917 END IF
2918 END IF
2919# endif
2920 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2921
2922
2923
2924
2925
2926# if defined I4DVAR || defined WEAK_CONSTRAINT
2927
2928
2929
2930 vinfo( 1)='outer'
2931 vinfo( 2)='outer loop counter'
2932
2933 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
2934 & 1, (/0/), aval, vinfo, ncname, &
2935 & setparaccess = .false.)
2936 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2937
2938 vinfo( 1)='inner'
2939 vinfo( 2)='inner loop counter'
2940
2941 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
2942 & 1, (/0/), aval, vinfo, ncname, &
2943 & setparaccess = .false.)
2944 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2945# endif
2946# if defined ARRAY_MODES || \
2947 defined i4dvar_ana_sensitivity || \
2948 defined rbl4dvar_ana_sensitivity || \
2949 defined rbl4dvar_fct_sensitivity || \
2950 defined r4dvar_ana_sensitivity
2951
2952
2953
2954 vinfo( 1)='Nimpact'
2955 vinfo( 2)='Observations impact/sensitivity outer loop to use'
2956
2957 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
2958 & 1, (/0/), aval, vinfo, ncname, &
2959 & setparaccess = .false.)
2960 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2961# endif
2962
2963
2964
2965 vinfo( 1)='Nobs'
2966 vinfo( 2)='number of observations with the same survey time'
2967
2968 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
2969 & 1, (/surveydim/), aval, vinfo, ncname, &
2970 & setparaccess = .false.)
2971 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2972
2973# ifndef I4DVAR_ANA_SENSITIVITY
2974
2975 vinfo( 1)='Nused_obs'
2976 vinfo( 2)='Number of usable observations'
2977
2978 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
2979 & 1, (/statedim/), aval, vinfo, ncname, &
2980 & setparaccess = .false.)
2981 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2982
2983 vinfo( 1)='obs_mean'
2984 vinfo( 2)='observations mean'
2985
2986 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
2987 & 1, (/statedim/), aval, vinfo, ncname, &
2988 & setparaccess = .false.)
2989 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2990
2991 vinfo( 1)='obs_std'
2992 vinfo( 2)='observations standard deviation'
2993
2994 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
2995 & 1, (/statedim/), aval, vinfo, ncname, &
2996 & setparaccess = .false.)
2997 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
2998
2999 vinfo( 1)='model_mean'
3000 vinfo( 2)='model mean'
3001
3002 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3003 & 1, (/statedim/), aval, vinfo, ncname, &
3004 & setparaccess = .false.)
3005 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3006
3007 vinfo( 1)='model_std'
3008 vinfo( 2)='model standard deviation'
3009
3010 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3011 & 1, (/statedim/), aval, vinfo, ncname, &
3012 & setparaccess = .false.)
3013 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3014
3015 vinfo( 1)='model_bias'
3016 vinfo( 2)='model bias'
3017
3018 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3019 & 1, (/statedim/), aval, vinfo,ncname, &
3020 & setparaccess = .false.)
3021 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3022
3023 vinfo( 1)='SDE'
3024 vinfo( 2)='model-observations standard deviation error'
3025
3026 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3027 & 1, (/statedim/), aval, vinfo, ncname, &
3028 & setparaccess = .false.)
3029 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3030
3031 vinfo( 1)='CC'
3032 vinfo( 2)='model-observations cross-correlation'
3033
3034 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3035 & 1, (/statedim/), aval, vinfo, ncname, &
3036 & setparaccess = .false.)
3037 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3038
3039 vinfo( 1)='MSE'
3040 vinfo( 2)='model-observations mean squared error'
3041
3042 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3043 & 1, (/statedim/), aval, vinfo, ncname, &
3044 & setparaccess = .false.)
3045 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3046# endif
3047# if defined I4DVAR
3048
3049
3050
3051 vinfo( 1)='nConvRitz'
3052 vinfo( 2)='number of converged Ritz eigenvalues'
3053
3054 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
3055 & 1, (/0/), aval, vinfo, ncname, &
3056 & setparaccess = .false.)
3057 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3058
3059# elif defined WEAK_CONSTRAINT
3060
3061
3062
3063 vinfo( 1)='nConvRitz'
3064 vinfo( 2)='number of converged Ritz eigenvalues'
3065
3066 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
3067 & 1, (/nouterdim/), aval, vinfo, ncname, &
3068 & setparaccess = .false.)
3069 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3070# endif
3071# if defined WEAK_CONSTRAINT && \
3072 (defined array_modes || defined clipping)
3073
3074
3075
3076 vinfo( 1)='Nvct'
3077# if defined ARRAY_MODES
3078 vinfo( 2)='representer matrix array mode eigenvector '// &
3079 & 'processed'
3080# elif defined CLIPPING
3081 vinfo( 2)='representer matric cut-off eigenvectors'
3082# endif
3083 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc, pio_int, &
3084 & 1, (/0/), aval, vinfo, ncname, &
3085 & setparaccess = .false.)
3086 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3087# endif
3088# if defined I4DVAR
3089
3090
3091
3092 vinfo( 1)='Ritz'
3093 vinfo( 2)='converged Ritz eigenvalues to approximate Hessian'
3094
3095 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3096 & 1, (/ninnerdim/), aval, vinfo, ncname, &
3097 & setparaccess = .false.)
3098 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3099
3100# elif defined WEAK_CONSTRAINT
3101
3102
3103
3104 vinfo( 1)='Ritz'
3105 vinfo( 2)='converged Ritz eigenvalues to approximate Hessian'
3106 vardim(1)=ninnerdim
3107 vardim(2)=nouterdim
3108 vinfo(24)='_FillValue'
3109 aval(6)=spval
3110
3111 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3112 & 2, vardim, aval, vinfo, ncname, &
3113 & setparaccess = .false.)
3114 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3115# endif
3116# if defined I4DVAR || defined WEAK_CONSTRAINT
3117
3118
3119
3120 vinfo( 1)='cg_beta'
3121 vinfo( 2)='conjugate gradient beta coefficient'
3122 vardim(1)=ninnerdimp1
3123 vardim(2)=nouterdim
3124 vinfo(24)='_FillValue'
3125 aval(6)=spval
3126
3127 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3128 & 2, vardim, aval, vinfo, ncname, &
3129 & setparaccess = .false.)
3130 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3131# endif
3132# if defined I4DVAR || defined WEAK_CONSTRAINT
3133
3134
3135
3136 vinfo( 1)='cg_delta'
3137 vinfo( 2)='Lanczos algorithm delta coefficient'
3138 vardim(1)=ninnerdim
3139 vardim(2)=nouterdim
3140 vinfo(24)='_FillValue'
3141 aval(6)=spval
3142
3143 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3144 & 2, vardim, aval, vinfo, ncname, &
3145 & setparaccess = .false.)
3146 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3147
3148# ifdef WEAK_CONSTRAINT
3149
3150 vinfo( 1)='cg_dla'
3151 vinfo( 2)='normalization coefficients for Lanczos vectors'
3152 vardim(1)=ninnerdim
3153 vardim(2)=nouterdim
3154 vinfo(24)='_FillValue'
3155 aval(6)=spval
3156
3157 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3158 & 2, vardim, aval, vinfo, ncname, &
3159 & setparaccess = .false.)
3160 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3161# endif
3162# ifdef I4DVAR
3163
3164 vinfo( 1)='cg_gamma'
3165 vinfo( 2)='Lanczos algorithm gamma coefficient'
3166 vardim(1)=ninnerdim
3167 vardim(2)=nouterdim
3168 vinfo(24)='_FillValue'
3169 aval(6)=spval
3170
3171 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3172 & 2, vardim, aval, vinfo, ncname, &
3173 & setparaccess = .false.)
3174 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3175# endif
3176# endif
3177# if defined I4DVAR
3178
3179
3180
3181 vinfo( 1)='cg_Gnorm'
3182 vinfo( 2)='initial gradient normalization factor'
3183
3184 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3185 & 1, (/nouterdim/), aval, vinfo, ncname, &
3186 & setparaccess = .false.)
3187 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3188
3189# elif defined WEAK_CONSTRAINT
3190
3191
3192
3193 vinfo( 1)='cg_Gnorm_v'
3194 vinfo( 2)='initial gradient normalization factor, v-space'
3195 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3196 & 1, (/nouterdim/), aval, vinfo, ncname, &
3197 & setparaccess = .false.)
3198 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3199
3200 vinfo( 1)='cg_Gnorm_y'
3201 vinfo( 2)='initial gradient normalization factor, y-space'
3202 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3203 & 1, (/nouterdim/), aval, vinfo, ncname, &
3204 & setparaccess = .false.)
3205 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3206# endif
3207# if defined I4DVAR || defined WEAK_CONSTRAINT
3208
3209
3210
3211 vinfo( 1)='cg_QG'
3212 vinfo( 2)='Lanczos vector normalization factor'
3213 vardim(1)=ninnerdimp1
3214 vardim(2)=nouterdim
3215 vinfo(24)='_FillValue'
3216 aval(6)=spval
3217
3218 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3219 & 2, vardim, aval, vinfo, ncname, &
3220 & setparaccess = .false.)
3221 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3222# endif
3223# if defined I4DVAR
3224
3225
3226
3227 vinfo( 1)='cg_Greduc'
3228 vinfo( 2)='reduction in the gradient norm'
3229 vardim(1)=ninnerdim
3230 vardim(2)=nouterdim
3231 vinfo(24)='_FillValue'
3232 aval(6)=spval
3233
3234 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3235 & 2, vardim, aval, vinfo, ncname, &
3236 & setparaccess = .false.)
3237 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3238
3239# elif defined WEAK_CONSTRAINT
3240
3241
3242
3243 vinfo( 1)='cg_Greduc_v'
3244 vinfo( 2)='reduction in the gradient norm, v-space'
3245 vardim(1)=ninnerdim
3246 vardim(2)=nouterdim
3247 vinfo(24)='_FillValue'
3248 aval(6)=spval
3249
3250 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3251 & 2, vardim, aval, vinfo, ncname, &
3252 & setparaccess = .false.)
3253 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3254
3255 vinfo( 1)='cg_Greduc_y'
3256 vinfo( 2)='reduction in the gradient norm, y-space'
3257 vardim(1)=ninnerdim
3258 vardim(2)=nouterdim
3259 vinfo(24)='_FillValue'
3260 aval(6)=spval
3261
3262 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3263 & 2, vardim, aval, vinfo, ncname, &
3264 & setparaccess = .false.)
3265 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3266# endif
3267# if defined I4DVAR
3268
3269
3270
3271 vinfo( 1)='cg_Tmatrix'
3272 vinfo( 2)='Lanczos recurrence tridiagonal matrix'
3273 vardim(1)=ninnerdim
3274 vardim(2)=threedim
3275
3276 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3277 & 2, vardim, aval, vinfo, ncname, &
3278 & setparaccess = .false.)
3279 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3280
3281
3282
3283 vinfo( 1)='cg_zu'
3284 vinfo( 2)='tridiagonal matrix, upper diagonal elements'
3285 vardim(1)=ninnerdim
3286 vardim(2)=nouterdim
3287 vinfo(24)='_FillValue'
3288 aval(6)=spval
3289
3290 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3291 & 2, vardim, aval, vinfo, ncname, &
3292 & setparaccess = .false.)
3293 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3294# endif
3295# if defined I4DVAR || defined WEAK_CONSTRAINT
3296
3297
3298
3299 vinfo( 1)='cg_Ritz'
3300 vinfo( 2)='Lanczos recurrence eigenvalues'
3301 vardim(1)=ninnerdim
3302 vardim(2)=nouterdim
3303 vinfo(24)='_FillValue'
3304 aval(6)=spval
3305
3306 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3307 & 2, vardim, aval, vinfo, ncname, &
3308 & setparaccess = .false.)
3309 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3310
3311
3312
3313 vinfo( 1)='cg_RitzErr'
3314 vinfo( 2)='Ritz eigenvalues relative error'
3315 vardim(1)=ninnerdim
3316 vardim(2)=nouterdim
3317 vinfo(24)='_FillValue'
3318 aval(6)=spval
3319
3320 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3321 & 2, vardim, aval, vinfo, ncname, &
3322 & setparaccess = .false.)
3323 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3324# endif
3325# if defined I4DVAR
3326
3327
3328
3329 vinfo( 1)='cg_zv'
3330 vinfo( 2)='Lanczos recurrence eigenvectors'
3331 vardim(1)=ninnerdim
3332 vardim(2)=ninnerdim
3333 vinfo(24)='_FillValue'
3334 aval(6)=spval
3335
3336 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3337 & 2, vardim, aval, vinfo, ncname, &
3338 & setparaccess = .false.)
3339 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3340
3341# elif defined WEAK_CONSTRAINT
3342
3343
3344
3345 vinfo( 1)='cg_zv'
3346 vinfo( 2)='Lanczos recurrence eigenvectors'
3347 vardim(1)=ninnerdim
3348 vardim(2)=ninnerdim
3349 vardim(3)=nouterdim
3350 vinfo(24)='_FillValue'
3351 aval(6)=spval
3352
3353 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3354 & 3, vardim, aval, vinfo, ncname, &
3355 & setfillval = .false., &
3356 & setparaccess = .false.)
3357 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3358# endif
3359# if defined RBL4DVAR || \
3360 defined rbl4dvar_ana_sensitivity || \
3361 defined rbl4dvar_fct_sensitivity || \
3362 defined sp4dvar || \
3363 defined tl_rbl4dvar
3364
3365
3366
3367 vinfo( 1)='NL_iDataPenalty'
3368 vinfo( 2)='nonlinear model initial data penalty function'
3369
3370 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3371 & 1, (/statedimp1/), aval, vinfo, ncname, &
3372 & setparaccess = .false.)
3373 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3374
3375 vinfo( 1)='NL_fDataPenalty'
3376 vinfo( 2)='nonlinear model final data penalty function'
3377 vardim(1)=statedimp1
3378 vardim(2)=nouterdim
3379
3380 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3381 & 2, vardim, aval, vinfo, ncname, &
3382 & setparaccess = .false.)
3383 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3384# endif
3385# if (defined RECOMPUTE_4DVAR && \
3386 (defined array_modes || defined clipping)) || \
3387 defined r4dvar_ana_sensitivity || defined r4dvar || \
3388 defined tl_r4dvar
3389
3390
3391
3392 vinfo( 1)='RP_iDataPenalty'
3393 vinfo( 2)='representer model initial data penalty function'
3394 vardim(1)=statedimp1
3395 vardim(2)=nouterdim
3396
3397 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3398 & 2, vardim, aval, vinfo, ncname, &
3399 & setparaccess = .false.)
3400 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3401
3402 vinfo( 1)='RP_fDataPenalty'
3403 vinfo( 2)='representer model final data penalty function'
3404 vardim(1)=statedimp1
3405 vardim(2)=nouterdim
3406
3407 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3408 & 2, vardim, aval, vinfo, ncname, &
3409 & setparaccess = .false.)
3410 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3411# endif
3412# ifdef WEAK_CONSTRAINT
3413
3414
3415
3416 vinfo( 1)='Jf'
3417 vinfo( 2)='first guess initial data misfit'
3418 vardim(1)=ninnerdimp1
3419 vardim(2)=nouterdim
3420 vinfo(24)='_FillValue'
3421 aval(6)=spval
3422
3423 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3424 & 2, vardim, aval, vinfo, ncname, &
3425 & setparaccess = .false.)
3426 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3427
3428
3429
3430 vinfo( 1)='Jdata'
3431 vinfo( 2)='state estimate data misfit'
3432 vardim(1)=ninnerdimp1
3433 vardim(2)=nouterdim
3434 vinfo(24)='_FillValue'
3435 aval(6)=spval
3436
3437 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3438 & 2, vardim, aval, vinfo, ncname, &
3439 & setparaccess = .false.)
3440 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3441
3442# ifndef SP4DVAR
3443
3444
3445
3446 vinfo( 1)='Jmod'
3447 vinfo( 2)='model penalty function'
3448 vardim(1)=ninnerdimp1
3449 vardim(2)=nouterdim
3450 vinfo(24)='_FillValue'
3451 aval(6)=spval
3452
3453 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3454 & 2, vardim, aval, vinfo, ncname, &
3455 & setparaccess = .false.)
3456 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3457
3458
3459
3460 vinfo( 1)='Jopt'
3461 vinfo( 2)='optimal penalty function'
3462 vardim(1)=ninnerdimp1
3463 vardim(2)=nouterdim
3464 vinfo(24)='_FillValue'
3465 aval(6)=spval
3466
3467 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3468 & 2, vardim, aval, vinfo, ncname, &
3469 & setparaccess = .false.)
3470 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3471
3472
3473
3474 vinfo( 1)='Jb'
3475 vinfo( 2)='actual model penalty function'
3476 vardim(1)=ninnerdimp1
3477 vardim(2)=nouterdim
3478 vinfo(24)='_FillValue'
3479 aval(6)=spval
3480
3481 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3482 & 2, vardim, aval, vinfo, ncname, &
3483 & setparaccess = .false.)
3484 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3485
3486
3487
3488 vinfo( 1)='Jobs'
3489 vinfo( 2)='actual data penalty function'
3490 vardim(1)=ninnerdimp1
3491 vardim(2)=nouterdim
3492 vinfo(24)='_FillValue'
3493 aval(6)=spval
3494
3495 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3496 & 2, vardim, aval, vinfo, ncname, &
3497 & setparaccess = .false.)
3498 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3499
3500
3501
3502 vinfo( 1)='Jact'
3503 vinfo( 2)='actual total penalty function'
3504 vardim(1)=ninnerdimp1
3505 vardim(2)=nouterdim
3506 vinfo(24)='_FillValue'
3507 aval(6)=spval
3508
3509 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
3510 & 2, vardim, aval, vinfo, ncname, &
3511 & setparaccess = .false.)
3512 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3513# endif
3514# endif
3515
3516
3517
3518 IF (find_string(var_name,n_var,vname(1,idoday),vindex)) THEN
3520 & piofile = obspiofile, &
3521 & myvarname = trim(vname(1,idoday)), &
3522 & nvardim = nvdim, &
3523 & nvaratt = nvatt)
3524 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3525 vinfo(1)=trim(vname(1,idoday))
3526 DO i=1,nvatt
3527 IF (trim(var_aname(i)).eq.'long_name') THEN
3528 vinfo(2)=trim(var_achar(i))
3529 ELSE IF (trim(var_aname(i)).eq.'units') THEN
3530 vinfo(3)=trim(var_achar(i))
3531 ELSE IF (trim(var_aname(i)).eq.'calendar') THEN
3532 vinfo(4)=trim(var_achar(i))
3533 END IF
3534 END DO
3535 dav(ng)%pioVar(idoday)%dkind=
pio_tout
3536 dav(ng)%pioVar(idoday)%gtype=0
3537
3538 status=def_var(ng, inlm, dav(ng)%pioFile, &
3539 & dav(ng)%pioVar(idoday)%vd, &
3540 & nf_tout, 1, (/surveydim/), aval, vinfo, ncname)
3541 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3542 END IF
3543
3544
3545
3546 IF (find_string(var_name,n_var,vname(1,idotyp),vindex)) THEN
3548 & piofile = obspiofile, &
3549 & myvarname = trim(vname(1,idotyp)), &
3550 & nvardim = nvdim, &
3551 & nvaratt = nvatt)
3552 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3553 vinfo(1)=trim(vname(1,idotyp))
3554 dav(ng)%pioVar(idotyp)%dkind=pio_int
3555 dav(ng)%pioVar(idotyp)%gtype=0
3556
3557 status=def_var(ng, inlm, dav(ng)%pioFile, &
3558 & dav(ng)%pioVar(idotyp)%vd, &
3559 & pio_int, 1, (/datumdim/), aval, vinfo, ncname)
3560 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3561
3563 & trim(vname(1,idotyp)), &
3564 & 'NULL', &
3565 & trim(obs(ng)%name), &
3566 & obspiofile, &
3567 & vindex, &
3568 & trim(dav(ng)%name), &
3569 & dav(ng)%pioFile, &
3570 & dav(ng)%pioVar(idotyp)%vd%varID)
3571 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3572 END IF
3573
3574
3575
3576 IF (find_string(var_name,n_var,vname(1,idopro),vindex)) THEN
3578 & piofile = obspiofile, &
3579 & myvarname = trim(vname(1,idopro)), &
3580 & nvardim = nvdim, &
3581 & nvaratt = nvatt)
3582 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3583 vinfo(1)=trim(vname(1,idopro))
3584 dav(ng)%pioVar(idopro)%dkind=pio_int
3585 dav(ng)%pioVar(idopro)%gtype=0
3586
3587 status=def_var(ng, inlm, dav(ng)%pioFile, &
3588 & dav(ng)%pioVar(idopro)%vd, &
3589 & pio_int, 1, (/datumdim/), aval, vinfo, ncname)
3590 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3591
3593 & trim(vname(1,idopro)), &
3594 & 'NULL', &
3595 & trim(obs(ng)%name), &
3596 & obspiofile, &
3597 & vindex, &
3598 & trim(dav(ng)%name), &
3599 & dav(ng)%pioFile, &
3600 & dav(ng)%pioVar(idopro)%vd%varID)
3601 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3602 END IF
3603
3604
3605
3606 IF (find_string(var_name,n_var,vname(1,idobst),vindex)) THEN
3608 & piofile = obspiofile, &
3609 & myvarname = trim(vname(1,idobst)), &
3610 & nvardim = nvdim, &
3611 & nvaratt = nvatt)
3612 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3613 vinfo(1)=trim(vname(1,idobst))
3614 DO i=1,nvatt
3615 IF (trim(var_aname(i)).eq.'long_name') THEN
3616 vinfo(2)=trim(var_achar(i))
3617 ELSE IF (trim(var_aname(i)).eq.'units') THEN
3618 vinfo(3)=trim(var_achar(i))
3619 ELSE IF (trim(var_aname(i)).eq.'calendar') THEN
3620 vinfo(4)=trim(var_achar(i))
3621 END IF
3622 END DO
3623 dav(ng)%pioVar(idobst)%dkind=
pio_tout
3624 dav(ng)%pioVar(idobst)%gtype=0
3625
3626 status=def_var(ng, inlm, dav(ng)%pioFile, &
3627 & dav(ng)%pioVar(idobst)%vd, &
3628 &
pio_tout, 1, (/datumdim/), aval, vinfo, ncname)
3629 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3630 END IF
3631
3632
3633
3634 IF (find_string(var_name,n_var,vname(1,idolon),vindex)) THEN
3636 & piofile = obspiofile, &
3637 & myvarname = trim(vname(1,idolon)), &
3638 & nvardim = nvdim, &
3639 & nvaratt = nvatt)
3640 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3641 vinfo(1)=trim(vname(1,idolon))
3642 DO i=1,nvatt
3643 IF (trim(var_aname(i)).eq.'long_name') THEN
3644 vinfo(2)=trim(var_achar(i))
3645 ELSE IF (trim(var_aname(i)).eq.'units') THEN
3646 vinfo(3)=trim(var_achar(i))
3647 END IF
3648 END DO
3649 dav(ng)%pioVar(idolon)%dkind=
pio_frst
3650 dav(ng)%pioVar(idolon)%gtype=0
3651
3652 status=def_var(ng, inlm, dav(ng)%pioFile, &
3653 & dav(ng)%pioVar(idolon)%vd, &
3654 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3655 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3656 END IF
3657
3658
3659
3660 IF (find_string(var_name,n_var,vname(1,idolat),vindex)) THEN
3662 & piofile = obspiofile, &
3663 & myvarname = trim(vname(1,idolat)), &
3664 & nvardim = nvdim, &
3665 & nvaratt = nvatt)
3666 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3667 vinfo(1)=trim(vname(1,idolat))
3668 DO i=1,nvatt
3669 IF (trim(var_aname(i)).eq.'long_name') THEN
3670 vinfo(2)=trim(var_achar(i))
3671 ELSE IF (trim(var_aname(i)).eq.'units') THEN
3672 vinfo(3)=trim(var_achar(i))
3673 END IF
3674 END DO
3675 dav(ng)%pioVar(idolat)%dkind=
pio_frst
3676 dav(ng)%pioVar(idolat)%gtype=0
3677
3678 status=def_var(ng, inlm, dav(ng)%pioFile, &
3679 & dav(ng)%pioVar(idolat)%vd, &
3680 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3681 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3682 END IF
3683
3684
3685
3686 IF (find_string(var_name,n_var,vname(1,idobsd),vindex)) THEN
3688 & piofile = obspiofile, &
3689 & myvarname = trim(vname(1,idobsd)), &
3690 & nvardim = nvdim, &
3691 & nvaratt = nvatt)
3692 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3693 vinfo(1)=trim(vname(1,idobsd))
3694 DO i=1,nvatt
3695 IF (trim(var_aname(i)).eq.'long_name') THEN
3696 vinfo(2)=trim(var_achar(i))
3697 ELSE IF (trim(var_aname(i)).eq.'units') THEN
3698 vinfo(3)=trim(var_achar(i))
3699 ELSE IF (trim(var_aname(i)).eq.'negative') THEN
3700 vinfo(11)='downwards'
3701 END IF
3702 END DO
3703 vinfo(17)='missing_value'
3704 aval(4)=spval
3705 dav(ng)%pioVar(idobsd)%dkind=
pio_frst
3706 dav(ng)%pioVar(idobsd)%gtype=0
3707
3708 status=def_var(ng, inlm, dav(ng)%pioFile, &
3709 & dav(ng)%pioVar(idobsd)%vd, &
3710 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3711 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3712 END IF
3713
3714
3715
3716 IF (find_string(var_name,n_var,vname(1,idobsx),vindex)) THEN
3718 & piofile = obspiofile, &
3719 & myvarname = trim(vname(1,idobsx)), &
3720 & nvardim = nvdim, &
3721 & nvaratt = nvatt)
3722 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3723 vinfo(1)=trim(vname(1,idobsx))
3724 DO i=1,nvatt
3725 IF (trim(var_aname(i)).eq.'long_name') THEN
3726 vinfo(2)=trim(var_achar(i))
3727 END IF
3728 END DO
3729 dav(ng)%pioVar(idobsx)%dkind=
pio_frst
3730 dav(ng)%pioVar(idobsx)%gtype=0
3731
3732 status=def_var(ng, inlm, dav(ng)%pioFile, &
3733 & dav(ng)%pioVar(idobsx)%vd, &
3734 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3735 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3736 END IF
3737
3738
3739
3740 IF (find_string(var_name,n_var,vname(1,idobsy),vindex)) THEN
3742 & piofile = obspiofile, &
3743 & myvarname = trim(vname(1,idobsy)), &
3744 & nvardim = nvdim, &
3745 & nvaratt = nvatt)
3746 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3747 vinfo(1)=trim(vname(1,idobsy))
3748 DO i=1,nvatt
3749 IF (trim(var_aname(i)).eq.'long_name') THEN
3750 vinfo(2)=trim(var_achar(i))
3751 END IF
3752 END DO
3753 dav(ng)%pioVar(idobsy)%dkind=
pio_frst
3754 dav(ng)%pioVar(idobsy)%gtype=0
3755
3756 status=def_var(ng, inlm, dav(ng)%pioFile, &
3757 & dav(ng)%pioVar(idobsy)%vd, &
3758 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3759 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3760 END IF
3761
3762
3763
3764 IF (find_string(var_name,n_var,vname(1,idobsz),vindex)) THEN
3766 & piofile = obspiofile, &
3767 & myvarname = trim(vname(1,idobsz)), &
3768 & nvardim = nvdim, &
3769 & nvaratt = nvatt)
3770 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3771 vinfo(1)=trim(vname(1,idobsz))
3772 DO i=1,nvatt
3773 IF (trim(var_aname(i)).eq.'long_name') THEN
3774 vinfo(2)=trim(var_achar(i))
3775 END IF
3776 END DO
3777 dav(ng)%pioVar(idobsz)%dkind=
pio_frst
3778 dav(ng)%pioVar(idobsz)%gtype=0
3779
3780 status=def_var(ng, inlm, dav(ng)%pioFile, &
3781 & dav(ng)%pioVar(idobsz)%vd, &
3782 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3783 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3784 END IF
3785
3786
3787
3788 IF (find_string(var_name,n_var,vname(1,idoerr),vindex)) THEN
3790 & piofile = obspiofile, &
3791 & myvarname = trim(vname(1,idoerr)), &
3792 & nvardim = nvdim, &
3793 & nvaratt = nvatt)
3794 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3795 vinfo(1)=trim(vname(1,idoerr))
3796 DO i=1,nvatt
3797 IF (trim(var_aname(i)).eq.'long_name') THEN
3798 vinfo(2)=trim(var_achar(i))
3799 END IF
3800 END DO
3801 vinfo(3)=trim(vname(3,idoerr))
3802 dav(ng)%pioVar(idoerr)%dkind=
pio_frst
3803 dav(ng)%pioVar(idoerr)%gtype=0
3804
3805 status=def_var(ng, inlm, dav(ng)%pioFile, &
3806 & dav(ng)%pioVar(idoerr)%vd, &
3807 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3808 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3809 END IF
3810
3811
3812
3813 IF (find_string(var_name,n_var,vname(1,idoval),vindex)) THEN
3815 & piofile = obspiofile, &
3816 & myvarname = trim(vname(1,idoval)), &
3817 & nvardim = nvdim, &
3818 & nvaratt = nvatt)
3819 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3820 vinfo(1)=trim(vname(1,idoval))
3821 DO i=1,nvatt
3822 IF (trim(var_aname(i)).eq.'long_name') THEN
3823 vinfo(2)=trim(var_achar(i))
3824 END IF
3825 END DO
3826 vinfo(3)=trim(vname(3,idoval))
3827 dav(ng)%pioVar(idoval)%dkind=
pio_frst
3828 dav(ng)%pioVar(idoval)%gtype=0
3829
3830 status=def_var(ng, inlm, dav(ng)%pioFile, &
3831 & dav(ng)%pioVar(idoval)%vd, &
3832 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3833 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3834 END IF
3835
3836
3837
3838 IF (find_string(var_name,n_var,vname(1,idomet),vindex)) THEN
3840 & piofile = obspiofile, &
3841 & myvarname = trim(vname(1,idomet)), &
3842 & nvardim = nvdim, &
3843 & nvaratt = nvatt)
3844 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3845 vinfo(1)=trim(vname(1,idomet))
3846 DO i=1,nvatt
3847 IF (trim(var_aname(i)).eq.'long_name') THEN
3848 vinfo(2)=trim(var_achar(i))
3849 END IF
3850 END DO
3851 dav(ng)%pioVar(idomet)%dkind=
pio_frst
3852 dav(ng)%pioVar(idomet)%gtype=0
3853
3854 status=def_var(ng, inlm, dav(ng)%pioFile, &
3855 & dav(ng)%pioVar(idomet)%vd, &
3856 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3857 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3858 END IF
3859
3860
3861
3862 vinfo( 1)=vname(1,idobss)
3863 vinfo( 2)=vname(2,idobss)
3864 dav(ng)%pioVar(idobss)%dkind=
pio_frst
3865 dav(ng)%pioVar(idobss)%gtype=0
3866
3867 status=def_var(ng, inlm, dav(ng)%pioFile, &
3868 & dav(ng)%pioVar(idobss)%vd, &
3869 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3870 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3871
3872# if defined FOUR_DVAR && !defined I4DVAR_ANA_SENSITIVITY
3873
3874
3875
3876 vinfo( 1)=vname(1,idnlmp)
3877 vinfo( 2)=vname(2,idnlmp)
3878 vinfo( 3)=vname(3,idnlmp)
3879 dav(ng)%pioVar(idnlmp)%dkind=
pio_frst
3880 dav(ng)%pioVar(idnlmp)%gtype=0
3881
3882 status=def_var(ng, inlm, dav(ng)%pioFile, &
3883 & dav(ng)%pioVar(idnlmp)%vd, &
3884 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3885 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3886
3887
3888
3889 vinfo( 1)=vname(1,idnlmi)
3890 vinfo( 2)=vname(2,idnlmi)
3891 vinfo( 3)=vname(3,idnlmi)
3892 dav(ng)%pioVar(idnlmi)%dkind=
pio_frst
3893 dav(ng)%pioVar(idnlmi)%gtype=0
3894
3895 status=def_var(ng, inlm, dav(ng)%pioFile, &
3896 & dav(ng)%pioVar(idnlmi)%vd, &
3897 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3898 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3899
3900
3901
3902 vinfo( 1)=vname(1,idnlmf)
3903 vinfo( 2)=vname(2,idnlmf)
3904 vinfo( 3)=vname(3,idnlmf)
3905 dav(ng)%pioVar(idnlmf)%dkind=
pio_frst
3906 dav(ng)%pioVar(idnlmf)%gtype=0
3907
3908 status=def_var(ng, inlm, dav(ng)%pioFile, &
3909 & dav(ng)%pioVar(idnlmf)%vd, &
3910 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3911 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3912
3913
3914
3915 vinfo( 1)=vname(1,idbger)
3916 vinfo( 2)=vname(2,idbger)
3917 vinfo( 3)=vname(3,idbger)
3918 dav(ng)%pioVar(idbger)%dkind=
pio_frst
3919 dav(ng)%pioVar(idbger)%gtype=0
3920
3921 status=def_var(ng, inlm, dav(ng)%pioFile, &
3922 & dav(ng)%pioVar(idbger)%vd, &
3923 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3924 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3925
3926
3927
3928 vinfo( 1)=vname(1,idinno)
3929 vinfo( 2)=vname(2,idinno)
3930 vinfo( 3)=vname(3,idinno)
3931 dav(ng)%pioVar(idinno)%dkind=
pio_frst
3932 dav(ng)%pioVar(idinno)%gtype=0
3933
3934 status=def_var(ng, inlm, dav(ng)%pioFile, &
3935 & dav(ng)%pioVar(idinno)%vd, &
3936 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3937 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3938
3939
3940
3941 vinfo( 1)=vname(1,idincr)
3942 vinfo( 2)=vname(2,idincr)
3943 vinfo( 3)=vname(3,idincr)
3944 dav(ng)%pioVar(idincr)%dkind=
pio_frst
3945 dav(ng)%pioVar(idincr)%gtype=0
3946
3947 status=def_var(ng, inlm, dav(ng)%pioFile, &
3948 & dav(ng)%pioVar(idincr)%vd, &
3949 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3950 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3951
3952
3953
3954 vinfo( 1)=vname(1,idresi)
3955 vinfo( 2)=vname(2,idresi)
3956 vinfo( 3)=vname(3,idresi)
3957 dav(ng)%pioVar(idresi)%dkind=
pio_frst
3958 dav(ng)%pioVar(idresi)%gtype=0
3959
3960 status=def_var(ng, inlm, dav(ng)%pioFile, &
3961 & dav(ng)%pioVar(idresi)%vd, &
3962 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3963 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3964
3965# ifdef BGQC
3966
3967
3968
3969 vinfo( 1)=vname(1,idbgth)
3970 vinfo( 2)=vname(2,idbgth)
3971 dav(ng)%pioVar(idbgth)%dkind=
pio_frst
3972 dav(ng)%pioVar(idbgth)%gtype=0
3973
3974 status=def_var(ng, inlm, dav(ng)%pioFile, &
3975 & dav(ng)%pioVar(idbgth)%vd, &
3976 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3977 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3978# endif
3979# endif
3980
3981# if !defined I4DVAR_ANA_SENSITIVITY && \
3982 (defined i4dvar || defined weak_constraint)
3983
3984
3985
3986 havenlmod(ng)=.false.
3987 vinfo( 1)=vname(1,idnlmu)
3988 vinfo( 2)=vname(2,idnlmu)
3989 vinfo( 3)=vname(3,idnlmu)
3990 dav(ng)%pioVar(idnlmu)%dkind=
pio_frst
3991 dav(ng)%pioVar(idnlmu)%gtype=0
3992
3993 status=def_var(ng, inlm, dav(ng)%pioFile, &
3994 & dav(ng)%pioVar(idnlmu)%vd, &
3995 &
pio_frst, 2, (/datumdim,nouterdim/), aval, &
3996 & vinfo, ncname)
3997 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
3998# endif
3999
4000# ifndef I4DVAR_ANA_SENSITIVITY
4001# if defined I4DVAR || defined TLM_CHECK || \
4002 defined verification || defined weak_constraint
4003
4004
4005
4006 havenlmod(ng)=.false.
4007 vinfo( 1)=vname(1,idnlmo)
4008 vinfo( 2)=vname(2,idnlmo)
4009 vinfo( 3)=vname(3,idnlmo)
4010 dav(ng)%pioVar(idnlmo)%dkind=
pio_frst
4011 dav(ng)%pioVar(idnlmo)%gtype=0
4012
4013# if defined VERIFICATION || defined TLM_CHECK
4014 status=def_var(ng, inlm, dav(ng)%pioFile, &
4015 & dav(ng)%pioVar(idnlmo)%vd, &
4016 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4017 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4018# else
4019 status=def_var(ng, inlm, dav(ng)%pioFile, &
4020 & dav(ng)%pioVar(idnlmo)%vd, &
4021 &
pio_frst, 2, (/datumdim,nouterdim/), aval, &
4022 & vinfo, ncname)
4023 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4024# endif
4025# endif
4026# endif
4027
4028# if defined I4DVAR || defined I4DVAR_ANA_SENSITIVITY || \
4029 defined weak_constraint
4030
4031
4032
4033 havetlmod(ng)=.false.
4034 vinfo( 1)=vname(1,idtlmo)
4035# ifdef I4DVAR_ANA_SENSITIVITY
4036 vinfo( 2)='4D-Var sensitivity analysis at observations location'
4037# else
4038 vinfo( 2)=vname(2,idtlmo)
4039# endif
4040 dav(ng)%pioVar(idtlmo)%dkind=
pio_frst
4041 dav(ng)%pioVar(idtlmo)%gtype=0
4042
4043 status=def_var(ng, inlm, dav(ng)%pioFile, &
4044 & dav(ng)%pioVar(idtlmo)%vd, &
4045 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4046 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4047# endif
4048
4049# if defined I4DVAR || defined WEAK_CONSTRAINT
4050
4051
4052
4053 vinfo( 1)=vname(1,idmomi)
4054 vinfo( 2)=vname(2,idmomi)
4055 dav(ng)%pioVar(idmomi)%dkind=
pio_frst
4056 dav(ng)%pioVar(idmomi)%gtype=0
4057
4058 status=def_var(ng, inlm, dav(ng)%pioFile, &
4059 & dav(ng)%pioVar(idmomi)%vd, &
4060 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4061 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4062
4063
4064
4065 vinfo( 1)=vname(1,idmomf)
4066 vinfo( 2)=vname(2,idmomf)
4067 dav(ng)%pioVar(idmomf)%dkind=
pio_frst
4068 dav(ng)%pioVar(idmomf)%gtype=0
4069
4070 status=def_var(ng, inlm, dav(ng)%pioFile, &
4071 & dav(ng)%pioVar(idmomf)%vd, &
4072 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4073 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4074# endif
4075
4076# if defined I4DVAR
4077
4078
4079
4080 vinfo( 1)='NLcost_function'
4081 vinfo( 2)='nonlinear model misfit cost function'
4082 vardim(1)=statedimp1
4083 vardim(2)=nouterdimp1
4084
4085 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4086 & 2, vardim, aval, vinfo, ncname)
4087 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4088
4089
4090
4091 vinfo( 1)='TLcost_function'
4092 vinfo( 2)='tangent linear model misfit cost function'
4093
4094 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4095 & 1, (/iterdim/), aval, vinfo, ncname, &
4096 & setparaccess = .true.)
4097 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4098# endif
4099
4100# ifdef BACKGROUND
4101
4102
4103
4104 vinfo( 1)='back_function'
4105 vinfo( 2)='model minus background misfit cost function'
4106
4107 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4108 & 1, (/iterdim/), aval, vinfo, ncname, &
4109 & setparaccess = .true.)
4110 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4111# endif
4112
4113# if defined I4DVAR
4114
4115
4116
4117
4118 vinfo( 1)='Jmin'
4119 vinfo( 2)='normalized, optimal cost function minimum'
4120
4121 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4122 & 1, (/iterdim/), aval, vinfo, ncname, &
4123 & setparaccess = .true.)
4124 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4125# endif
4126
4127# ifdef WEAK_CONSTRAINT
4128# ifndef RPCG
4129
4130
4131
4132 vinfo( 1)='cg_pxsave'
4133 vinfo( 2)='representer coefficients estimatate'
4134 vardim(1)=datumdim
4135 vardim(2)=nouterdim
4136 aval(6)=spval
4137
4138 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4139 & 2, vardim, aval, vinfo, ncname)
4140 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4141# endif
4142
4143
4144
4145 vinfo( 1)='zgrad0'
4146 vinfo( 2)='initial gradient for minimization, observation space'
4147# ifdef RPCG
4148 vardim(1)=datumdimp1
4149# else
4150 vardim(1)=datumdim
4151# endif
4152 vardim(2)=nouterdim
4153 vinfo(24)='_FillValue'
4154 aval(6)=spval
4155
4156 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4157 & 2, vardim, aval, vinfo, ncname)
4158 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4159
4160# ifdef RPCG
4161
4162
4163
4164 vinfo( 1)='vgrad0'
4165 vinfo( 2)='initial gradient for minimization, v space'
4166 vardim(1)=datumdimp1
4167 vinfo(24)='_FillValue'
4168 aval(6)=spval
4169
4170 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4171 & 1, vardim, aval, vinfo, ncname)
4172 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4173
4174
4175
4176 vinfo( 1)='Hbk'
4177 vinfo( 2)='evolved sum of increments in observation space'
4178 vardim(1)=datumdim
4179 vardim(2)=nouterdim
4180 vinfo(24)='_FillValue'
4181 aval(6)=spval
4182
4183 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4184 & 2, vardim, aval, vinfo, ncname)
4185 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4186
4187
4188
4189 vinfo( 1)='Jb0'
4190 vinfo( 2)='Outer-loop background cost function'
4191 vardim(1)=nouterdimp1
4192 vinfo(24)='_FillValue'
4193 aval(6)=spval
4194
4195 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4196 & 1, vardim, aval, vinfo, ncname)
4197 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4198# endif
4199
4200
4201
4202# ifdef RPCG
4203 vinfo( 1)='vcglwk'
4204 vinfo( 2)='Preconditioned Lanczos vectors, observation space'
4205 vardim(1)=datumdimp1
4206 vardim(2)=ninnerdimp1
4207 vardim(3)=nouterdim
4208 vinfo(24)='_FillValue'
4209 aval(6)=spval
4210
4211 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4212 & 3, vardim, aval, vinfo, ncname)
4213 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4214
4215 vinfo( 1)='vcglev'
4216 vinfo( 2)='converged Lanczos vectors, observation space'
4217 vardim(1)=datumdimp1
4218 vardim(2)=ninnerdim
4219 vardim(3)=nouterdim
4220 vinfo(24)='_FillValue'
4221 aval(6)=spval
4222
4223 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4224 & 3, vardim, aval, vinfo, ncname)
4225 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4226
4227 vinfo( 1)='zcglwk'
4228 vinfo( 2)='Lanczos vectors, observation space'
4229 vardim(1)=datumdimp1
4230 vardim(2)=ninnerdimp1
4231 vardim(3)=nouterdim
4232 vinfo(24)='_FillValue'
4233 aval(6)=spval
4234
4235 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4236 & 3, vardim, aval, vinfo, ncname)
4237 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4238# else
4239 vinfo( 1)='zcglwk'
4240 vinfo( 2)='Lanczos vectors, observation space'
4241 vardim(1)=datumdim
4242 vardim(2)=ninnerdimp1
4243 vardim(3)=nouterdim
4244 vinfo(24)='_FillValue'
4245 aval(6)=spval
4246
4247 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4248 & 3, vardim, aval, vinfo, ncname)
4249 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4250# endif
4251
4252
4253
4254 vinfo( 1)='TLmodVal_S'
4255 vinfo( 2)='tangent linear model at observation locations'
4256 vardim(1)=datumdim
4257 vardim(2)=ninnerdim
4258 vardim(3)=nouterdim
4259
4260 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4261 & 3, vardim, aval, vinfo, ncname)
4262 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4263# endif
4264
4265# ifdef SP4DVAR
4266
4267
4268
4269 vinfo( 1)='ADmodVal_S'
4270 vinfo( 2)='adjoint model at observation locations'
4271 vardim(1)=datumdim
4272 vardim(2)=ninnerdimp2
4273
4274 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4275 & 2, vardim, aval, vinfo, ncname)
4276 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4277
4278
4279
4280 vinfo( 1)='harnoldi'
4281 vinfo( 2)='GMRES upper Hessenberg matrix'
4282 vardim(1)=ninnerdimp1
4283 vardim(2)=ninnerdim
4284 vardim(3)=nouterdim
4285 vinfo(24)='_FillValue'
4286 aval(6)=spval
4287
4288 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4289 & 3, vardim, aval, vinfo, ncname)
4290 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4291
4292
4293
4294 vinfo( 1)='gmze'
4295 vinfo( 2)='GMRES Arnoldi vector weights'
4296 vardim(1)=ninnerdim
4297 vardim(2)=nouterdim
4298 vinfo(24)='_FillValue'
4299 aval(6)=spval
4300
4301 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4302 & 2, vardim, aval, vinfo, ncname)
4303 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4304
4305
4306
4307 vinfo( 1)='cg_beta0'
4308 vinfo( 2)='Residual norm'
4309 vardim(1)=nouterdim
4310 vinfo(24)='_FillValue'
4311 aval(6)=spval
4312
4313 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4314 & 1, vardim, aval, vinfo, ncname)
4315 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4316
4317
4318
4319 vinfo( 1)='Jobs'
4320 vinfo( 2)='Obs cost function'
4321 vardim(1)=ninnerdimp1
4322 vardim(2)=nouterdim
4323 vinfo(24)='_FillValue'
4324 aval(6)=spval
4325
4326 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4327 & 2, vardim, aval, vinfo, ncname)
4328 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4329# endif
4330
4331# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
4332 defined tl_r4dvar
4333
4334
4335
4336 vinfo( 1)='RPmodel_initial'
4337 vinfo( 2)='initial representer model at observation locations'
4338 vardim(1)=datumdim
4339
4340 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4341 & 1, vardim, aval, vinfo, ncname)
4342 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4343# endif
4344
4345# if defined I4DVAR_ANA_SENSITIVITY || \
4346 defined rbl4dvar_ana_sensitivity || \
4347 defined rbl4dvar_fct_sensitivity || \
4348 defined r4dvar_ana_sensitivity
4349# ifdef OBS_IMPACT
4350
4351
4352
4353# ifdef IMPACT_INNER
4354 vinfo( 1)='ObsImpact_total'
4355 vinfo( 2)='total observation impact'
4356 vardim(1)=datumdim
4357 vardim(2)=ninnerdim
4358
4359 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4360 & 2, vardim, aval, vinfo, ncname)
4361 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4362# else
4363 vinfo( 1)='ObsImpact_total'
4364 vinfo( 2)='total observation impact'
4365 vardim(1)=datumdim
4366
4367 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4368 & 1, vardim, aval, vinfo, ncname)
4369 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4370# endif
4371# else
4372
4373
4374
4375 vinfo( 1)='ObsSens_total'
4376 vinfo( 2)='total observation sensitivity'
4377 vardim(1)=datumdim
4378
4379 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4380 & 1, vardim, aval, vinfo, ncname)
4381 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4382# endif
4383# endif
4384
4385# if defined OBS_IMPACT_SPLIT && \
4386 (defined i4dvar_ana_sensitivity || \
4387 defined rbl4dvar_ana_sensitivity || \
4388 defined rbl4dvar_fct_sensitivity || \
4389 defined r4dvar_ana_sensitivity)
4390
4391
4392
4393# ifdef IMPACT_INNER
4394 vinfo( 1)='ObsImpact_IC'
4395 vinfo( 2)='observation impact due to initial conditions'
4396 vardim(1)=datumdim
4397 vardim(2)=ninnerdim
4398
4399 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4400 & 2, vardim, aval, vinfo, ncname)
4401 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4402# else
4403 vinfo( 1)='ObsImpact_IC'
4404 vinfo( 2)='observation impact due to initial conditions'
4405 vardim(1)=datumdim
4406
4407 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4408 & 1, vardim, aval, vinfo, ncname)
4409 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4410# endif
4411
4412# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
4413
4414
4415
4416# ifdef IMPACT_INNER
4417
4418 vinfo( 1)='ObsImpact_FC'
4419 vinfo( 2)='observation impact due to surface forcing'
4420 vardim(1)=datumdim
4421 vardim(2)=ninnerdim
4422
4423 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4424 & 2, vardim, aval, vinfo, ncname)
4425 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4426# else
4427 vinfo( 1)='ObsImpact_FC'
4428 vinfo( 2)='observation impact due to surface forcing'
4429 vardim(1)=datumdim
4430
4431 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4432 & 1, vardim, aval, vinfo, ncname)
4433 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4434# endif
4435# endif
4436
4437# if defined ADJUST_BOUNDARY
4438
4439
4440
4441# ifdef IMPACT_INNER
4442 vinfo( 1)='ObsImpact_BC'
4443 vinfo( 2)='observation impact due to open boundary conditions'
4444 vardim(1)=datumdim
4445 vardim(2)=ninnerdim
4446
4447 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4448 & 2, vardim, aval, vinfo, ncname)
4449 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4450# else
4451 vinfo( 1)='ObsImpact_BC'
4452 vinfo( 2)='observation impact due to open boundary conditions'
4453 vardim(1)=datumdim
4454
4455 status=def_var(ng, inlm, dav(ng)%pioFile, vardesc,
pio_frst, &
4456 & 1, vardim, aval, vinfo, ncname)
4457 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4458# endif
4459# endif
4460# endif
4461
4462# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
4463
4464
4465
4466 IF (balance(isfsur)) THEN
4467 vinfo( 1)='zeta_ref'
4468 vinfo( 2)='reference free-surface, balance operator'
4469 vinfo( 3)=vname(3,idfsur)
4470 dav(ng)%pioVar(idfsur)%dkind=
pio_frst
4471 dav(ng)%pioVar(idfsur)%gtype=r2dvar
4472
4473 status=def_var(ng, inlm, dav(ng)%pioFile, &
4474 & dav(ng)%pioVar(idfsur)%vd, &
4475 &
pio_frst, 2, (/rxidim, retadim/), aval, vinfo, &
4476 & ncname)
4477 END IF
4478# endif
4479
4480
4481
4482
4483
4485 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4486
4487
4488
4489 IF (obs(ng)%pioFile%fh.eq.-1) THEN
4491 & .false.)
4492 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4493 END IF
4494 END IF define
4495
4496
4497
4498
4499
4500 query : IF (.not.ldefmod(ng)) THEN
4501 ncname=dav(ng)%name
4502
4503
4504
4506 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
4507 WRITE (stdout,30) trim(ncname)
4508 RETURN
4509 END IF
4510
4511
4512
4514 & piofile = dav(ng)%pioFile)
4515 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4516
4517
4518
4520 & piofile = dav(ng)%pioFile)
4521 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
4522
4523
4524
4525 DO i=1,nv
4526 got_var(i)=.false.
4527 END DO
4528
4529
4530
4531
4532 DO i=1,n_var
4533 IF (trim(var_name(i)).eq.trim(vname(1,idoday))) THEN
4534 got_var(idoday)=.true.
4535 dav(ng)%pioVar(idoday)%vd=
var_desc(i)
4536 dav(ng)%pioVar(idoday)%dkind=
pio_tout
4537 dav(ng)%pioVar(idoday)%gtype=0
4538 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idotyp))) THEN
4539 got_var(idotyp)=.true.
4540 dav(ng)%pioVar(idotyp)%vd=
var_desc(i)
4541 dav(ng)%pioVar(idotyp)%dkind=pio_int
4542 dav(ng)%pioVar(idotyp)%gtype=0
4543 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idopro))) THEN
4544 got_var(idopro)=.true.
4545 dav(ng)%pioVar(idopro)%vd=
var_desc(i)
4546 dav(ng)%pioVar(idopro)%dkind=pio_int
4547 dav(ng)%pioVar(idopro)%gtype=0
4548 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobst))) THEN
4549 got_var(idobst)=.true.
4550 dav(ng)%pioVar(idobst)%vd=
var_desc(i)
4551 dav(ng)%pioVar(idobst)%dkind=
pio_tout
4552 dav(ng)%pioVar(idobst)%gtype=0
4553 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idolon))) THEN
4554 got_var(idolon)=.true.
4555 dav(ng)%pioVar(idolon)%vd=
var_desc(i)
4556 dav(ng)%pioVar(idolon)%dkind=
pio_frst
4557 dav(ng)%pioVar(idolon)%gtype=0
4558 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idolat))) THEN
4559 got_var(idolat)=.true.
4560 dav(ng)%pioVar(idolat)%vd=
var_desc(i)
4561 dav(ng)%pioVar(idolat)%dkind=
pio_frst
4562 dav(ng)%pioVar(idolat)%gtype=0
4563 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobsd))) THEN
4564 got_var(idobsd)=.true.
4565 dav(ng)%pioVar(idobsd)%vd=
var_desc(i)
4566 dav(ng)%pioVar(idobsd)%dkind=
pio_frst
4567 dav(ng)%pioVar(idobsd)%gtype=0
4568 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobsx))) THEN
4569 got_var(idobsx)=.true.
4570 dav(ng)%pioVar(idobsx)%vd=
var_desc(i)
4571 dav(ng)%pioVar(idobsx)%dkind=
pio_frst
4572 dav(ng)%pioVar(idobsx)%gtype=0
4573 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobsy))) THEN
4574 got_var(idobsy)=.true.
4575 dav(ng)%pioVar(idobsy)%vd=
var_desc(i)
4576 dav(ng)%pioVar(idobsy)%dkind=
pio_frst
4577 dav(ng)%pioVar(idobsy)%gtype=0
4578 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobsz))) THEN
4579 got_var(idobsz)=.true.
4580 dav(ng)%pioVar(idobsz)%vd=
var_desc(i)
4581 dav(ng)%pioVar(idobsz)%dkind=
pio_frst
4582 dav(ng)%pioVar(idobsz)%gtype=0
4583 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idoerr))) THEN
4584 got_var(idoerr)=.true.
4585 dav(ng)%pioVar(idoerr)%vd=
var_desc(i)
4586 dav(ng)%pioVar(idoerr)%dkind=
pio_frst
4587 dav(ng)%pioVar(idoerr)%gtype=0
4588 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idoval))) THEN
4589 got_var(idoval)=.true.
4590 dav(ng)%pioVar(idoval)%vd=
var_desc(i)
4591 dav(ng)%pioVar(idoval)%dkind=
pio_frst
4592 dav(ng)%pioVar(idoval)%gtype=0
4593 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idomet))) THEN
4594 got_var(idomet)=.true.
4595 dav(ng)%pioVar(idomet)%vd=
var_desc(i)
4596 dav(ng)%pioVar(idomet)%dkind=
pio_frst
4597 dav(ng)%pioVar(idomet)%gtype=0
4598 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idobss))) THEN
4599 got_var(idobss)=.true.
4600 dav(ng)%pioVar(idobss)%vd=
var_desc(i)
4601 dav(ng)%pioVar(idobss)%dkind=
pio_frst
4602 dav(ng)%pioVar(idobss)%gtype=0
4603# ifdef FOUR_DVAR
4604 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idnlmp))) THEN
4605 got_var(idnlmp)=.true.
4606 dav(ng)%pioVar(idnlmp)%vd=
var_desc(i)
4607 dav(ng)%pioVar(idnlmp)%dkind=
pio_frst
4608 dav(ng)%pioVar(idnlmp)%gtype=0
4609 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idnlmu))) THEN
4610 got_var(idnlmu)=.true.
4611 dav(ng)%pioVar(idnlmu)%vd=
var_desc(i)
4612 dav(ng)%pioVar(idnlmu)%dkind=
pio_frst
4613 dav(ng)%pioVar(idnlmu)%gtype=0
4614 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idnlmi))) THEN
4615 got_var(idnlmi)=.true.
4616 dav(ng)%pioVar(idnlmi)%vd=
var_desc(i)
4617 dav(ng)%pioVar(idnlmi)%dkind=
pio_frst
4618 dav(ng)%pioVar(idnlmi)%gtype=0
4619 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idnlmf))) THEN
4620 got_var(idnlmf)=.true.
4621 dav(ng)%pioVar(idnlmf)%vd=
var_desc(i)
4622 dav(ng)%pioVar(idnlmf)%dkind=
pio_frst
4623 dav(ng)%pioVar(idnlmf)%gtype=0
4624# endif
4625 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idnlmo))) THEN
4626 got_var(idnlmo)=.true.
4627 havenlmod(ng)=.true.
4628 dav(ng)%pioVar(idnlmo)%vd=
var_desc(i)
4629 dav(ng)%pioVar(idnlmo)%dkind=
pio_frst
4630 dav(ng)%pioVar(idnlmo)%gtype=0
4631# if defined I4DVAR || defined WEAK_CONSTRAINT
4632 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idtlmo))) THEN
4633 got_var(idtlmo)=.true.
4634 havetlmod(ng)=.true.
4635 dav(ng)%pioVar(idtlmo)%vd=
var_desc(i)
4636 dav(ng)%pioVar(idtlmo)%dkind=
pio_frst
4637 dav(ng)%pioVar(idtlmo)%gtype=0
4638# endif
4639 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idbger))) THEN
4640 got_var(idbger)=.true.
4641 dav(ng)%pioVar(idbger)%vd=
var_desc(i)
4642 dav(ng)%pioVar(idbger)%dkind=
pio_frst
4643 dav(ng)%pioVar(idbger)%gtype=0
4644 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idinno))) THEN
4645 got_var(idinno)=.true.
4646 dav(ng)%pioVar(idinno)%vd=
var_desc(i)
4647 dav(ng)%pioVar(idinno)%dkind=
pio_frst
4648 dav(ng)%pioVar(idinno)%gtype=0
4649 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idincr))) THEN
4650 got_var(idincr)=.true.
4651 dav(ng)%pioVar(idincr)%vd=
var_desc(i)
4652 dav(ng)%pioVar(idincr)%dkind=
pio_frst
4653 dav(ng)%pioVar(idincr)%gtype=0
4654 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idresi))) THEN
4655 got_var(idresi)=.true.
4656 dav(ng)%pioVar(idresi)%vd=
var_desc(i)
4657 dav(ng)%pioVar(idresi)%dkind=
pio_frst
4658 dav(ng)%pioVar(idresi)%gtype=0
4659# if defined I4DVAR || defined WEAK_CONSTRAINT
4660 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmomi))) THEN
4661 got_var(idmomi)=.true.
4662 dav(ng)%pioVar(idmomi)%vd=
var_desc(i)
4663 dav(ng)%pioVar(idmomi)%dkind=
pio_frst
4664 dav(ng)%pioVar(idmomi)%gtype=0
4665 ELSE IF (trim(var_name(i)).eq.trim(vname(1,idmomf))) THEN
4666 got_var(idmomf)=.true.
4667 dav(ng)%pioVar(idmomf)%vd=
var_desc(i)
4668 dav(ng)%pioVar(idmomf)%dkind=
pio_frst
4669 dav(ng)%pioVar(idmomf)%gtype=0
4670# endif
4671 END IF
4672 END DO
4673
4674
4675
4676 IF (.not.got_var(idoday)) THEN
4677 IF (master) WRITE (stdout,90) trim(vname(1,idoday)), &
4678 & trim(dav(ng)%name)
4679 exit_flag=2
4680 RETURN
4681 END IF
4682 IF (.not.got_var(idopro)) THEN
4683 IF (master) WRITE (stdout,90) trim(vname(1,idopro)), &
4684 & trim(dav(ng)%name)
4685 exit_flag=2
4686 RETURN
4687 END IF
4688 IF (.not.got_var(idobst)) THEN
4689 IF (master) WRITE (stdout,90) trim(vname(1,idobst)), &
4690 & trim(dav(ng)%name)
4691 exit_flag=2
4692 RETURN
4693 END IF
4694 IF (.not.got_var(idolon)) THEN
4695 IF (master) WRITE (stdout,90) trim(vname(1,idolon)), &
4696 & trim(dav(ng)%name)
4697
4698
4699 END IF
4700 IF (.not.got_var(idolat)) THEN
4701 IF (master) WRITE (stdout,90) trim(vname(1,idolat)), &
4702 & trim(dav(ng)%name)
4703
4704
4705 END IF
4706 IF (.not.got_var(idobsd)) THEN
4707 IF (master) WRITE (stdout,90) trim(vname(1,idobsd)), &
4708 & trim(dav(ng)%name)
4709 exit_flag=2
4710 RETURN
4711 END IF
4712 IF (.not.got_var(idobsx)) THEN
4713 IF (master) WRITE (stdout,90) trim(vname(1,idobsx)), &
4714 & trim(dav(ng)%name)
4715 exit_flag=2
4716 RETURN
4717 END IF
4718 IF (.not.got_var(idobsy)) THEN
4719 IF (master) WRITE (stdout,90) trim(vname(1,idobsy)), &
4720 & trim(dav(ng)%name)
4721 exit_flag=2
4722 RETURN
4723 END IF
4724 IF (.not.got_var(idoerr)) THEN
4725 IF (master) WRITE (stdout,90) trim(vname(1,idoerr)), &
4726 & trim(dav(ng)%name)
4727 exit_flag=2
4728 RETURN
4729 END IF
4730 IF (.not.got_var(idoval)) THEN
4731 IF (master) WRITE (stdout,90) trim(vname(1,idoval)), &
4732 & trim(dav(ng)%name)
4733 exit_flag=2
4734 RETURN
4735 END IF
4736
4737 IF (.not.got_var(idobss)) THEN
4738 IF (master) WRITE (stdout,90) trim(vname(1,idobss)), &
4739 & trim(dav(ng)%name)
4740 exit_flag=2
4741 RETURN
4742 END IF
4743# ifdef FOUR_DVAR
4744 IF (.not.got_var(idnlmp)) THEN
4745 IF (master) WRITE (stdout,90) trim(vname(1,idnlmp)), &
4746 & trim(dav(ng)%name)
4747 exit_flag=2
4748 RETURN
4749 END IF
4750
4751 IF (.not.got_var(idnlmu)) THEN
4752 IF (master) WRITE (stdout,90) trim(vname(1,idnlmu)), &
4753 & trim(dav(ng)%name)
4754 exit_flag=2
4755 RETURN
4756 END IF
4757
4758 IF (.not.got_var(idnlmi)) THEN
4759 IF (master) WRITE (stdout,90) trim(vname(1,idnlmi)), &
4760 & trim(dav(ng)%name)
4761 exit_flag=2
4762 RETURN
4763 END IF
4764
4765 IF (.not.got_var(idnlmf)) THEN
4766 IF (master) WRITE (stdout,90) trim(vname(1,idnlmf)), &
4767 & trim(dav(ng)%name)
4768 exit_flag=2
4769 RETURN
4770 END IF
4771# endif
4772 IF (.not.got_var(idnlmo)) THEN
4773 IF (master) WRITE (stdout,90) trim(vname(1,idnlmo)), &
4774 & trim(dav(ng)%name)
4775 exit_flag=2
4776 RETURN
4777 END IF
4778# if defined I4DVAR || defined WEAK_CONSTRAINT
4779 IF (.not.got_var(idtlmo)) THEN
4780 IF (master) WRITE (stdout,90) trim(vname(1,idtlmo)), &
4781 & trim(dav(ng)%name)
4782 exit_flag=2
4783 RETURN
4784 END IF
4785# endif
4786 IF (.not.got_var(idbger)) THEN
4787 IF (master) WRITE (stdout,90) trim(vname(1,idbger)), &
4788 & trim(dav(ng)%name)
4789 exit_flag=2
4790 RETURN
4791 END IF
4792 IF (.not.got_var(idinno)) THEN
4793 IF (master) WRITE (stdout,90) trim(vname(1,idinno)), &
4794 & trim(dav(ng)%name)
4795 exit_flag=2
4796 RETURN
4797 END IF
4798 IF (.not.got_var(idincr)) THEN
4799 IF (master) WRITE (stdout,90) trim(vname(1,idincr)), &
4800 & trim(dav(ng)%name)
4801 exit_flag=2
4802 RETURN
4803 END IF
4804 IF (.not.got_var(idresi)) THEN
4805 IF (master) WRITE (stdout,90) trim(vname(1,idresi)), &
4806 & trim(dav(ng)%name)
4807 exit_flag=2
4808 RETURN
4809 END IF
4810# if defined I4DVAR || defined WEAK_CONSTRAINT
4811 IF (.not.got_var(idmomi)) THEN
4812 IF (master) WRITE (stdout,90) trim(vname(1,idmomi)), &
4813 & trim(dav(ng)%name)
4814 exit_flag=2
4815 RETURN
4816 END IF
4817 IF (.not.got_var(idmomf)) THEN
4818 IF (master) WRITE (stdout,90) trim(vname(1,idmomf)), &
4819 & trim(dav(ng)%name)
4820 exit_flag=2
4821 RETURN
4822 END IF
4823# endif
4824
4825# if defined I4DVAR || defined BACKGROUND
4826
4827
4828
4829 dav(ng)%Rindex=rec_size
4830 fcount=dav(ng)%Fcount
4831 dav(ng)%Nrec(fcount)=rec_size
4832# endif
4833
4834 END IF query
4835
4836 10 FORMAT (/,2x,'DEF_MOD_PIO - creating model/observation', &
4837 & ' file,',t56,'Grid ',i2.2,': ',a)
4838 20 FORMAT (/,2x,'DEF_MOD_PIO - inquiring model/observation', &
4839 & ' file,',t56,'Grid ',i2.2,': ',a)
4840 30 FORMAT (/,' DEF_MOD_PIO - unable to open observation/model', &
4841 & ' file: ',a)
4842 40 FORMAT (/,' DEF_MOD_PIO - unable to create model/observation', &
4843 & ' file:',1x,a)
4844 50 FORMAT (/,' DEF_MOD_PIO - unable to create global attribute: ', &
4845 & a,/,11x,a)
4846 60 FORMAT (/,' DEF_MOD_PIO - unable to copy attribute; ',a,1x, &
4847 & 'for variable: ',a,/,11x,'in file: 'a)
4848 70 FORMAT (/,' DEF_MOD_PIO - unable to inquire attribute ',i2.2,1x, &
4849 & 'name for variable: ',a,/,11x,'in file: 'a)
4850 80 FORMAT (/,' DEF_MOD_PIO - unable to copy attribute: ',1x,a,2x, &
4851 & 'for variable: ',1x,a,/,11x,a)
4852 90 FORMAT (/,' DEF_MOD_PIO - unable to find model/observation' &
4853 & ' variable:',1x,a,/,11x,'in file: ',a)
4854
4855 RETURN
subroutine pio_netcdf_copy_att(ng, model, varname, attname, inp_ncname, inp_piofile, inp_varid, out_ncname, out_piofile, out_varid)
type(var_desc_t), dimension(:), pointer var_desc
integer, parameter pio_frst
subroutine, public pio_netcdf_create(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
subroutine, public pio_netcdf_close(ng, model, piofile, ncname, lupdate)
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
integer, parameter pio_tout
subroutine, public pio_netcdf_enddef(ng, model, ncname, piofile)