libsim  Versione8.0.0

◆ vol7d_diff_only()

subroutine vol7d_class::vol7d_diff_only ( type(vol7d), intent(in)  this,
type(vol7d), intent(out)  that,
logical, intent(in), optional  data_only,
logical, intent(in), optional  ana 
)

Metodo per ottenere solo le differenze tra due oggetti vol7d.

Il primo volume viene confrontato col secondo; nel secondo volume ovunque i dati confrontati siano coincidenti viene impostato valore mancante.

Parametri
[in]thisprimo volume da confrontare
[out]thatsecondo volume da confrontare in cui eliminare i dati coincidenti
[in]data_onlyattiva l'elaborazione dei soli dati e non dell'anagrafica (default: .false.)
[in]anaattiva l'elaborazione dell'anagrafica (coordinate e ident) (default: .false.)

Definizione alla linea 2501 del file vol7d_class.F90.

2501 end if
2502 
2503 lfilename=trim(arg)//".v7d"
2504 if (index(arg,'/',back=.true.) > 0) lfilename=lfilename(index(arg,'/',back=.true.)+1 : )
2505 
2506 if (present(filename))then
2507  if (filename /= "")then
2508  lfilename=filename
2509  end if
2510 end if
2511 
2512 if (present(filename_auto))filename_auto=lfilename
2513 
2514 
2515 inquire(unit=lunit,opened=opened)
2516 if (.not. opened) then
2517 ! inquire(file=lfilename, EXIST=exist)
2518 ! IF (exist) THEN
2519 ! CALL l4f_log(L4F_FATAL, &
2520 ! 'in vol7d_write_on_file, file exists, cannot open file '//TRIM(lfilename))
2521 ! CALL raise_fatal_error()
2522 ! ENDIF
2523  OPEN(unit=lunit, file=lfilename, form='UNFORMATTED', access='STREAM')
2524  CALL l4f_log(l4f_info, 'opened: '//trim(lfilename))
2525 end if
2526 
2527 if (associated(this%ana)) nana=size(this%ana)
2528 if (associated(this%time)) ntime=size(this%time)
2529 if (associated(this%timerange)) ntimerange=size(this%timerange)
2530 if (associated(this%level)) nlevel=size(this%level)
2531 if (associated(this%network)) nnetwork=size(this%network)
2532 
2533 if (associated(this%dativar%r)) ndativarr=size(this%dativar%r)
2534 if (associated(this%dativar%i)) ndativari=size(this%dativar%i)
2535 if (associated(this%dativar%b)) ndativarb=size(this%dativar%b)
2536 if (associated(this%dativar%d)) ndativard=size(this%dativar%d)
2537 if (associated(this%dativar%c)) ndativarc=size(this%dativar%c)
2538 
2539 if (associated(this%datiattr%r)) ndatiattrr=size(this%datiattr%r)
2540 if (associated(this%datiattr%i)) ndatiattri=size(this%datiattr%i)
2541 if (associated(this%datiattr%b)) ndatiattrb=size(this%datiattr%b)
2542 if (associated(this%datiattr%d)) ndatiattrd=size(this%datiattr%d)
2543 if (associated(this%datiattr%c)) ndatiattrc=size(this%datiattr%c)
2544 
2545 if (associated(this%dativarattr%r)) ndativarattrr=size(this%dativarattr%r)
2546 if (associated(this%dativarattr%i)) ndativarattri=size(this%dativarattr%i)
2547 if (associated(this%dativarattr%b)) ndativarattrb=size(this%dativarattr%b)
2548 if (associated(this%dativarattr%d)) ndativarattrd=size(this%dativarattr%d)
2549 if (associated(this%dativarattr%c)) ndativarattrc=size(this%dativarattr%c)
2550 
2551 if (associated(this%anavar%r)) nanavarr=size(this%anavar%r)
2552 if (associated(this%anavar%i)) nanavari=size(this%anavar%i)
2553 if (associated(this%anavar%b)) nanavarb=size(this%anavar%b)
2554 if (associated(this%anavar%d)) nanavard=size(this%anavar%d)
2555 if (associated(this%anavar%c)) nanavarc=size(this%anavar%c)
2556 
2557 if (associated(this%anaattr%r)) nanaattrr=size(this%anaattr%r)
2558 if (associated(this%anaattr%i)) nanaattri=size(this%anaattr%i)
2559 if (associated(this%anaattr%b)) nanaattrb=size(this%anaattr%b)
2560 if (associated(this%anaattr%d)) nanaattrd=size(this%anaattr%d)
2561 if (associated(this%anaattr%c)) nanaattrc=size(this%anaattr%c)
2562 
2563 if (associated(this%anavarattr%r)) nanavarattrr=size(this%anavarattr%r)
2564 if (associated(this%anavarattr%i)) nanavarattri=size(this%anavarattr%i)
2565 if (associated(this%anavarattr%b)) nanavarattrb=size(this%anavarattr%b)
2566 if (associated(this%anavarattr%d)) nanavarattrd=size(this%anavarattr%d)
2567 if (associated(this%anavarattr%c)) nanavarattrc=size(this%anavarattr%c)
2568 
2569 write(unit=lunit)ldescription
2570 write(unit=lunit)tarray
2571 
2572 write(unit=lunit)&
2573  nana, ntime, ntimerange, nlevel, nnetwork, &
2574  ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2575  ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2576  ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2577  nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2578  nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2579  nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc, &
2580  this%time_definition
2581 
2582 
2583 !write(unit=lunit)this
2584 
2585 
2586 !! prime 5 dimensioni
2587 if (associated(this%ana)) call write_unit(this%ana, lunit)
2588 if (associated(this%time)) call write_unit(this%time, lunit)
2589 if (associated(this%level)) write(unit=lunit)this%level
2590 if (associated(this%timerange)) write(unit=lunit)this%timerange
2591 if (associated(this%network)) write(unit=lunit)this%network
2592 
2593  !! 6a dimensione: variabile dell'anagrafica e dei dati
2594  !! con relativi attributi e in 5 tipi diversi
2595 
2596 if (associated(this%anavar%r)) write(unit=lunit)this%anavar%r
2597 if (associated(this%anavar%i)) write(unit=lunit)this%anavar%i
2598 if (associated(this%anavar%b)) write(unit=lunit)this%anavar%b
2599 if (associated(this%anavar%d)) write(unit=lunit)this%anavar%d
2600 if (associated(this%anavar%c)) write(unit=lunit)this%anavar%c
2601 
2602 if (associated(this%anaattr%r)) write(unit=lunit)this%anaattr%r
2603 if (associated(this%anaattr%i)) write(unit=lunit)this%anaattr%i
2604 if (associated(this%anaattr%b)) write(unit=lunit)this%anaattr%b
2605 if (associated(this%anaattr%d)) write(unit=lunit)this%anaattr%d
2606 if (associated(this%anaattr%c)) write(unit=lunit)this%anaattr%c
2607 
2608 if (associated(this%anavarattr%r)) write(unit=lunit)this%anavarattr%r
2609 if (associated(this%anavarattr%i)) write(unit=lunit)this%anavarattr%i
2610 if (associated(this%anavarattr%b)) write(unit=lunit)this%anavarattr%b
2611 if (associated(this%anavarattr%d)) write(unit=lunit)this%anavarattr%d
2612 if (associated(this%anavarattr%c)) write(unit=lunit)this%anavarattr%c
2613 
2614 if (associated(this%dativar%r)) write(unit=lunit)this%dativar%r
2615 if (associated(this%dativar%i)) write(unit=lunit)this%dativar%i
2616 if (associated(this%dativar%b)) write(unit=lunit)this%dativar%b
2617 if (associated(this%dativar%d)) write(unit=lunit)this%dativar%d
2618 if (associated(this%dativar%c)) write(unit=lunit)this%dativar%c
2619 
2620 if (associated(this%datiattr%r)) write(unit=lunit)this%datiattr%r
2621 if (associated(this%datiattr%i)) write(unit=lunit)this%datiattr%i
2622 if (associated(this%datiattr%b)) write(unit=lunit)this%datiattr%b
2623 if (associated(this%datiattr%d)) write(unit=lunit)this%datiattr%d
2624 if (associated(this%datiattr%c)) write(unit=lunit)this%datiattr%c
2625 
2626 if (associated(this%dativarattr%r)) write(unit=lunit)this%dativarattr%r
2627 if (associated(this%dativarattr%i)) write(unit=lunit)this%dativarattr%i
2628 if (associated(this%dativarattr%b)) write(unit=lunit)this%dativarattr%b
2629 if (associated(this%dativarattr%d)) write(unit=lunit)this%dativarattr%d
2630 if (associated(this%dativarattr%c)) write(unit=lunit)this%dativarattr%c
2631 
2632 !! Volumi di valori e attributi per anagrafica e dati
2633 
2634 if (associated(this%volanar)) write(unit=lunit)this%volanar
2635 if (associated(this%volanaattrr)) write(unit=lunit)this%volanaattrr
2636 if (associated(this%voldatir)) write(unit=lunit)this%voldatir
2637 if (associated(this%voldatiattrr)) write(unit=lunit)this%voldatiattrr
2638 
2639 if (associated(this%volanai)) write(unit=lunit)this%volanai
2640 if (associated(this%volanaattri)) write(unit=lunit)this%volanaattri
2641 if (associated(this%voldatii)) write(unit=lunit)this%voldatii
2642 if (associated(this%voldatiattri)) write(unit=lunit)this%voldatiattri
2643 
2644 if (associated(this%volanab)) write(unit=lunit)this%volanab
2645 if (associated(this%volanaattrb)) write(unit=lunit)this%volanaattrb
2646 if (associated(this%voldatib)) write(unit=lunit)this%voldatib
2647 if (associated(this%voldatiattrb)) write(unit=lunit)this%voldatiattrb
2648 
2649 if (associated(this%volanad)) write(unit=lunit)this%volanad
2650 if (associated(this%volanaattrd)) write(unit=lunit)this%volanaattrd
2651 if (associated(this%voldatid)) write(unit=lunit)this%voldatid
2652 if (associated(this%voldatiattrd)) write(unit=lunit)this%voldatiattrd
2653 
2654 if (associated(this%volanac)) write(unit=lunit)this%volanac
2655 if (associated(this%volanaattrc)) write(unit=lunit)this%volanaattrc
2656 if (associated(this%voldatic)) write(unit=lunit)this%voldatic
2657 if (associated(this%voldatiattrc)) write(unit=lunit)this%voldatiattrc
2658 
2659 if (.not. present(unit)) close(unit=lunit)
2660 
2661 end subroutine vol7d_write_on_file
2662 
2663 
2670 
2671 
2672 subroutine vol7d_read_from_file (this,unit,filename,description,tarray,filename_auto)
2673 
2674 TYPE(vol7d),INTENT(OUT) :: this
2675 integer,intent(inout),optional :: unit
2676 character(len=*),INTENT(in),optional :: filename
2677 character(len=*),intent(out),optional :: filename_auto
2678 character(len=*),INTENT(out),optional :: description
2679 integer,intent(out),optional :: tarray(8)
2680 
2681 
2682 integer :: nana, ntime, ntimerange, nlevel, nnetwork, &
2683  ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2684  ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2685  ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2686  nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2687  nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2688  nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc
2689 
2690 character(len=254) :: ldescription,lfilename,arg
2691 integer :: ltarray(8),lunit,ios
2692 logical :: opened,exist
2693 
2694 
2695 call getarg(0,arg)
2696 
2697 if (.not. present(unit))then
2698  lunit=getunit()
2699 else
2700  if (unit==0)then
2701  lunit=getunit()
2702  unit=lunit
2703  else
2704  lunit=unit
2705  end if
2706 end if
2707 
2708 lfilename=trim(arg)//".v7d"
2709 if (index(arg,'/',back=.true.) > 0) lfilename=lfilename(index(arg,'/',back=.true.)+1 : )
2710 
2711 if (present(filename))then
2712  if (filename /= "")then
2713  lfilename=filename
2714  end if
2715 end if
2716 
2717 if (present(filename_auto))filename_auto=lfilename
2718 
2719 
2720 inquire(unit=lunit,opened=opened)
2721 IF (.NOT. opened) THEN
2722  inquire(file=lfilename,exist=exist)
2723  IF (.NOT.exist) THEN
2724  CALL l4f_log(l4f_fatal, &
2725  'in vol7d_read_from_file, file does not exists, cannot open')
2726  CALL raise_fatal_error()
2727  ENDIF
2728  OPEN(unit=lunit, file=lfilename, form='UNFORMATTED', access='STREAM', &
2729  status='OLD', action='READ')
2730  CALL l4f_log(l4f_info, 'opened: '//trim(lfilename))
2731 end if
2732 
2733 
2734 call init(this)
2735 read(unit=lunit,iostat=ios)ldescription
2736 
2737 if (ios < 0) then ! A negative value indicates that the End of File or End of Record
2738  call vol7d_alloc (this)
2739  call vol7d_alloc_vol (this)
2740  if (present(description))description=ldescription
2741  if (present(tarray))tarray=ltarray
2742  if (.not. present(unit)) close(unit=lunit)
2743 end if
2744 
2745 read(unit=lunit)ltarray
2746 
2747 CALL l4f_log(l4f_info, 'Reading vol7d from file')
2748 CALL l4f_log(l4f_info, 'description: '//trim(ldescription))
2749 CALL l4f_log(l4f_info, 'written on '//trim(to_char(ltarray(1)))//' '// &
2750  trim(to_char(ltarray(2)))//' '//trim(to_char(ltarray(3))))
2751 
2752 if (present(description))description=ldescription
2753 if (present(tarray))tarray=ltarray
2754 
2755 read(unit=lunit)&
2756  nana, ntime, ntimerange, nlevel, nnetwork, &
2757  ndativarr, ndativari, ndativarb, ndativard, ndativarc,&
2758  ndatiattrr, ndatiattri, ndatiattrb, ndatiattrd, ndatiattrc,&
2759  ndativarattrr, ndativarattri, ndativarattrb, ndativarattrd, ndativarattrc,&
2760  nanavarr, nanavari, nanavarb, nanavard, nanavarc,&
2761  nanaattrr, nanaattri, nanaattrb, nanaattrd, nanaattrc,&
2762  nanavarattrr, nanavarattri, nanavarattrb, nanavarattrd, nanavarattrc, &
2763  this%time_definition
2764 
2765 call vol7d_alloc (this, &
2766  nana=nana, ntime=ntime, ntimerange=ntimerange, nlevel=nlevel, nnetwork=nnetwork,&
2767  ndativarr=ndativarr, ndativari=ndativari, ndativarb=ndativarb,&
2768  ndativard=ndativard, ndativarc=ndativarc,&
2769  ndatiattrr=ndatiattrr, ndatiattri=ndatiattri, ndatiattrb=ndatiattrb,&
2770  ndatiattrd=ndatiattrd, ndatiattrc=ndatiattrc,&
2771  ndativarattrr=ndativarattrr, ndativarattri=ndativarattri, ndativarattrb=ndativarattrb, &
2772  ndativarattrd=ndativarattrd, ndativarattrc=ndativarattrc,&
2773  nanavarr=nanavarr, nanavari=nanavari, nanavarb=nanavarb, &
2774  nanavard=nanavard, nanavarc=nanavarc,&
2775  nanaattrr=nanaattrr, nanaattri=nanaattri, nanaattrb=nanaattrb,&
2776  nanaattrd=nanaattrd, nanaattrc=nanaattrc,&
2777  nanavarattrr=nanavarattrr, nanavarattri=nanavarattri, nanavarattrb=nanavarattrb, &
2778  nanavarattrd=nanavarattrd, nanavarattrc=nanavarattrc)
2779 
2780 
2781 if (associated(this%ana)) call read_unit(this%ana, lunit)
2782 if (associated(this%time)) call read_unit(this%time, lunit)
2783 if (associated(this%level)) read(unit=lunit)this%level
2784 if (associated(this%timerange)) read(unit=lunit)this%timerange
2785 if (associated(this%network)) read(unit=lunit)this%network
2786 
2787 if (associated(this%anavar%r)) read(unit=lunit)this%anavar%r
2788 if (associated(this%anavar%i)) read(unit=lunit)this%anavar%i
2789 if (associated(this%anavar%b)) read(unit=lunit)this%anavar%b
2790 if (associated(this%anavar%d)) read(unit=lunit)this%anavar%d
2791 if (associated(this%anavar%c)) read(unit=lunit)this%anavar%c
2792 
2793 if (associated(this%anaattr%r)) read(unit=lunit)this%anaattr%r
2794 if (associated(this%anaattr%i)) read(unit=lunit)this%anaattr%i
2795 if (associated(this%anaattr%b)) read(unit=lunit)this%anaattr%b
2796 if (associated(this%anaattr%d)) read(unit=lunit)this%anaattr%d
2797 if (associated(this%anaattr%c)) read(unit=lunit)this%anaattr%c
2798 
2799 if (associated(this%anavarattr%r)) read(unit=lunit)this%anavarattr%r
2800 if (associated(this%anavarattr%i)) read(unit=lunit)this%anavarattr%i
2801 if (associated(this%anavarattr%b)) read(unit=lunit)this%anavarattr%b
2802 if (associated(this%anavarattr%d)) read(unit=lunit)this%anavarattr%d
2803 if (associated(this%anavarattr%c)) read(unit=lunit)this%anavarattr%c
2804 
2805 if (associated(this%dativar%r)) read(unit=lunit)this%dativar%r
2806 if (associated(this%dativar%i)) read(unit=lunit)this%dativar%i
2807 if (associated(this%dativar%b)) read(unit=lunit)this%dativar%b
2808 if (associated(this%dativar%d)) read(unit=lunit)this%dativar%d
2809 if (associated(this%dativar%c)) read(unit=lunit)this%dativar%c
2810 
2811 if (associated(this%datiattr%r)) read(unit=lunit)this%datiattr%r
2812 if (associated(this%datiattr%i)) read(unit=lunit)this%datiattr%i
2813 if (associated(this%datiattr%b)) read(unit=lunit)this%datiattr%b
2814 if (associated(this%datiattr%d)) read(unit=lunit)this%datiattr%d
2815 if (associated(this%datiattr%c)) read(unit=lunit)this%datiattr%c
2816 
2817 if (associated(this%dativarattr%r)) read(unit=lunit)this%dativarattr%r
2818 if (associated(this%dativarattr%i)) read(unit=lunit)this%dativarattr%i
2819 if (associated(this%dativarattr%b)) read(unit=lunit)this%dativarattr%b
2820 if (associated(this%dativarattr%d)) read(unit=lunit)this%dativarattr%d
2821 if (associated(this%dativarattr%c)) read(unit=lunit)this%dativarattr%c
2822 
2823 call vol7d_alloc_vol (this)
2824 
2825 !! Volumi di valori e attributi per anagrafica e dati
2826 
2827 if (associated(this%volanar)) read(unit=lunit)this%volanar
2828 if (associated(this%volanaattrr)) read(unit=lunit)this%volanaattrr
2829 if (associated(this%voldatir)) read(unit=lunit)this%voldatir
2830 if (associated(this%voldatiattrr)) read(unit=lunit)this%voldatiattrr
2831 
2832 if (associated(this%volanai)) read(unit=lunit)this%volanai
2833 if (associated(this%volanaattri)) read(unit=lunit)this%volanaattri
2834 if (associated(this%voldatii)) read(unit=lunit)this%voldatii
2835 if (associated(this%voldatiattri)) read(unit=lunit)this%voldatiattri
2836 
2837 if (associated(this%volanab)) read(unit=lunit)this%volanab
2838 if (associated(this%volanaattrb)) read(unit=lunit)this%volanaattrb
2839 if (associated(this%voldatib)) read(unit=lunit)this%voldatib
2840 if (associated(this%voldatiattrb)) read(unit=lunit)this%voldatiattrb
2841 
2842 if (associated(this%volanad)) read(unit=lunit)this%volanad
2843 if (associated(this%volanaattrd)) read(unit=lunit)this%volanaattrd
2844 if (associated(this%voldatid)) read(unit=lunit)this%voldatid
2845 if (associated(this%voldatiattrd)) read(unit=lunit)this%voldatiattrd
2846 
2847 if (associated(this%volanac)) read(unit=lunit)this%volanac
2848 if (associated(this%volanaattrc)) read(unit=lunit)this%volanaattrc
2849 if (associated(this%voldatic)) read(unit=lunit)this%voldatic
2850 if (associated(this%voldatiattrc)) read(unit=lunit)this%voldatiattrc
2851 
2852 if (.not. present(unit)) close(unit=lunit)
2853 
2854 end subroutine vol7d_read_from_file
2855 
2856 
2857 ! to double precision
2858 elemental doubleprecision function doubledatd(voldat,var)
2859 doubleprecision,intent(in) :: voldat
2860 type(vol7d_var),intent(in) :: var
2861 
2862 doubledatd=voldat
2863 
2864 end function doubledatd
2865 
2866 
2867 elemental doubleprecision function doubledatr(voldat,var)
2868 real,intent(in) :: voldat
2869 type(vol7d_var),intent(in) :: var
2870 
2871 if (c_e(voldat))then
2872  doubledatr=dble(voldat)
2873 else
2874  doubledatr=dmiss
2875 end if
2876 
2877 end function doubledatr
2878 
2879 
2880 elemental doubleprecision function doubledati(voldat,var)
2881 integer,intent(in) :: voldat
2882 type(vol7d_var),intent(in) :: var
2883 
2884 if (c_e(voldat)) then
2885  if (c_e(var%scalefactor))then
2886  doubledati=dble(voldat)/10.d0**var%scalefactor
2887  else
2888  doubledati=dble(voldat)
2889  endif
2890 else
2891  doubledati=dmiss
2892 end if
2893 
2894 end function doubledati
2895 
2896 
2897 elemental doubleprecision function doubledatb(voldat,var)
2898 integer(kind=int_b),intent(in) :: voldat
2899 type(vol7d_var),intent(in) :: var
2900 
2901 if (c_e(voldat)) then
2902  if (c_e(var%scalefactor))then
2903  doubledatb=dble(voldat)/10.d0**var%scalefactor
2904  else
2905  doubledatb=dble(voldat)
2906  endif
2907 else
2908  doubledatb=dmiss
2909 end if
2910 
2911 end function doubledatb
2912 
2913 
2914 elemental doubleprecision function doubledatc(voldat,var)
2915 CHARACTER(len=vol7d_cdatalen),intent(in) :: voldat
2916 type(vol7d_var),intent(in) :: var
2917 
2918 doubledatc = c2d(voldat)
2919 if (c_e(doubledatc) .and. c_e(var%scalefactor))then
2920  doubledatc=doubledatc/10.d0**var%scalefactor
2921 end if
2922 
2923 end function doubledatc
2924 
2925 
2926 ! to integer
2927 elemental integer function integerdatd(voldat,var)
2928 doubleprecision,intent(in) :: voldat
2929 type(vol7d_var),intent(in) :: var
2930 
2931 if (c_e(voldat))then
2932  if (c_e(var%scalefactor)) then
2933  integerdatd=nint(voldat*10d0**var%scalefactor)
2934  else
2935  integerdatd=nint(voldat)
2936  endif
2937 else
2938  integerdatd=imiss
2939 end if
2940 
2941 end function integerdatd
2942 
2943 
2944 elemental integer function integerdatr(voldat,var)
2945 real,intent(in) :: voldat
2946 type(vol7d_var),intent(in) :: var
2947 
2948 if (c_e(voldat))then
2949  if (c_e(var%scalefactor)) then
2950  integerdatr=nint(voldat*10d0**var%scalefactor)
2951  else
2952  integerdatr=nint(voldat)
2953  endif
2954 else
2955  integerdatr=imiss
2956 end if
2957 
2958 end function integerdatr
2959 
2960 
2961 elemental integer function integerdati(voldat,var)
2962 integer,intent(in) :: voldat
2963 type(vol7d_var),intent(in) :: var
2964 
2965 integerdati=voldat
2966 
2967 end function integerdati
2968 
2969 
2970 elemental integer function integerdatb(voldat,var)
2971 integer(kind=int_b),intent(in) :: voldat
2972 type(vol7d_var),intent(in) :: var
2973 
2974 if (c_e(voldat))then
2975  integerdatb=voldat
2976 else
2977  integerdatb=imiss
2978 end if
2979 
2980 end function integerdatb
2981 
2982 
2983 elemental integer function integerdatc(voldat,var)
2984 CHARACTER(len=vol7d_cdatalen),intent(in) :: voldat
2985 type(vol7d_var),intent(in) :: var
2986 
2987 integerdatc=c2i(voldat)
2988 
2989 end function integerdatc
2990 
2991 
2992 ! to real
2993 elemental real function realdatd(voldat,var)
2994 doubleprecision,intent(in) :: voldat
2995 type(vol7d_var),intent(in) :: var
2996 
2997 if (c_e(voldat))then
2998  realdatd=real(voldat)
2999 else
3000  realdatd=rmiss
3001 end if
3002 
3003 end function realdatd
3004 
3005 
3006 elemental real function realdatr(voldat,var)
3007 real,intent(in) :: voldat
3008 type(vol7d_var),intent(in) :: var
3009 
3010 realdatr=voldat
3011 
3012 end function realdatr
3013 
3014 
3015 elemental real function realdati(voldat,var)
3016 integer,intent(in) :: voldat
3017 type(vol7d_var),intent(in) :: var
3018 
3019 if (c_e(voldat)) then
3020  if (c_e(var%scalefactor))then
3021  realdati=float(voldat)/10.**var%scalefactor
3022  else
3023  realdati=float(voldat)
3024  endif
3025 else
3026  realdati=rmiss
3027 end if
3028 
3029 end function realdati
3030 
3031 
3032 elemental real function realdatb(voldat,var)
3033 integer(kind=int_b),intent(in) :: voldat
3034 type(vol7d_var),intent(in) :: var
3035 
3036 if (c_e(voldat)) then
3037  if (c_e(var%scalefactor))then
3038  realdatb=float(voldat)/10**var%scalefactor
3039  else
3040  realdatb=float(voldat)
3041  endif
3042 else
3043  realdatb=rmiss
3044 end if
3045 
3046 end function realdatb
3047 
3048 
3049 elemental real function realdatc(voldat,var)
3050 CHARACTER(len=vol7d_cdatalen),intent(in) :: voldat
3051 type(vol7d_var),intent(in) :: var
3052 
3053 realdatc=c2r(voldat)
3054 if (c_e(realdatc) .and. c_e(var%scalefactor))then
3055  realdatc=realdatc/10.**var%scalefactor
3056 end if
3057 
3058 end function realdatc
3059 
3060 
3066 FUNCTION realanavol(this, var) RESULT(vol)
3067 TYPE(vol7d),INTENT(in) :: this
3068 TYPE(vol7d_var),INTENT(in) :: var
3069 REAL :: vol(SIZE(this%ana),size(this%network))
3070 
3071 CHARACTER(len=1) :: dtype
3072 INTEGER :: indvar
3073 
3074 dtype = cmiss
3075 indvar = index(this%anavar, var, type=dtype)
3076 
3077 IF (indvar > 0) THEN
3078  SELECT CASE (dtype)
3079  CASE("d")
3080  vol = realdat(this%volanad(:,indvar,:), var)
3081  CASE("r")
3082  vol = this%volanar(:,indvar,:)
3083  CASE("i")
3084  vol = realdat(this%volanai(:,indvar,:), var)
3085  CASE("b")
3086  vol = realdat(this%volanab(:,indvar,:), var)
3087  CASE("c")
3088  vol = realdat(this%volanac(:,indvar,:), var)
3089  CASE default
3090  vol = rmiss
3091  END SELECT
3092 ELSE
3093  vol = rmiss
3094 ENDIF
3095 
3096 END FUNCTION realanavol
3097 
3098 
3104 FUNCTION integeranavol(this, var) RESULT(vol)
3105 TYPE(vol7d),INTENT(in) :: this
3106 TYPE(vol7d_var),INTENT(in) :: var
3107 INTEGER :: vol(SIZE(this%ana),size(this%network))
3108 
3109 CHARACTER(len=1) :: dtype
3110 INTEGER :: indvar
3111 
3112 dtype = cmiss
3113 indvar = index(this%anavar, var, type=dtype)
3114 
3115 IF (indvar > 0) THEN
3116  SELECT CASE (dtype)
3117  CASE("d")
3118  vol = integerdat(this%volanad(:,indvar,:), var)
3119  CASE("r")
3120  vol = integerdat(this%volanar(:,indvar,:), var)
3121  CASE("i")
3122  vol = this%volanai(:,indvar,:)
3123  CASE("b")
3124  vol = integerdat(this%volanab(:,indvar,:), var)
3125  CASE("c")
3126  vol = integerdat(this%volanac(:,indvar,:), var)
3127  CASE default
3128  vol = imiss
3129  END SELECT
3130 ELSE
3131  vol = imiss
3132 ENDIF
3133 
3134 END FUNCTION integeranavol
3135 
3136 
3142 subroutine move_datac (v7d,&
3143  indana,indtime,indlevel,indtimerange,indnetwork,&
3144  indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3145 
3146 TYPE(vol7d),intent(inout) :: v7d
3147 
3148 integer,intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3149 integer,intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3150 integer :: inddativar,inddativarattr
3151 
3152 
3153 do inddativar=1,size(v7d%dativar%c)
3154 
3155  if (c_e(v7d%voldatic(indana,indtime,indlevel,indtimerange,inddativar,indnetwork)) .and. &
3156  .not. c_e(v7d%voldatic(indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew))&
3157  ) then
3158 
3159  ! dati
3160  v7d%voldatic &
3161  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew) = &
3162  v7d%voldatic &
3163  (indana,indtime,indlevel,indtimerange,inddativar,indnetwork)
3164 
3165 
3166  ! attributi
3167  if (associated (v7d%dativarattr%i)) then
3168  inddativarattr = index(v7d%dativarattr%i,v7d%dativar%c(inddativar))
3169  if (inddativarattr > 0 ) then
3170  v7d%voldatiattri &
3171  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3172  v7d%voldatiattri &
3173  (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3174  end if
3175  end if
3176 
3177  if (associated (v7d%dativarattr%r)) then
3178  inddativarattr = index(v7d%dativarattr%r,v7d%dativar%c(inddativar))
3179  if (inddativarattr > 0 ) then
3180  v7d%voldatiattrr &
3181  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3182  v7d%voldatiattrr &
3183  (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3184  end if
3185  end if
3186 
3187  if (associated (v7d%dativarattr%d)) then
3188  inddativarattr = index(v7d%dativarattr%d,v7d%dativar%c(inddativar))
3189  if (inddativarattr > 0 ) then
3190  v7d%voldatiattrd &
3191  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3192  v7d%voldatiattrd &
3193  (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3194  end if
3195  end if
3196 
3197  if (associated (v7d%dativarattr%b)) then
3198  inddativarattr = index(v7d%dativarattr%b,v7d%dativar%c(inddativar))
3199  if (inddativarattr > 0 ) then
3200  v7d%voldatiattrb &
3201  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3202  v7d%voldatiattrb &
3203  (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3204  end if
3205  end if
3206 
3207  if (associated (v7d%dativarattr%c)) then
3208  inddativarattr = index(v7d%dativarattr%c,v7d%dativar%c(inddativar))
3209  if (inddativarattr > 0 ) then
3210  v7d%voldatiattrc &
3211  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3212  v7d%voldatiattrc &
3213  (indana,indtime,indlevel,indtimerange,inddativarattr,indnetwork,:)
3214  end if
3215  end if
3216 
3217  end if
3218 
3219 end do
3220 
3221 end subroutine move_datac
3222 
3228 subroutine move_datar (v7d,&
3229  indana,indtime,indlevel,indtimerange,indnetwork,&
3230  indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew)
3231 
3232 TYPE(vol7d),intent(inout) :: v7d
3233 
3234 integer,intent(in) :: indana,indtime,indlevel,indtimerange,indnetwork
3235 integer,intent(in) :: indananew,indtimenew,indlevelnew,indtimerangenew,indnetworknew
3236 integer :: inddativar,inddativarattr
3237 
3238 
3239 do inddativar=1,size(v7d%dativar%r)
3240 
3241  if (c_e(v7d%voldatir(indana,indtime,indlevel,indtimerange,inddativar,indnetwork)) .and. &
3242  .not. c_e(v7d%voldatir(indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew))&
3243  ) then
3244 
3245  ! dati
3246  v7d%voldatir &
3247  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativar,indnetworknew) = &
3248  v7d%voldatir &
3249  (indana,indtime,indlevel,indtimerange,inddativar,indnetwork)
3250 
3251 
3252  ! attributi
3253  if (associated (v7d%dativarattr%i)) then
3254  inddativarattr = index(v7d%dativarattr%i,v7d%dativar%r(inddativar))
3255  if (inddativarattr > 0 ) then
3256  v7d%voldatiattri &
3257  (indananew,indtimenew,indlevelnew,indtimerangenew,inddativarattr,indnetworknew,:) = &
3258  v7d%voldatiattri &
Index method.

Generated with Doxygen.