source: LMDZ5/branches/IPSLCM6.0.10/tools/Max_diff_nc_with_lib/Jumble/csvread.f90

Last change on this file was 1910, checked in by Laurent Fairhead, 11 years ago

Merged trunk changes r1860:1909 into testing branch

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 3.2 KB
Line 
1module csvread_m
2
3  use new_unit_m, only: new_unit
4  use prep_file_m, only: prep_file
5
6  implicit none
7
8  private
9  public csvread
10
11  interface csvread
12     ! Reads numeric values from a file.
13     ! Values must be separated by comma and/or blanks.
14     ! Values are read into a default real kind or double precision array.
15     ! The last column and/or last row parameters may be 0.
16     ! This is interpreted as "last in the file".
17     ! The only difference between the interfaces of the specific
18     ! procedures is the type of "a".
19     module procedure csvread_sp, csvread_dp
20  end interface
21 
22contains
23
24  subroutine csvread_sp(file, a, first_r, first_c, last_r, last_c)
25
26    character(len=*), intent(in):: file
27    real, pointer:: a(:,:)
28    integer, intent(in), optional:: first_r ! (first row to read)
29    integer, intent(in), optional:: first_c ! (first column to read)
30    integer, intent(in), optional:: last_r ! (last row to read)
31    integer, intent(in), optional:: last_c ! (last column to read)
32
33    ! Variables local to the subprogram:
34    integer i, j, unit
35    integer f_r_loc ! (first row to read, local variable)
36    integer f_c_loc ! (first column to read, local variable)
37    integer l_r_loc ! (last row to read, local variable)
38    integer l_c_loc ! (last column to read, local variable)
39    real trash
40
41    !------------------------------------------------------
42
43    print *, 'Reading data from file "' // file // '"'
44    call new_unit(unit)
45    open(unit, file=file, status='old', action='read', position='rewind')
46
47    call prep_file(unit, first_r, first_c, last_r, last_c, f_r_loc, &
48         f_c_loc, l_r_loc, l_c_loc)
49
50    allocate(a(l_r_loc - f_r_loc + 1, l_c_loc - f_c_loc + 1))
51
52    do i = 1, l_r_loc - f_r_loc + 1
53       read(unit, fmt=*) (trash, j = 1, f_c_loc - 1), a(i, :)
54    end do
55
56    close(unit)
57
58  end subroutine csvread_sp
59
60  !***********************************************************
61
62  subroutine csvread_dp(file, a, first_r, first_c, last_r, last_c)
63
64    character(len=*), intent(in):: file
65    double precision, pointer:: a(:,:)
66    integer, intent(in), optional:: first_r ! (first row to read)
67    integer, intent(in), optional:: first_c ! (first column to read)
68    integer, intent(in), optional:: last_r ! (last row to read)
69    integer, intent(in), optional:: last_c ! (last column to read)
70
71    ! Variables local to the subprogram:
72    integer i, j, unit
73    integer f_r_loc ! (first row to read, local variable)
74    integer f_c_loc ! (first column to read, local variable)
75    integer l_r_loc ! (last row to read, local variable)
76    integer l_c_loc ! (last column to read, local variable)
77    double precision trash
78
79    !------------------------------------------------------
80
81    print *, 'Reading data from file "' // file // '"'
82    call new_unit(unit)
83    open(unit, file=file, status='old', action='read', position='rewind')
84
85    call prep_file(unit, first_r, first_c, last_r, last_c, f_r_loc, &
86         f_c_loc, l_r_loc, l_c_loc)
87
88    allocate(a(l_r_loc - f_r_loc + 1, l_c_loc - f_c_loc + 1))
89
90    do i = 1, l_r_loc - f_r_loc + 1
91       read(unit, fmt=*) (trash, j = 1, f_c_loc - 1), a(i, :)
92    end do
93
94    close(unit)
95
96  end subroutine csvread_dp
97
98end module csvread_m
Note: See TracBrowser for help on using the repository browser.