source: CONFIG/trunk/SCRIPT/REGRID_forcage/DYN2PHY/phygrid_ncfile.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: 5.2 KB
Line 
1      SUBROUTINE phygrid_ncfile (filename)
2!--------------------------------------------------------------
3!     Prepare a netCDF file for lmdz physics grid
4!
5!     Field units: in this file used by the GCM all units are
6!     in kg-species/m2/s. The fields are modified accordingly.
7!--------------------------------------------------------------
8      USE sflx
9      USE final_grid_lmdz
10      USE grid, ONLY: nrecs
11
12      IMPLICIT NONE
13
14      INCLUDE 'netcdf.inc'
15
16!--------------------------------------------------------------
17!       ... Dummy arguments
18!--------------------------------------------------------------
19      CHARACTER(LEN=*), INTENT(in) :: filename
20
21!--------------------------------------------------------------
22!       ... Local variables
23!--------------------------------------------------------------
24      CHARACTER(LEN=100) :: name
25      INTEGER :: len_name
26      INTEGER :: iret
27      INTEGER :: ncid
28      INTEGER :: i
29
30!     ... Dimension ids
31      INTEGER :: vector_dim
32      INTEGER :: time_dim
33      INTEGER :: lev_dim
34
35!     ... Dimension lengths
36      INTEGER, PARAMETER :: time_len   =  NF_UNLIMITED
37      INTEGER, PARAMETER :: month_len = 12
38
39!     ... Variable ids
40      INTEGER :: vector_id
41      INTEGER :: time_id
42      INTEGER :: lev_id
43      INTEGER :: so4_id
44
45      INTEGER, PARAMETER :: vector_rank = 1
46      INTEGER, PARAMETER :: time_rank = 1
47      INTEGER, PARAMETER :: lev_rank = 1
48
49      INTEGER :: vector_dims(vector_rank)
50      INTEGER :: time_dims(time_rank)
51      INTEGER :: time_start(time_rank), time_count(time_rank)
52      INTEGER :: lev_dims(lev_rank)
53
54      REAL    :: month(month_len)
55      REAL    :: vector (klon)
56      REAL    :: field  (klon, month_len)
57
58      INTEGER, PARAMETER :: so4_rank = 2
59      INTEGER            :: so4_dims(so4_rank)
60
61      DATA month /15.,45.,75.,105.,135.,165.,195.,225.,255.,285.,315.,345./
62
63      DO i = 1, klon
64        vector(i) = FLOAT(i)
65      END DO
66
67!     ... Enter define mode
68      PRINT *, '     Enter netcdf define mode ...'
69      iret = nf_create(filename, NF_CLOBBER, ncid)
70      CALL check_err(iret)
71
72!     ... Define dimensions
73      iret = nf_def_dim(ncid, 'vector', klon, vector_dim)
74      CALL check_err(iret)
75      iret = nf_def_dim(ncid, 'time', NF_UNLIMITED, time_dim)
76      CALL check_err(iret)
77      iret = nf_def_dim(ncid, 'lev', nlev_len, lev_dim)
78      CALL check_err(iret)
79
80      vector_dims(1) = vector_dim
81      iret = nf_def_var(ncid, 'vector', NF_FLOAT, vector_rank, vector_dims, vector_id)
82      CALL check_err(iret)
83      time_dims(1) = time_dim
84      iret = nf_def_var(ncid, 'time', NF_FLOAT, time_rank, time_dims, time_id)
85      CALL check_err(iret)
86      lev_dims(1) = lev_dim
87      iret = nf_def_var(ncid, 'lev', NF_FLOAT, lev_rank, lev_dims, lev_id)
88      CALL check_err(iret)
89
90      name = 'LMDz surface emissions'
91      len_name = LEN_TRIM(ADJUSTL(name))
92      iret = nf_put_att_text(ncid, NF_GLOBAL, 'title', len_name, name(:LEN_TRIM(name)))
93      CALL check_err(iret)
94      name = 'S. Szopa'
95      len_name = LEN_TRIM(ADJUSTL(name))
96      iret = nf_put_att_text(ncid, NF_GLOBAL, 'source', len_name, name(:LEN_TRIM(name)))
97      CALL check_err(iret)
98      name = 'physics grid point'
99      len_name = LEN_TRIM(ADJUSTL(name))
100      iret = nf_put_att_text(ncid, vector_id, 'long_name', len_name, name(:LEN_TRIM(name)))
101      CALL check_err(iret)
102      name = 'index'
103      len_name = LEN_TRIM(ADJUSTL(name))
104      iret = nf_put_att_text(ncid, vector_id, 'units', len_name, name(:LEN_TRIM(name)))
105      CALL check_err(iret)
106      name = 'days since 0000-01-01'
107      len_name = LEN_TRIM(ADJUSTL(name))
108      iret = nf_put_att_text(ncid, time_id, 'units', len_name, name(:LEN_TRIM(name)))
109      CALL check_err(iret)
110      name = 'Time'
111      len_name = LEN_TRIM(ADJUSTL(name))
112      iret = nf_put_att_text(ncid, time_id, 'long_name', len_name, name(:LEN_TRIM(name)))
113      CALL check_err(iret)
114
115!     ... Fields
116      so4_dims(3) = time_dim
117      so4_dims(2) = lev_dim
118      so4_dims(1) = vector_dim
119
120      iret = nf_def_var(ncid, 'so4', NF_FLOAT, so4_rank, so4_dims, so4_id)
121      CALL check_err(iret)
122      name = 'vmr'
123      len_name = LEN_TRIM(ADJUSTL(name))
124      iret = nf_put_att_text(ncid, so4_id, 'units', len_name, name(:LEN_TRIM(name)))
125      CALL check_err(iret)
126      name = 'SO4'
127      len_name = LEN_TRIM(ADJUSTL(name))
128      iret = nf_put_att_text(ncid, so4_id, 'long_name', len_name, name(:LEN_TRIM(name)))
129      CALL check_err(iret)
130
131
132!     ... Leave define mode
133      PRINT *, '     Leave netcdf define mode.'
134      iret = nf_enddef(ncid)
135      CALL check_err(iret)
136
137      PRINT *, '     Store variables ...'
138!     ... Store time
139      time_start(1) = 1
140      time_count(1) = month_len
141      iret = nf_put_vara_real(ncid, time_id, time_start, time_count, month)
142      CALL check_err(iret)
143
144!     ... store vector
145      iret = nf_put_var_real(ncid, vector_id, vector)
146      CALL check_err(iret)
147!     ... store lev
148      iret = nf_put_var_real(ncid, lev_id, nlev)
149      CALL check_err(iret)
150
151!     ... store fields
152
153
154      iret = nf_put_var_real(ncid, so4_id, so4_phy_1x1)
155      CALL check_err(iret)
156
157
158      PRINT *, '     Done phy file.'
159      iret = nf_close(ncid)
160      CALL check_err(iret)
161
162      END SUBROUTINE phygrid_ncfile
Note: See TracBrowser for help on using the repository browser.