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 if (trace_use_dull) call da_trace_entry("da_get_field")
31
32 length = len_trim(input_file)
33 rcode = nf_open( input_file(1:length), NF_NOwrite, cdfid)
34
35 ! Check variable is in file:
36 rcode = nf_inq_varid( cdfid, var, id_var)
37 if (rcode /= 0) then
38 write(unit=message(1),fmt='(2a)')var, ' variable is not in input file'
39 call da_error(__FILE__,__LINE__,message(1:1))
40 end if
41
42 istart = 1
43 iend(1) = dim1
44 iend(2) = dim2
45 iend(4) = 1 ! Single time assumed.
46
47 if (field_dims == 2) then
48 iend(3) = 1
49 allocate( field2d(1:dim1,1:dim2))
50 call ncvgt( cdfid, id_var, istart, iend, field2d, rcode)
51 field(:,:) = field2d(:,:)
52 rcode = nf_close( cdfid)
53 deallocate( field2d)
54 else if (field_dims == 3) then
55 iend(3) = dim3
56 allocate( field3d(1:dim1,1:dim2,1:dim3))
57 call ncvgt( cdfid, id_var, istart, iend, field3d, rcode)
58 field(:,:) = field3d(:,:,k)
59 deallocate( field3d)
60 end if
61
62 rcode = nf_close( cdfid)
63
64 if (trace_use_dull) call da_trace_exit("da_get_field")
65
66 end subroutine da_get_field
67
68