da_get_field.inc
References to this file elsewhere.
1 subroutine da_get_field( input_file, var, field_dims, dim1, dim2, dim3,k,field)
2
3 !-----------------------------------------------------------------------
4 ! Purpose: TBD
5 !-----------------------------------------------------------------------
6
7 implicit none
8
9 #include "netcdf.inc"
10
11 character(len=200), intent(in):: input_file ! NETCDF file nane.
12 character(len=10), intent(in) :: var ! Variable to search for.
13 integer, intent(in) :: field_dims ! # Dimensions of field.
14 integer, intent(in) :: dim1 ! Dimension 1 of field.
15 integer, intent(in) :: dim2 ! Dimension 2 of field.
16 integer, intent(in) :: dim3 ! Dimension 3 of field.
17 integer, intent(in) :: k ! Vertical index.
18 real, intent(out) :: field(1:dim1,1:dim2) ! Output field
19
20 integer :: cdfid ! NETCDF file id.
21 integer :: rcode ! Return code(0=ok).
22 integer :: length ! Length of filename.
23 integer :: id_var ! NETCDF variable ID.
24
25 integer :: istart(4) ! Start value of arrays.
26 integer :: iend(4) ! End value of arrays.
27 real(kind=4), allocatable :: field2d(:,:) ! Used if 2D field read.
28 real(kind=4), allocatable :: field3d(:,:,:) ! Used if 3D field read.
29
30 length = len_trim(input_file)
31 rcode = nf_open( input_file(1:length), NF_NOwrite, cdfid)
32
33 ! Check variable is in file:
34 rcode = nf_inq_varid( cdfid, var, id_var)
35 if (rcode /= 0) then
36 write(unit=message(1),fmt='(2a)')var, ' variable is not in input file'
37 call da_error(__FILE__,__LINE__,message(1:1))
38 end if
39
40 istart = 1
41 iend(1) = dim1
42 iend(2) = dim2
43 iend(4) = 1 ! Single time assumed.
44
45 if (field_dims == 2) then
46 iend(3) = 1
47 allocate( field2d(1:dim1,1:dim2))
48 call ncvgt( cdfid, id_var, istart, iend, field2d, rcode)
49 field(:,:) = field2d(:,:)
50 rcode = nf_close( cdfid)
51 deallocate( field2d)
52 else if (field_dims == 3) then
53 iend(3) = dim3
54 allocate( field3d(1:dim1,1:dim2,1:dim3))
55 call ncvgt( cdfid, id_var, istart, iend, field3d, rcode)
56 field(:,:) = field3d(:,:,k)
57 deallocate( field3d)
58 end if
59
60 rcode = nf_close( cdfid)
61
62 end subroutine da_get_field
63
64