-
Notifications
You must be signed in to change notification settings - Fork 0
/
nc_get4Dvar.F90
81 lines (65 loc) · 2.67 KB
/
nc_get4Dvar.F90
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! svn propset svn:keywords "URL Rev Author Date Id"
! $URL: file:///neem/users/huangwei/.vdras_source_code/SVN_REPOSITORY/trunk/vdras/io/netcdf4/nc_get5Dvar.F90 $
! $Rev: 144 $
! $Author: huangwei $
! $Date: 2010-11-15 10:33:52 -0700 (Mon, 15 Nov 2010) $
! $Id: nc_get5Dvar.F90 144 2010-11-15 17:33:52Z huangwei $
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine nc_get4Dvar(ncid, var_name, var, nrec, &
nxs, nxe, nys, nye, nzs, nze, nobs)
use netcdf
implicit none
integer, intent(in) :: ncid, nrec
integer, intent(in) :: nxs, nxe, nys, nye, nzs, nze, nobs
character(len = *), intent(in) :: var_name
real(kind=8), dimension(nxs:nxe, nys:nye, nzs:nze, nobs), intent(out) :: var
integer, dimension(5) :: start, count
! Variable id
integer :: varid
! Return status
integer :: status
status = nf90_inq_varid(ncid, var_name, varid)
if(status /= nf90_noerr) then
write(unit=0, fmt='(3a)') "Problem to get id for: <", trim(var_name), ">.", &
"Error status: ", trim(nf90_strerror(status))
write(unit=0, fmt='(3a, i4)') &
"Stop in file: <", __FILE__, ">, line: ", __LINE__
stop
end if
start(1) = nxs
start(2) = nys
start(3) = nzs
start(4) = 1
start(5) = nrec
count(1) = nxe - nxs + 1
count(2) = nye - nys + 1
count(3) = nze - nzs + 1
count(4) = nobs
count(5) = 1
#if 0
write(unit=0, fmt='(a, 4i5)') 'ncid=', ncid
write(unit=0, fmt='(a, 4i5)') 'varid=', varid
write(unit=0, fmt='(a, a/)') 'var_name=', var_name
write(unit=0, fmt='(a, 4i5)') 'nxs, nys, nzs=', nxs, nys, nzs
write(unit=0, fmt='(a, 4i5)') 'nxe, nye, nze=', nxe, nye, nze
write(unit=0, fmt='(a, 4i5)') 'nrec=', nrec
write(unit=0, fmt='(a, i5)') 'start(1)=', start(1)
write(unit=0, fmt='(a, i5)') 'start(2)=', start(2)
write(unit=0, fmt='(a, i5)') 'start(3)=', start(3)
write(unit=0, fmt='(a, i5)') 'start(4)=', start(4)
write(unit=0, fmt='(a, i5)') 'count(1)=', count(1)
write(unit=0, fmt='(a, i5)') 'count(2)=', count(2)
write(unit=0, fmt='(a, i5)') 'count(3)=', count(3)
write(unit=0, fmt='(a, i5)') 'count(4)=', count(4)
write(unit=0, fmt='(a, i5)') 'count(5)=', count(5)
#endif
status = nf90_get_var(ncid,varid,var,start=start,count=count)
if(status /= nf90_noerr) then
write(unit=0, fmt='(3a)') "Problem to read: <", trim(var_name), ">.", &
"Error status: ", trim(nf90_strerror(status))
write(unit=0, fmt='(3a, i4)') &
"Stop in file: <", __FILE__, ">, line: ", __LINE__
stop
end if
end subroutine nc_get4Dvar