/[MITgcm]/MITgcm_contrib/ocean_inversion_project/write_netCDF/write_nc_basisfnctns.F
ViewVC logotype

Contents of /MITgcm_contrib/ocean_inversion_project/write_netCDF/write_nc_basisfnctns.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Tue Oct 21 06:21:52 2003 UTC (21 years, 9 months ago) by dimitri
Branch: MAIN
CVS Tags: HEAD
added netcdf output files

1 !_ ---------------------------------------------------------------------
2 !_ RCS lines preceded by "c_ "
3 !_ ---------------------------------------------------------------------
4 !_
5 !_ $Revision: 1.1 $
6 !_ $Date: 1999/11/18 17:20:23 $ ; $State: Exp $
7 !_ $Author: rdslater $ ; $Locker: $
8 !_ $Revised for use in Ocean inversion project by sfletcher
9 !_
10 !_ ---------------------------------------------------------------------
11 !_ $Log: write_nc_basisfnctns.f,v $
12 !_ Revision 1.1 1999/11/18 17:20:23 rdslater
13 !_ Initial conversion of OCMIP-2 routines.
14 !_
15 !_Revision1.5 2003/2/12 sfletcher
16 !_corrected for some errors
17 !_
18 !_ Revision 1.4 2003/2/12 sfletcher
19 !_Modified to write dye tracers for ocean inversion
20 !_
21 !_ Revision 1.3 1999/10/19 10:36:44 jomce
22 !_ Split RCS file and revision indicator across two lines (< 72 chars)
23 !_
24 !_ Revision 1.2 1999/10/19 09:46:26 jomce
25 !_ Added "a" to end of filename (root) to identify annual files (nt=1)
26 !_ Added string to identify RCS filename and revision
27 !_
28 !_ Revision 1.1 1999/10/04 12:38:48 orr
29 !_ Initial revision
30 !_
31 !_ ---------------------------------------------------------------------
32 !_
33 !***********************************************************************
34 !
35 ! NAME: WRITE_NC_basisfnctns
36 !
37 ! INPUT:
38 ! group= group code (ex: IPSL)
39 ! production= production (model and version ex: OPA 8.1)
40 ! run=Timedep or Stationary
41 ! imt= dimension
42 ! jmt= dimension
43 ! kmt= dimension
44 ! ndyetrac=number of dye tracers
45 ! year= year of simulation [years]
46 ! nb_seconds_per_year= following your model year [s]
47 ! nb_timesteps_per_year= following your model timestep
48 !
49 ! dye_arr= Concentration of dye tracer [mol/cm^3]
50 !
51 ! OUTPUT FILE:
52 ! A netcdf file (clobbed if exists) with
53 ! the filename group_dye_basisfnctns.nc
54 !
55 !***********************************************************************
56
57 SUBROUTINE WRITE_NC_basisfnctns(
58 & group,production,run,
59 & imt,jmt,kmt,ndyetrac,
60 & year,nb_seconds_per_year,nb_timesteps_per_year,
61 & dye_arr)
62
63 ! No implicit declarations
64 IMPLICIT NONE
65
66 ! Arguments
67 CHARACTER*(*) group
68 CHARACTER*(*) run
69 CHARACTER*(*) production
70 INTEGER imt,jmt,kmt,ndyetrac
71 INTEGER year
72 INTEGER nb_seconds_per_year
73 INTEGER nb_timesteps_per_year
74 REAL dye_arr(imt,jmt,kmt,ndyetrac)
75
76 ! Constants
77 REAL missing_value
78 PARAMETER (missing_value=-1.E+34)
79
80 ! Local variables
81 CHARACTER*256 string256,filename
82 CHARACTER*4 string4
83 INTEGER I
84
85 ! Function
86 ! INTEGER LEN_TRIM
87
88 ! NetCDF variables
89
90 include "netcdf.inc"
91
92 INTEGER NC_ID
93 INTEGER STATUS
94 INTEGER LON_DIM
95 INTEGER LAT_DIM
96 INTEGER DEPTH_DIM
97 INTEGER TRAC_DIM
98 INTEGER DYE_ID
99 INTEGER DIMS_4D(4)
100
101 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
102 ! Build the NetCDF filename
103 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
104 WRITE(string4,'(I4.4)') year
105
106 filename=group//'_'//run//'_BasisFNCTNS_'//
107 & string4//'.nc'
108
109 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
110 ! Open the NetCDF file
111 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
112 STATUS=NF_CREATE(filename,NF_CLOBBER,NC_ID)
113 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
114
115 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
116 ! Define dimensions
117 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
118 STATUS=NF_DEF_DIM(NC_ID,'x',imt,LON_DIM)
119 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
120
121 STATUS=NF_DEF_DIM(NC_ID,'y',jmt,LAT_DIM)
122 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
123
124 STATUS=NF_DEF_DIM(NC_ID,'depth',kmt,DEPTH_DIM)
125 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
126
127 STATUS=NF_DEF_DIM(NC_ID,'tracer',ndyetrac,TRAC_DIM)
128 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
129
130
131
132 !---------------------------------------------------------
133 DIMS_4D(1)=LON_DIM
134 DIMS_4D(2)=LAT_DIM
135 DIMS_4D(3)=DEPTH_DIM
136 DIMS_4D(4)=TRAC_DIM
137 STATUS=NF_DEF_VAR(NC_ID,'DYE',NF_FLOAT,
138 & 4,DIMS_4D,DYE_ID)
139 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
140
141 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
142 ! Define global attributes
143 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
144 string256='$RCSfile: write_nc_basisfnctns.F,v $'
145 & //'$Revision: 1.1 $'
146 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,
147 & 'output_routine',LEN_TRIM(string256),string256)
148 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
149
150 !---------------------------------------------------------
151 string256='GDT 1.2'
152 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'Conventions',
153 & LEN_TRIM(string256),string256)
154 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
155
156 !---------------------------------------------------------
157 string256=filename
158 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'file_name',
159 & LEN_TRIM(string256),string256)
160 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
161
162 !---------------------------------------------------------
163 string256=group//'_grid.nc'
164 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'associate_file',
165 & LEN_TRIM(string256),string256)
166 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
167
168 !---------------------------------------------------------
169 string256='Ocean Inversion Project'
170 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'project',
171 & LEN_TRIM(string256),string256)
172 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
173
174 !---------------------------------------------------------
175 string256=group
176 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'institution',
177 & LEN_TRIM(string256),string256)
178 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
179
180 !---------------------------------------------------------
181 string256=production
182 STATUS=NF_PUT_ATT_TEXT(NC_ID,NF_GLOBAL,'production',
183 & LEN_TRIM(string256),string256)
184 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
185
186 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
187 ! Define variable attributes
188 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189
190
191 STATUS=NF_PUT_ATT_INT(NC_ID,DYE_ID,'nb_seconds_per_year',
192 & NF_INT,1,nb_seconds_per_year)
193 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
194
195 STATUS=NF_PUT_ATT_INT(NC_ID,DYE_ID,'nb_timesteps_per_year',
196 & NF_INT,1,nb_timesteps_per_year)
197 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
198
199 !---------------------------------------------------------
200 string256='Concentration of Dye Tracer'
201 STATUS=NF_PUT_ATT_TEXT(NC_ID,DYE_ID,'long_name',
202 & LEN_TRIM(string256),string256)
203 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
204
205 string256='mol/cm^3'
206 STATUS=NF_PUT_ATT_TEXT(NC_ID,DYE_ID,'units',
207 & LEN_TRIM(string256),string256)
208 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
209
210 STATUS=NF_PUT_ATT_REAL(NC_ID,DYE_ID,'missing_value',
211 & NF_FLOAT,1,missing_value)
212 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
213
214
215 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
216 ! End of define mode
217 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
218 STATUS=NF_ENDDEF(NC_ID)
219 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
220
221 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
222 ! Write data to file
223 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
224
225
226 STATUS=NF_PUT_VAR_REAL(NC_ID,DYE_ID,dye_arr)
227 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
228
229 !---------------------------------------------------------
230 ! Close the NetCDF file
231 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
232 STATUS=NF_CLOSE(NC_ID)
233 IF (STATUS.NE.NF_NOERR) CALL HANDLE_ERRORS(STATUS)
234
235 END

  ViewVC Help
Powered by ViewVC 1.1.22