source: CONFIG/trunk/SCRIPT/REGRID_forcage/get_grid.f @ 1356

Last change on this file since 1356 was 1356, checked in by acosce, 13 years ago

scripts pour regriller les fichiers d'input

File size: 3.2 KB
Line 
1      SUBROUTINE get_grid (filename)
2!--------------------------------------------------------------
3!     get the file grid
4!--------------------------------------------------------------
5      USE grid
6
7      IMPLICIT NONE
8
9      INCLUDE 'netcdf.inc'
10
11!--------------------------------------------------------------
12!       ... Dummy arguments
13!--------------------------------------------------------------
14      CHARACTER(LEN=*), INTENT(in) :: filename
15
16!--------------------------------------------------------------
17!       ... Local variables
18!--------------------------------------------------------------
19      INTEGER :: i, j
20      INTEGER :: iret
21      INTEGER :: error
22      INTEGER :: ncid
23      INTEGER :: varid
24      INTEGER :: recid
25      CHARACTER(LEN=NF_MAX_NAME) :: recname
26
27      REAL    :: d2r, pi
28
29      pi     = 4.*ATAN(1.)
30      d2r    = pi/180.
31
32      PRINT *, 'Prepare grid coordinates for file ', filename(:LEN_TRIM(filename)), ' ...'
33
34      ! ... Free space if needed
35      IF ( ALLOCATED(lat) )      DEALLOCATE(lat)
36      IF ( ALLOCATED(lon) )      DEALLOCATE(lon)
37      IF ( ALLOCATED(lat_edge) ) DEALLOCATE(lat_edge)
38      IF ( ALLOCATED(lon_edge) ) DEALLOCATE(lon_edge)
39      IF ( ALLOCATED(area_in) )  DEALLOCATE(area_in)
40
41      ! ... Open the file
42      iret = nf_open(filename, 0, ncid)
43      CALL check_err(iret)
44
45
46      ! ... Get the vector lengths
47      iret = nf_inq_dimid(ncid, 'latu', varid)
48      CALL check_err(iret)
49      iret = nf_inq_dimlen(ncid, varid, lat_len)
50      CALL check_err(iret)
51
52      iret = nf_inq_dimid(ncid, 'lonv', varid)
53      CALL check_err(iret)
54      iret = nf_inq_dimlen(ncid, varid, lon_len)
55      CALL check_err(iret)
56
57      ! ... Allocate grid variables
58      ALLOCATE(lat(lat_len), STAT=error)
59      IF (error /= 0) STOP 'Space requested not possible'
60      ALLOCATE(lon(lon_len), STAT=error)
61      IF (error /= 0) STOP 'Space requested not possible'
62
63      ! ... Get the coordinates
64      iret = nf_inq_varid(ncid, 'latu', varid)
65      CALL check_err(iret)
66      iret = nf_get_var_real(ncid, varid, lat)
67      CALL check_err(iret)
68      iret = nf_inq_varid(ncid, 'lonv', varid)
69      CALL check_err(iret)
70      iret = nf_get_var_real(ncid, varid, lon)
71      CALL check_err(iret)
72
73      ! ... Additional variables
74      klon_init     = (lat_len - 2) * (lon_len - 1) + 2
75      print*,'klon_init',klon_init
76
77
78      ! ... Latitudes need to be reversed
79
80      ALLOCATE(latbis(lat_len), STAT=error)
81      IF (error /= 0) STOP 'Space requested not possible'
82
83      latbis(1:lat_len) = lat(lat_len:1:-1) 
84      lat=latbis
85
86      lat_edge_len = lat_len + 1
87      lon_edge_len = lon_len + 1
88      ALLOCATE(lat_edge(lat_edge_len), STAT=error)
89      IF (error /= 0) STOP 'Space requested not possible'
90      ALLOCATE(lon_edge(lon_edge_len), STAT=error)
91      IF (error /= 0) STOP 'Space requested not possible'
92
93      lon_edge (1) = -180.
94      lon_edge (2) = -178.125
95      DO i = 3, lon_edge_len-1
96      lon_edge (i) = lon_edge (i-1) + 3.75 
97      ENDDO
98      lon_edge (lon_edge_len) = 180.
99
100      lat_edge (1) = -90.
101      lat_edge (2) = -88.75
102      DO i = 3, lat_edge_len-1 
103      lat_edge (i) = lat_edge (i-1) + 2.5
104      ENDDO
105      lat_edge (lat_edge_len) = 90.
106
107      END SUBROUTINE get_grid
108 
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
Note: See TracBrowser for help on using the repository browser.