source: flexpart.git/flexpart_code/fpmetbinary_mod.F90 @ b398fb6

fp9.3.1-20161214-nc4
Last change on this file since b398fb6 was b398fb6, checked in by Don Morton <Don.Morton@…>, 7 years ago

Branch fp9.3.1-20161214-nc4 fpmetbinary_mod.F90 so that it
has separate routines for raw binary or NC4 I/O

  • Property mode set to 100644
File size: 146.1 KB
Line 
1MODULE fpmetbinary_mod
2
3  !*****************************************************************************
4  !                                                                            *
5  !     Contains data and routines for dumping and loading processed met       *
6  !     fields.                                                                *
7  !     Authors Don Morton (Don.Morton@borealscicomp.com)                      *
8  !             Delia Arnold (deliona.arnold@gmail.com)                        *
9  !                                                                            *
10  !     07 Oct 2016                                                            *
11  !                                                                            *
12  !     Most of the data structures from com_mod.f90 that are dumped and       *
13  !     loaded have a final dimension of size two, so that they may hold data  *
14  !     from two met files.  When we dump the contents into a .fp file, we     *
15  !     need to specify which of the two to dump.  Likewise, when we load      *
16  !     from a .fp file, we need to specify which of the two possible indices  *
17  !     to load into.                                                          *
18  !                                                                            *
19  !     Note that these routines need more robustness.  For example, what      *
20  !     what happens if the filename can't be read or written.  Or, what       *
21  !     happens if a read or write fails in any way.  Right now, it's crash    *
22  !     city.                                                                  *
23  !                                                                            *
24  !     Recent enhancements (07 Oct 2016) DJM:                                 *
25  !                                                                            *
26  !     - file format changed so that compiled dimensions are output, and      *
27  !       during input these same dimensions are compared with the dimensions  *
28  !       compiled into the flexpart that is reading it.  A discrepancy        *
29  !       causes abort, so that time isn't wasted reading an incompatible      *
30  !       file.                                                                *
31  !                                                                            *
32  !     - file format changed so that first item is an 8-character string      *
33  !       depicting the version of the preprocessed file format.               *
34  !       An inconsistency between a detected and expected string results      *
35  !       in program abort.                                                    *
36  !                                                                            *
37  !       *** IMPORTANT *** - when the format of the preprocessed output is    *
38  !       modified in any way, be sure to change the version string below,     *
39  !       PREPROC_FORMAT_VERSION_STR, so that attempts to read the output      *
40  !       with a different format version will cause an abort.                 *
41  !                                                                            *
42  !*****************************************************************************
43
44    USE com_mod
45    USE conv_mod
46    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
47&                       maxnests, nxmaxn, nymaxn
48
49    USE netcdf
50
51    IMPLICIT NONE
52
53    ! Users may want to change these IO Unit values if they conflict with other parts
54    ! of code
55    INTEGER, PARAMETER :: IOUNIT_DUMP = 33, IOUNIT_LOAD = 34, &
56                          IOUNIT_TEXTOUT = 35
57                         
58                   
59    INTEGER, PARAMETER :: PREPROC_FMT_STR_DIM = 11
60
61    ! When a change is made to the format of the preprocessed file, such that
62    ! this routine will not be able to read a previous version, this version
63    ! string should be modified
64
65
66    ! WARNING - for now, for NC4 compatability, make sure that the PREPROC_FMT_STR_DIM
67    ! defined above is exactly the length of the string PLUS the null character added
68    ! I've had a hell of a time making it all compatible with NC4 (DJM)
69    CHARACTER(LEN=PREPROC_FMT_STR_DIM), PARAMETER :: PREPROC_FORMAT_VERSION_STR = 'FP_p-9.3.1'//char(0)
70
71    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
72&           PREPROC_FORMAT_VERSION_STR
73
74
75CONTAINS
76
77  !*****************************************************************************
78  !                                                                            *
79  !    Subroutines fpmetbinary_dump() and fpmetbinary_load() provide the       *
80  !    public interface to                                                     *
81  !    this module functionality.  I created the PRIVATE fpio() because I      *
82  !    wanted all interactions with variables to be in one place.  The read    *
83  !    and write operations need to be done in exactly the same sequence, so   *
84  !    I felt like keeping them in the same routine would at least allow for   *
85  !    coders to more easily compare the two sequences than if they were       *
86  !    separate.                                                               *
87  !                                                                            *
88  !    As mentioned above, the dumps and loads will, for most variables,       *
89  !    need to refer to one of two index values for the last dimension of      *
90  !    the array.                                                              *
91  !                                                                            *
92  !*****************************************************************************
93
94
95    SUBROUTINE fpmetbinary_dump(filename, cm_index)
96        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
97        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
98                                                  ! most com_mod variables.
99                                                  ! Should be 1 or 2
100
101        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
102
103        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
104
105        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
106
107        ! Create and open NC4 file for writing
108        PRINT *, 'Opening NC4 file...'
109        ncretval = nf90_create(filename, &
110&                              OR(NF90_CLOBBER, NF90_HDF5), &
111&                              ncid)
112
113
114
115        CALL fpio(ncid, 'DUMP', cm_index)
116
117        PRINT *, 'Closing NC4 file...'
118        ncretval = nf90_close(ncid)
119
120        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
121
122        !PRINT *, 'Dump walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
123    END SUBROUTINE fpmetbinary_dump
124
125    SUBROUTINE fpmetbinary_load(filename, cm_index)
126        CHARACTER(LEN=*), INTENT(IN) :: filename  ! Full path for file
127        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
128                                                  ! most com_mod variables.
129                                                  ! Should be 1 or 2
130
131        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
132
133        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
134
135        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
136
137PRINT *, "filename: ", filename
138PRINT *, "Opening nc file for reading: ", filename
139        ncretval = nf90_open(filename, NF90_NOWRITE, ncid)
140        call handle_nf90_err(ncretval)
141PRINT *, 'OPENED NC4 FILE FOR READING...'
142
143
144        CALL fpio(ncid, 'LOAD', cm_index)
145
146        CALL SYSTEM_CLOCK(millisecs_stop, count_rate, count_max)
147        !PRINT *, 'Load walltime secs: ', (millisecs_stop-millisecs_start)/1000.0
148    END SUBROUTINE fpmetbinary_load
149
150
151
152
153    SUBROUTINE fpio(ncid, op, cm_index)
154        IMPLICIT NONE
155        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
156        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
157        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
158                                                  ! most com_mod variables.
159                                                  ! Should be 1 or 2
160
161
162        ! Helper functions (in this module)
163        !INTEGER :: logical2integer
164        !LOGICAL :: integer2logical
165
166        INTEGER :: temp_integer   ! temporary value
167        INTEGER :: ncret          ! Return value from NetCDF calls
168        INTEGER :: ncvarid          ! NetCDF variable ID
169
170        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
171&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
172&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid, &
173&                  nconvlevmax_dimid, na_dimid, preproc_fmt_str_dimid
174
175
176        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
177        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
178        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
179        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
180        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
181
182
183
184
185        ! These are used when loading in dimensions from NC file
186        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
187&                                       nuvzmax_dimname, nwzmax_dimname,&
188&                                       maxspec_dimname, numclass_dimname,&
189&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
190&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
191&                                       polemap_dimname, nconvlevmax_dimname, na_dimname, &
192&                                       preproc_fmt_str_dimname
193
194        ! These are temporary variables, used in the LOAD option, for
195        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
196        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
197&                  temp_nuvzmax, temp_nwzmax, &
198&                  temp_maxspec, temp_numclass,&
199&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
200
201        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
202
203        CHARACTER(LEN=128) :: errmesg
204
205        INTEGER, PARAMETER :: DEF_LEVEL = 3
206
207        if (op == 'DUMP') THEN
208
209
210            ! Write the preprocessing format version string
211            !  NEED TO FILL THIS IN FOR NC4
212
213
214
215
216            ! Write the compiled max dimensions from par_mod - these are
217            ! not meant to be reassigned during a LOAD, but used as "header"
218            ! information to provide the structure of arrays
219
220
221
222            ! Dimension for the preprocessing format string
223            ncret = nf90_def_dim(ncid, 'preproc_fmt_str_dim', PREPROC_FMT_STR_DIM, &
224&                                preproc_fmt_str_dimid)
225            call handle_nf90_err(ncret)
226PRINT *, '1'
227
228
229            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
230            call handle_nf90_err(ncret)
231            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
232            call handle_nf90_err(ncret)
233            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
234            call handle_nf90_err(ncret)
235            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
236            call handle_nf90_err(ncret)
237            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
238            call handle_nf90_err(ncret)
239            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
240            call handle_nf90_err(ncret)
241            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
242            call handle_nf90_err(ncret)
243
244            ! There are a handful of variables indexed from 0 to n, rather than 0 to n-1,
245            ! so these dimensions handle that.  What a pain.
246            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
247            call handle_nf90_err(ncret)
248            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
249            call handle_nf90_err(ncret)
250
251            ! This is for a couple of small arrays that store polar stereographic stuff
252            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
253            call handle_nf90_err(ncret)
254
255            ! These two values come from conv_mod
256            ncret = nf90_def_dim(ncid, 'nconvlevmax_dim', nconvlevmax, nconvlevmax_dimid)
257            call handle_nf90_err(ncret)
258            ncret = nf90_def_dim(ncid, 'na_dim', na, na_dimid)
259            call handle_nf90_err(ncret)
260
261            ! Scalar values
262
263
264            dim1dids = (/preproc_fmt_str_dimid/)
265            ncret = nf90_def_var(ncid, 'preproc_fmt_str', NF90_CHAR, &
266&                                       dim1dids, ncvarid)
267            call handle_nf90_err(ncret)
268            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
269&                                        shuffle=0,     &
270&                                        deflate=1,     &
271&                                        deflate_level=DEF_LEVEL)
272            call handle_nf90_err(ncret)
273            ncret = nf90_put_var(ncid, ncvarid, PREPROC_FORMAT_VERSION_STR(1:preproc_fmt_str_dim))
274            call handle_nf90_err(ncret)
275
276
277            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
278            call handle_nf90_err(ncret)
279            ncret = nf90_put_var(ncid, ncvarid, nx)
280            call handle_nf90_err(ncret)
281
282            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
283            call handle_nf90_err(ncret)
284            ncret = nf90_put_var(ncid, ncvarid, ny)
285            call handle_nf90_err(ncret)
286
287            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
288            call handle_nf90_err(ncret)
289            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
290            call handle_nf90_err(ncret)
291
292            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
293            call handle_nf90_err(ncret)
294            ncret = nf90_put_var(ncid, ncvarid, nymin1)
295            call handle_nf90_err(ncret)
296
297            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
298            call handle_nf90_err(ncret)
299            ncret = nf90_put_var(ncid, ncvarid, nxfield)
300            call handle_nf90_err(ncret)
301
302            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
303            call handle_nf90_err(ncret)
304            ncret = nf90_put_var(ncid, ncvarid, nuvz)
305            call handle_nf90_err(ncret)
306
307            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
308            call handle_nf90_err(ncret)
309            ncret = nf90_put_var(ncid, ncvarid, nwz)
310            call handle_nf90_err(ncret)
311
312            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
313            call handle_nf90_err(ncret)
314            ncret = nf90_put_var(ncid, ncvarid, nz)
315            call handle_nf90_err(ncret)
316
317            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
318            call handle_nf90_err(ncret)
319            ncret = nf90_put_var(ncid, ncvarid, nmixz)
320            call handle_nf90_err(ncret)
321
322            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
323            call handle_nf90_err(ncret)
324            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
325            call handle_nf90_err(ncret)
326
327            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
328            call handle_nf90_err(ncret)
329            ncret = nf90_put_var(ncid, ncvarid, dx)
330            call handle_nf90_err(ncret)
331
332            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
333            call handle_nf90_err(ncret)
334            ncret = nf90_put_var(ncid, ncvarid, dy)
335            call handle_nf90_err(ncret)
336
337            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
338            call handle_nf90_err(ncret)
339            ncret = nf90_put_var(ncid, ncvarid, xlon0)
340            call handle_nf90_err(ncret)
341
342            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
343            call handle_nf90_err(ncret)
344            ncret = nf90_put_var(ncid, ncvarid, ylat0)
345            call handle_nf90_err(ncret)
346
347            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
348            call handle_nf90_err(ncret)
349            ncret = nf90_put_var(ncid, ncvarid, dxconst)
350            call handle_nf90_err(ncret)
351
352            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
353            call handle_nf90_err(ncret)
354            ncret = nf90_put_var(ncid, ncvarid, dyconst)
355            call handle_nf90_err(ncret)
356
357
358
359            ! Fixed fields, static in time
360            dim2dids = (/nxmax_dimid, nymax_dimid/)
361
362            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
363&                                       dim2dids, ncvarid)
364            call handle_nf90_err(ncret)
365            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
366&                                        shuffle=0,     &
367&                                        deflate=1,     &
368&                                        deflate_level=DEF_LEVEL)
369            call handle_nf90_err(ncret)
370            ncret = nf90_put_var(ncid, ncvarid, &
371&                                oro(0:nxmax-1, 0:nymax-1))
372            call handle_nf90_err(ncret)
373
374            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
375&                                       dim2dids, ncvarid)
376            call handle_nf90_err(ncret)
377            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
378&                                        shuffle=0,     &
379&                                        deflate=1,     &
380&                                        deflate_level=DEF_LEVEL)
381            call handle_nf90_err(ncret)
382            ncret = nf90_put_var(ncid, ncvarid, &
383&                                excessoro(0:nxmax-1, 0:nymax-1))
384            call handle_nf90_err(ncret)
385
386            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
387&                                       dim2dids, ncvarid)
388            call handle_nf90_err(ncret)
389            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
390&                                        shuffle=0,     &
391&                                        deflate=1,     &
392&                                        deflate_level=DEF_LEVEL)
393            call handle_nf90_err(ncret)
394            ncret = nf90_put_var(ncid, ncvarid, &
395&                                lsm(0:nxmax-1, 0:nymax-1))
396            call handle_nf90_err(ncret)
397
398            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
399            ! numclass comes from par_mod - number of land use classes
400            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
401&                                       dim3dids, ncvarid)
402            call handle_nf90_err(ncret)
403            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
404&                                        shuffle=0,     &
405&                                        deflate=1,     &
406&                                        deflate_level=DEF_LEVEL)
407            call handle_nf90_err(ncret)
408            ncret = nf90_put_var(ncid, ncvarid, &
409&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
410            call handle_nf90_err(ncret)
411
412            dim1dids = (/nzmax_dimid/)
413            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
414&                                       dim1dids, ncvarid)
415            call handle_nf90_err(ncret)
416            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
417&                                        shuffle=0,     &
418&                                        deflate=1,     &
419&                                        deflate_level=DEF_LEVEL)
420            call handle_nf90_err(ncret)
421            ncret = nf90_put_var(ncid, ncvarid, &
422&                                height(1:nzmax))
423            call handle_nf90_err(ncret)
424
425
426
427
428            ! 3d fields
429            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
430
431            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
432&                                       dim3dids, ncvarid)
433            call handle_nf90_err(ncret)
434            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
435&                                        shuffle=0,     &
436&                                        deflate=1,     &
437&                                        deflate_level=DEF_LEVEL)
438            call handle_nf90_err(ncret)
439            ncret = nf90_put_var(ncid, ncvarid, &
440&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
441            call handle_nf90_err(ncret)
442
443            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
444&                                       dim3dids, ncvarid)
445            call handle_nf90_err(ncret)
446            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
447&                                        shuffle=0,     &
448&                                        deflate=1,     &
449&                                        deflate_level=DEF_LEVEL)
450            call handle_nf90_err(ncret)
451            ncret = nf90_put_var(ncid, ncvarid, &
452&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
453            call handle_nf90_err(ncret)
454
455            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
456&                                       dim3dids, ncvarid)
457            call handle_nf90_err(ncret)
458            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
459&                                        shuffle=0,     &
460&                                        deflate=1,     &
461&                                        deflate_level=DEF_LEVEL)
462            call handle_nf90_err(ncret)
463            ncret = nf90_put_var(ncid, ncvarid, &
464&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
465            call handle_nf90_err(ncret)
466
467            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
468&                                       dim3dids, ncvarid)
469            call handle_nf90_err(ncret)
470            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
471&                                        shuffle=0,     &
472&                                        deflate=1,     &
473&                                        deflate_level=DEF_LEVEL)
474            call handle_nf90_err(ncret)
475            ncret = nf90_put_var(ncid, ncvarid, &
476&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
477            call handle_nf90_err(ncret)
478
479            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
480&                                       dim3dids, ncvarid)
481            call handle_nf90_err(ncret)
482            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
483&                                        shuffle=0,     &
484&                                        deflate=1,     &
485&                                        deflate_level=DEF_LEVEL)
486            call handle_nf90_err(ncret)
487            ncret = nf90_put_var(ncid, ncvarid, &
488&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
489            call handle_nf90_err(ncret)
490
491            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
492&                                       dim3dids, ncvarid)
493            call handle_nf90_err(ncret)
494            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
495&                                        shuffle=0,     &
496&                                        deflate=1,     &
497&                                        deflate_level=DEF_LEVEL)
498            call handle_nf90_err(ncret)
499            ncret = nf90_put_var(ncid, ncvarid, &
500&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
501            call handle_nf90_err(ncret)
502
503            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
504&                                       dim3dids, ncvarid)
505            call handle_nf90_err(ncret)
506            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
507&                                        shuffle=0,     &
508&                                        deflate=1,     &
509&                                        deflate_level=DEF_LEVEL)
510            call handle_nf90_err(ncret)
511            ncret = nf90_put_var(ncid, ncvarid, &
512&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
513            call handle_nf90_err(ncret)
514
515            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
516&                                       dim3dids, ncvarid)
517            call handle_nf90_err(ncret)
518            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
519&                                        shuffle=0,     &
520&                                        deflate=1,     &
521&                                        deflate_level=DEF_LEVEL)
522            call handle_nf90_err(ncret)
523            ncret = nf90_put_var(ncid, ncvarid, &
524&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
525            call handle_nf90_err(ncret)
526
527            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
528&                                       dim3dids, ncvarid)
529            call handle_nf90_err(ncret)
530            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
531&                                        shuffle=0,     &
532&                                        deflate=1,     &
533&                                        deflate_level=DEF_LEVEL)
534            call handle_nf90_err(ncret)
535            ncret = nf90_put_var(ncid, ncvarid, &
536&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
537            call handle_nf90_err(ncret)
538
539            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
540&                                       dim3dids, ncvarid)
541            call handle_nf90_err(ncret)
542            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
543&                                        shuffle=0,     &
544&                                        deflate=1,     &
545&                                        deflate_level=DEF_LEVEL)
546            call handle_nf90_err(ncret)
547            ncret = nf90_put_var(ncid, ncvarid, &
548&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
549            call handle_nf90_err(ncret)
550
551            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
552&                                       dim3dids, ncvarid)
553            call handle_nf90_err(ncret)
554            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
555&                                        shuffle=0,     &
556&                                        deflate=1,     &
557&                                        deflate_level=DEF_LEVEL)
558            call handle_nf90_err(ncret)
559            ncret = nf90_put_var(ncid, ncvarid, &
560&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
561            call handle_nf90_err(ncret)
562
563
564
565            ! Note the change in z dimension for the following
566            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
567
568            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
569&                                       dim3dids, ncvarid)
570            call handle_nf90_err(ncret)
571            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
572&                                        shuffle=0,     &
573&                                        deflate=1,     &
574&                                        deflate_level=DEF_LEVEL)
575            call handle_nf90_err(ncret)
576            ncret = nf90_put_var(ncid, ncvarid, &
577&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
578            call handle_nf90_err(ncret)
579
580            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
581&                                       dim3dids, ncvarid)
582            call handle_nf90_err(ncret)
583            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
584&                                        shuffle=0,     &
585&                                        deflate=1,     &
586&                                        deflate_level=DEF_LEVEL)
587            call handle_nf90_err(ncret)
588            ncret = nf90_put_var(ncid, ncvarid, &
589&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
590            call handle_nf90_err(ncret)
591
592            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
593&                                       dim3dids, ncvarid)
594            call handle_nf90_err(ncret)
595            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
596&                                        shuffle=0,     &
597&                                        deflate=1,     &
598&                                        deflate_level=DEF_LEVEL)
599            call handle_nf90_err(ncret)
600            ncret = nf90_put_var(ncid, ncvarid, &
601&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
602            call handle_nf90_err(ncret)
603
604
605            dim2dids = (/nxmax_dimid, nymax_dimid/)
606            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
607&                                       dim2dids, ncvarid)
608            call handle_nf90_err(ncret)
609            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
610&                                        shuffle=0,     &
611&                                        deflate=1,     &
612&                                        deflate_level=DEF_LEVEL)
613            call handle_nf90_err(ncret)
614            ncret = nf90_put_var(ncid, ncvarid, &
615&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
616            call handle_nf90_err(ncret)
617
618
619
620            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
621&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
622
623            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
624&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
625
626
627
628            ! 2d fields
629            dim2dids = (/nxmax_dimid, nymax_dimid/)
630
631            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
632&                                       dim2dids, ncvarid)
633            call handle_nf90_err(ncret)
634            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
635&                                        shuffle=0,     &
636&                                        deflate=1,     &
637&                                        deflate_level=DEF_LEVEL)
638            call handle_nf90_err(ncret)
639            ncret = nf90_put_var(ncid, ncvarid, &
640&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
641            call handle_nf90_err(ncret)
642
643            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
644&                                       dim2dids, ncvarid)
645            call handle_nf90_err(ncret)
646            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
647&                                        shuffle=0,     &
648&                                        deflate=1,     &
649&                                        deflate_level=DEF_LEVEL)
650            call handle_nf90_err(ncret)
651            ncret = nf90_put_var(ncid, ncvarid, &
652&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
653            call handle_nf90_err(ncret)
654
655            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
656&                                       dim2dids, ncvarid)
657            call handle_nf90_err(ncret)
658            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
659&                                        shuffle=0,     &
660&                                        deflate=1,     &
661&                                        deflate_level=DEF_LEVEL)
662            call handle_nf90_err(ncret)
663            ncret = nf90_put_var(ncid, ncvarid, &
664&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
665            call handle_nf90_err(ncret)
666
667            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
668&                                       dim2dids, ncvarid)
669            call handle_nf90_err(ncret)
670            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
671&                                        shuffle=0,     &
672&                                        deflate=1,     &
673&                                        deflate_level=DEF_LEVEL)
674            call handle_nf90_err(ncret)
675            ncret = nf90_put_var(ncid, ncvarid, &
676&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
677            call handle_nf90_err(ncret)
678
679            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
680&                                       dim2dids, ncvarid)
681            call handle_nf90_err(ncret)
682            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
683&                                        shuffle=0,     &
684&                                        deflate=1,     &
685&                                        deflate_level=DEF_LEVEL)
686            call handle_nf90_err(ncret)
687            ncret = nf90_put_var(ncid, ncvarid, &
688&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
689            call handle_nf90_err(ncret)
690
691            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
692&                                       dim2dids, ncvarid)
693            call handle_nf90_err(ncret)
694            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
695&                                        shuffle=0,     &
696&                                        deflate=1,     &
697&                                        deflate_level=DEF_LEVEL)
698            call handle_nf90_err(ncret)
699            ncret = nf90_put_var(ncid, ncvarid, &
700&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
701            call handle_nf90_err(ncret)
702
703            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
704&                                       dim2dids, ncvarid)
705            call handle_nf90_err(ncret)
706            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
707&                                        shuffle=0,     &
708&                                        deflate=1,     &
709&                                        deflate_level=DEF_LEVEL)
710            call handle_nf90_err(ncret)
711            ncret = nf90_put_var(ncid, ncvarid, &
712&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
713            call handle_nf90_err(ncret)
714
715            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
716&                                       dim2dids, ncvarid)
717            call handle_nf90_err(ncret)
718            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
719&                                        shuffle=0,     &
720&                                        deflate=1,     &
721&                                        deflate_level=DEF_LEVEL)
722            call handle_nf90_err(ncret)
723            ncret = nf90_put_var(ncid, ncvarid, &
724&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
725            call handle_nf90_err(ncret)
726
727            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
728&                                       dim2dids, ncvarid)
729            call handle_nf90_err(ncret)
730            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
731&                                        shuffle=0,     &
732&                                        deflate=1,     &
733&                                        deflate_level=DEF_LEVEL)
734            call handle_nf90_err(ncret)
735            ncret = nf90_put_var(ncid, ncvarid, &
736&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
737            call handle_nf90_err(ncret)
738
739            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
740&                                       dim2dids, ncvarid)
741            call handle_nf90_err(ncret)
742            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
743&                                        shuffle=0,     &
744&                                        deflate=1,     &
745&                                        deflate_level=DEF_LEVEL)
746            call handle_nf90_err(ncret)
747            ncret = nf90_put_var(ncid, ncvarid, &
748&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
749            call handle_nf90_err(ncret)
750
751            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
752&                                       dim2dids, ncvarid)
753            call handle_nf90_err(ncret)
754            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
755&                                        shuffle=0,     &
756&                                        deflate=1,     &
757&                                        deflate_level=DEF_LEVEL)
758            call handle_nf90_err(ncret)
759            ncret = nf90_put_var(ncid, ncvarid, &
760&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
761            call handle_nf90_err(ncret)
762
763            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
764&                                       dim2dids, ncvarid)
765            call handle_nf90_err(ncret)
766            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
767&                                        shuffle=0,     &
768&                                        deflate=1,     &
769&                                        deflate_level=DEF_LEVEL)
770            call handle_nf90_err(ncret)
771            ncret = nf90_put_var(ncid, ncvarid, &
772&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
773            call handle_nf90_err(ncret)
774
775            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
776&                                       dim2dids, ncvarid)
777            call handle_nf90_err(ncret)
778            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
779&                                        shuffle=0,     &
780&                                        deflate=1,     &
781&                                        deflate_level=DEF_LEVEL)
782            call handle_nf90_err(ncret)
783            ncret = nf90_put_var(ncid, ncvarid, &
784&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
785            call handle_nf90_err(ncret)
786
787            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
788&                                       dim2dids, ncvarid)
789            call handle_nf90_err(ncret)
790            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
791&                                        shuffle=0,     &
792&                                        deflate=1,     &
793&                                        deflate_level=DEF_LEVEL)
794            call handle_nf90_err(ncret)
795            ncret = nf90_put_var(ncid, ncvarid, &
796&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
797            call handle_nf90_err(ncret)
798
799            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
800&                                       dim2dids, ncvarid)
801            call handle_nf90_err(ncret)
802            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
803&                                        shuffle=0,     &
804&                                        deflate=1,     &
805&                                        deflate_level=DEF_LEVEL)
806            call handle_nf90_err(ncret)
807            ncret = nf90_put_var(ncid, ncvarid, &
808&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
809            call handle_nf90_err(ncret)
810
811            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
812&                                       dim2dids, ncvarid)
813            call handle_nf90_err(ncret)
814            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
815&                                        shuffle=0,     &
816&                                        deflate=1,     &
817&                                        deflate_level=DEF_LEVEL)
818            call handle_nf90_err(ncret)
819            ncret = nf90_put_var(ncid, ncvarid, &
820&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
821            call handle_nf90_err(ncret)
822
823            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
824&                                       dim2dids, ncvarid)
825            call handle_nf90_err(ncret)
826            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
827&                                        shuffle=0,     &
828&                                        deflate=1,     &
829&                                        deflate_level=DEF_LEVEL)
830            call handle_nf90_err(ncret)
831            ncret = nf90_put_var(ncid, ncvarid, &
832&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
833            call handle_nf90_err(ncret)
834
835            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
836&                                       dim2dids, ncvarid)
837            call handle_nf90_err(ncret)
838            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
839&                                        shuffle=0,     &
840&                                        deflate=1,     &
841&                                        deflate_level=DEF_LEVEL)
842            call handle_nf90_err(ncret)
843            ncret = nf90_put_var(ncid, ncvarid, &
844&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
845            call handle_nf90_err(ncret)
846
847            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
848&                                       dim2dids, ncvarid)
849            call handle_nf90_err(ncret)
850            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
851&                                        shuffle=0,     &
852&                                        deflate=1,     &
853&                                        deflate_level=DEF_LEVEL)
854            call handle_nf90_err(ncret)
855            ncret = nf90_put_var(ncid, ncvarid, &
856&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
857            call handle_nf90_err(ncret)
858
859
860
861            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
862&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
863
864            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
865&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
866
867
868            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
869
870            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
871&                                       dim3dids, ncvarid)
872            call handle_nf90_err(ncret)
873            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
874&                                        shuffle=0,     &
875&                                        deflate=1,     &
876&                                        deflate_level=DEF_LEVEL)
877            call handle_nf90_err(ncret)
878            ncret = nf90_put_var(ncid, ncvarid, &
879&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
880            call handle_nf90_err(ncret)
881
882
883
884            ! 1d fields
885            dim1dids = (/numclass_dimid/)
886
887            ncret = nf90_def_var(ncid, 'z0', NF90_FLOAT, &
888&                                       dim1dids, ncvarid)
889            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
890&                                        shuffle=0,     &
891&                                        deflate=1,     &
892&                                        deflate_level=DEF_LEVEL)
893            ncret = nf90_put_var(ncid, ncvarid, &
894&                                z0(1:numclass))
895
896
897            dim1dids = (/nwzmax_dimid/)
898
899            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
900&                                       dim1dids, ncvarid)
901            call handle_nf90_err(ncret)
902            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
903&                                        shuffle=0,     &
904&                                        deflate=1,     &
905&                                        deflate_level=DEF_LEVEL)
906            call handle_nf90_err(ncret)
907            ncret = nf90_put_var(ncid, ncvarid, &
908&                                akm(1:nwzmax))
909            call handle_nf90_err(ncret)
910
911            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
912&                                       dim1dids, ncvarid)
913            call handle_nf90_err(ncret)
914            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
915&                                        shuffle=0,     &
916&                                        deflate=1,     &
917&                                        deflate_level=DEF_LEVEL)
918            call handle_nf90_err(ncret)
919            ncret = nf90_put_var(ncid, ncvarid, &
920&                                bkm(1:nwzmax))
921            call handle_nf90_err(ncret)
922
923
924            dim1dids = (/nuvzmax_dimid/)
925
926            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
927&                                       dim1dids, ncvarid)
928            call handle_nf90_err(ncret)
929            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
930&                                        shuffle=0,     &
931&                                        deflate=1,     &
932&                                        deflate_level=DEF_LEVEL)
933            call handle_nf90_err(ncret)
934            ncret = nf90_put_var(ncid, ncvarid, &
935&                                akz(1:nuvzmax))
936            call handle_nf90_err(ncret)
937
938            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
939&                                       dim1dids, ncvarid)
940            call handle_nf90_err(ncret)
941            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
942&                                        shuffle=0,     &
943&                                        deflate=1,     &
944&                                        deflate_level=DEF_LEVEL)
945            call handle_nf90_err(ncret)
946            ncret = nf90_put_var(ncid, ncvarid, &
947&                                bkz(1:nuvzmax))
948            call handle_nf90_err(ncret)
949
950
951            dim1dids = (/nzmax_dimid/)
952
953            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
954&                                       dim1dids, ncvarid)
955            call handle_nf90_err(ncret)
956            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
957&                                        shuffle=0,     &
958&                                        deflate=1,     &
959&                                        deflate_level=DEF_LEVEL)
960            call handle_nf90_err(ncret)
961            ncret = nf90_put_var(ncid, ncvarid, &
962&                                aknew(1:nzmax))
963            call handle_nf90_err(ncret)
964
965            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
966&                                       dim1dids, ncvarid)
967            call handle_nf90_err(ncret)
968            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
969&                                        shuffle=0,     &
970&                                        deflate=1,     &
971&                                        deflate_level=DEF_LEVEL)
972            call handle_nf90_err(ncret)
973            ncret = nf90_put_var(ncid, ncvarid, &
974&                                bknew(1:nzmax))
975            call handle_nf90_err(ncret)
976
977
978            PRINT *, 'SUM(bknew(1:nzmax)): ', &
979&                                        SUM(bknew(1:nzmax))
980
981
982
983            ! Getting ready to add in nested code
984
985            ! These are compiled max dimensions from par_mod - these are
986            ! not meant to be reassigned during a LOAD, but used as "header"
987            ! information to provide the structure of arrays
988            ncret = nf90_def_dim(ncid, 'maxnests', maxnests, maxnests_dimid)
989            call handle_nf90_err(ncret)
990            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
991            call handle_nf90_err(ncret)
992            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
993            call handle_nf90_err(ncret)
994
995
996            ! Nested, scalar values (for each nest)
997            dim1dids = (/maxnests_dimid/)
998
999            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
1000&                                       dim1dids, ncvarid)
1001            call handle_nf90_err(ncret)
1002            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1003&                                        shuffle=0,     &
1004&                                        deflate=1,     &
1005&                                        deflate_level=DEF_LEVEL)
1006            call handle_nf90_err(ncret)
1007            ncret = nf90_put_var(ncid, ncvarid, &
1008&                                nxn(1:maxnests))
1009            call handle_nf90_err(ncret)
1010
1011            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
1012&                                       dim1dids, ncvarid)
1013            call handle_nf90_err(ncret)
1014            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1015&                                        shuffle=0,     &
1016&                                        deflate=1,     &
1017&                                        deflate_level=DEF_LEVEL)
1018            call handle_nf90_err(ncret)
1019            ncret = nf90_put_var(ncid, ncvarid, &
1020&                                nyn(1:maxnests))
1021            call handle_nf90_err(ncret)
1022
1023            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
1024&                                       dim1dids, ncvarid)
1025            call handle_nf90_err(ncret)
1026            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1027&                                        shuffle=0,     &
1028&                                        deflate=1,     &
1029&                                        deflate_level=DEF_LEVEL)
1030            call handle_nf90_err(ncret)
1031            ncret = nf90_put_var(ncid, ncvarid, &
1032&                                dxn(1:maxnests))
1033            call handle_nf90_err(ncret)
1034
1035            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
1036&                                       dim1dids, ncvarid)
1037            call handle_nf90_err(ncret)
1038            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1039&                                        shuffle=0,     &
1040&                                        deflate=1,     &
1041&                                        deflate_level=DEF_LEVEL)
1042            call handle_nf90_err(ncret)
1043            ncret = nf90_put_var(ncid, ncvarid, &
1044&                                dyn(1:maxnests))
1045            call handle_nf90_err(ncret)
1046
1047            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
1048&                                       dim1dids, ncvarid)
1049            call handle_nf90_err(ncret)
1050            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1051&                                        shuffle=0,     &
1052&                                        deflate=1,     &
1053&                                        deflate_level=DEF_LEVEL)
1054            call handle_nf90_err(ncret)
1055            ncret = nf90_put_var(ncid, ncvarid, &
1056&                                xlon0n(1:maxnests))
1057            call handle_nf90_err(ncret)
1058
1059            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
1060&                                       dim1dids, ncvarid)
1061            call handle_nf90_err(ncret)
1062            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1063&                                        shuffle=0,     &
1064&                                        deflate=1,     &
1065&                                        deflate_level=DEF_LEVEL)
1066            call handle_nf90_err(ncret)
1067            ncret = nf90_put_var(ncid, ncvarid, &
1068&                                ylat0n(1:maxnests))
1069            call handle_nf90_err(ncret)
1070
1071
1072
1073
1074            ! Nested fields, static over time
1075            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1076
1077            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
1078&                                       dim3dids, ncvarid)
1079            call handle_nf90_err(ncret)
1080            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1081&                                        shuffle=0,     &
1082&                                        deflate=1,     &
1083&                                        deflate_level=DEF_LEVEL)
1084            call handle_nf90_err(ncret)
1085            ncret = nf90_put_var(ncid, ncvarid, &
1086&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1087            call handle_nf90_err(ncret)
1088
1089            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
1090&                                       dim3dids, ncvarid)
1091            call handle_nf90_err(ncret)
1092            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1093&                                        shuffle=0,     &
1094&                                        deflate=1,     &
1095&                                        deflate_level=DEF_LEVEL)
1096            call handle_nf90_err(ncret)
1097            ncret = nf90_put_var(ncid, ncvarid, &
1098&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1099            call handle_nf90_err(ncret)
1100
1101            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
1102&                                       dim3dids, ncvarid)
1103            call handle_nf90_err(ncret)
1104            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1105&                                        shuffle=0,     &
1106&                                        deflate=1,     &
1107&                                        deflate_level=DEF_LEVEL)
1108            call handle_nf90_err(ncret)
1109            ncret = nf90_put_var(ncid, ncvarid, &
1110&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
1111            call handle_nf90_err(ncret)
1112
1113            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
1114
1115            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
1116&                                       dim4dids, ncvarid)
1117            call handle_nf90_err(ncret)
1118            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1119&                                        shuffle=0,     &
1120&                                        deflate=1,     &
1121&                                        deflate_level=DEF_LEVEL)
1122            call handle_nf90_err(ncret)
1123            ncret = nf90_put_var(ncid, ncvarid, &
1124&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
1125            call handle_nf90_err(ncret)
1126
1127            PRINT *, 'SUM(oron): ', SUM(oron)
1128
1129
1130
1131            ! 3d nested fields
1132            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nzmax_dimid, maxnests_dimid/)
1133
1134            ncret = nf90_def_var(ncid, 'uun', NF90_FLOAT, &
1135&                                       dim4dids, ncvarid)
1136            call handle_nf90_err(ncret)
1137            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1138&                                        shuffle=0,     &
1139&                                        deflate=1,     &
1140&                                        deflate_level=DEF_LEVEL)
1141            call handle_nf90_err(ncret)
1142            ncret = nf90_put_var(ncid, ncvarid, &
1143&                                uun(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1144            call handle_nf90_err(ncret)
1145
1146            ncret = nf90_def_var(ncid, 'vvn', NF90_FLOAT, &
1147&                                       dim4dids, ncvarid)
1148            call handle_nf90_err(ncret)
1149            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1150&                                        shuffle=0,     &
1151&                                        deflate=1,     &
1152&                                        deflate_level=DEF_LEVEL)
1153            call handle_nf90_err(ncret)
1154            ncret = nf90_put_var(ncid, ncvarid, &
1155&                                vvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1156            call handle_nf90_err(ncret)
1157
1158            ncret = nf90_def_var(ncid, 'wwn', NF90_FLOAT, &
1159&                                       dim4dids, ncvarid)
1160            call handle_nf90_err(ncret)
1161            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1162&                                        shuffle=0,     &
1163&                                        deflate=1,     &
1164&                                        deflate_level=DEF_LEVEL)
1165            call handle_nf90_err(ncret)
1166            ncret = nf90_put_var(ncid, ncvarid, &
1167&                                wwn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1168            call handle_nf90_err(ncret)
1169
1170            ncret = nf90_def_var(ncid, 'ttn', NF90_FLOAT, &
1171&                                       dim4dids, ncvarid)
1172            call handle_nf90_err(ncret)
1173            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1174&                                        shuffle=0,     &
1175&                                        deflate=1,     &
1176&                                        deflate_level=DEF_LEVEL)
1177            call handle_nf90_err(ncret)
1178            ncret = nf90_put_var(ncid, ncvarid, &
1179&                                ttn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1180            call handle_nf90_err(ncret)
1181
1182            ncret = nf90_def_var(ncid, 'qvn', NF90_FLOAT, &
1183&                                       dim4dids, ncvarid)
1184            call handle_nf90_err(ncret)
1185            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1186&                                        shuffle=0,     &
1187&                                        deflate=1,     &
1188&                                        deflate_level=DEF_LEVEL)
1189            call handle_nf90_err(ncret)
1190            ncret = nf90_put_var(ncid, ncvarid, &
1191&                                qvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1192            call handle_nf90_err(ncret)
1193
1194            ncret = nf90_def_var(ncid, 'pvn', NF90_FLOAT, &
1195&                                       dim4dids, ncvarid)
1196            call handle_nf90_err(ncret)
1197            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1198&                                        shuffle=0,     &
1199&                                        deflate=1,     &
1200&                                        deflate_level=DEF_LEVEL)
1201            call handle_nf90_err(ncret)
1202            ncret = nf90_put_var(ncid, ncvarid, &
1203&                                pvn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1204            call handle_nf90_err(ncret)
1205
1206            ncret = nf90_def_var(ncid, 'rhon', NF90_FLOAT, &
1207&                                       dim4dids, ncvarid)
1208            call handle_nf90_err(ncret)
1209            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1210&                                        shuffle=0,     &
1211&                                        deflate=1,     &
1212&                                        deflate_level=DEF_LEVEL)
1213            call handle_nf90_err(ncret)
1214            ncret = nf90_put_var(ncid, ncvarid, &
1215&                                rhon(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1216            call handle_nf90_err(ncret)
1217
1218            ncret = nf90_def_var(ncid, 'drhodzn', NF90_FLOAT, &
1219&                                       dim4dids, ncvarid)
1220            call handle_nf90_err(ncret)
1221            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1222&                                        shuffle=0,     &
1223&                                        deflate=1,     &
1224&                                        deflate_level=DEF_LEVEL)
1225            call handle_nf90_err(ncret)
1226            ncret = nf90_put_var(ncid, ncvarid, &
1227&                                drhodzn(0:nxmaxn-1, 0:nymaxn-1, 1:nzmax, cm_index, 1:maxnests))
1228            call handle_nf90_err(ncret)
1229
1230
1231            ! Note the new dimensions
1232            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, nuvzmax_dimid, maxnests_dimid/)
1233
1234            ncret = nf90_def_var(ncid, 'tthn', NF90_FLOAT, &
1235&                                       dim4dids, ncvarid)
1236            call handle_nf90_err(ncret)
1237            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1238&                                        shuffle=0,     &
1239&                                        deflate=1,     &
1240&                                        deflate_level=DEF_LEVEL)
1241            call handle_nf90_err(ncret)
1242            ncret = nf90_put_var(ncid, ncvarid, &
1243&                                tthn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
1244            call handle_nf90_err(ncret)
1245
1246            ncret = nf90_def_var(ncid, 'qvhn', NF90_FLOAT, &
1247&                                       dim4dids, ncvarid)
1248            call handle_nf90_err(ncret)
1249            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1250&                                        shuffle=0,     &
1251&                                        deflate=1,     &
1252&                                        deflate_level=DEF_LEVEL)
1253            call handle_nf90_err(ncret)
1254            ncret = nf90_put_var(ncid, ncvarid, &
1255&                                qvhn(0:nxmaxn-1, 0:nymaxn-1, 1:nuvzmax, cm_index, 1:maxnests))
1256            call handle_nf90_err(ncret)
1257
1258            ! Note the new dimensions
1259            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, zero_to_nzmax_dimid, maxnests_dimid/)
1260
1261            ncret = nf90_def_var(ncid, 'cloudsn', NF90_INT, &
1262&                                       dim4dids, ncvarid)
1263            call handle_nf90_err(ncret)
1264            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1265&                                        shuffle=0,     &
1266&                                        deflate=1,     &
1267&                                        deflate_level=DEF_LEVEL)
1268            call handle_nf90_err(ncret)
1269            ncret = nf90_put_var(ncid, ncvarid, &
1270&                                cloudsn(0:nxmaxn-1, 0:nymaxn-1, 0:nzmax, cm_index, 1:maxnests))
1271            call handle_nf90_err(ncret)
1272
1273            ! Note the new dimensions
1274            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1275
1276            ncret = nf90_def_var(ncid, 'cloudsnh', NF90_INT, &
1277&                                       dim3dids, ncvarid)
1278            call handle_nf90_err(ncret)
1279            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1280&                                        shuffle=0,     &
1281&                                        deflate=1,     &
1282&                                        deflate_level=DEF_LEVEL)
1283            call handle_nf90_err(ncret)
1284            ncret = nf90_put_var(ncid, ncvarid, &
1285&                                cloudsnh(0:nxmaxn-1, 0:nymaxn-1, cm_index, 1:maxnests))
1286            call handle_nf90_err(ncret)
1287
1288
1289            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
1290            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
1291            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
1292
1293
1294
1295            ! 2d nested fields
1296            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1297
1298            ncret = nf90_def_var(ncid, 'psn', NF90_FLOAT, &
1299&                                       dim3dids, ncvarid)
1300            call handle_nf90_err(ncret)
1301            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1302&                                        shuffle=0,     &
1303&                                        deflate=1,     &
1304&                                        deflate_level=DEF_LEVEL)
1305            call handle_nf90_err(ncret)
1306            ncret = nf90_put_var(ncid, ncvarid, &
1307&                                psn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1308            call handle_nf90_err(ncret)
1309
1310            ncret = nf90_def_var(ncid, 'sdn', NF90_FLOAT, &
1311&                                       dim3dids, ncvarid)
1312            call handle_nf90_err(ncret)
1313            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1314&                                        shuffle=0,     &
1315&                                        deflate=1,     &
1316&                                        deflate_level=DEF_LEVEL)
1317            call handle_nf90_err(ncret)
1318            ncret = nf90_put_var(ncid, ncvarid, &
1319&                                sdn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1320            call handle_nf90_err(ncret)
1321
1322            ncret = nf90_def_var(ncid, 'msln', NF90_FLOAT, &
1323&                                       dim3dids, ncvarid)
1324            call handle_nf90_err(ncret)
1325            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1326&                                        shuffle=0,     &
1327&                                        deflate=1,     &
1328&                                        deflate_level=DEF_LEVEL)
1329            call handle_nf90_err(ncret)
1330            ncret = nf90_put_var(ncid, ncvarid, &
1331&                                msln(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1332            call handle_nf90_err(ncret)
1333
1334            ncret = nf90_def_var(ncid, 'tccn', NF90_FLOAT, &
1335&                                       dim3dids, ncvarid)
1336            call handle_nf90_err(ncret)
1337            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1338&                                        shuffle=0,     &
1339&                                        deflate=1,     &
1340&                                        deflate_level=DEF_LEVEL)
1341            call handle_nf90_err(ncret)
1342            ncret = nf90_put_var(ncid, ncvarid, &
1343&                                tccn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1344            call handle_nf90_err(ncret)
1345
1346            ncret = nf90_def_var(ncid, 'u10n', NF90_FLOAT, &
1347&                                       dim3dids, ncvarid)
1348            call handle_nf90_err(ncret)
1349            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1350&                                        shuffle=0,     &
1351&                                        deflate=1,     &
1352&                                        deflate_level=DEF_LEVEL)
1353            call handle_nf90_err(ncret)
1354            ncret = nf90_put_var(ncid, ncvarid, &
1355&                                u10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1356            call handle_nf90_err(ncret)
1357
1358            ncret = nf90_def_var(ncid, 'v10n', NF90_FLOAT, &
1359&                                       dim3dids, ncvarid)
1360            call handle_nf90_err(ncret)
1361            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1362&                                        shuffle=0,     &
1363&                                        deflate=1,     &
1364&                                        deflate_level=DEF_LEVEL)
1365            call handle_nf90_err(ncret)
1366            ncret = nf90_put_var(ncid, ncvarid, &
1367&                                v10n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1368            call handle_nf90_err(ncret)
1369
1370            ncret = nf90_def_var(ncid, 'tt2n', NF90_FLOAT, &
1371&                                       dim3dids, ncvarid)
1372            call handle_nf90_err(ncret)
1373            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1374&                                        shuffle=0,     &
1375&                                        deflate=1,     &
1376&                                        deflate_level=DEF_LEVEL)
1377            call handle_nf90_err(ncret)
1378            ncret = nf90_put_var(ncid, ncvarid, &
1379&                                tt2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1380            call handle_nf90_err(ncret)
1381
1382            ncret = nf90_def_var(ncid, 'td2n', NF90_FLOAT, &
1383&                                       dim3dids, ncvarid)
1384            call handle_nf90_err(ncret)
1385            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1386&                                        shuffle=0,     &
1387&                                        deflate=1,     &
1388&                                        deflate_level=DEF_LEVEL)
1389            call handle_nf90_err(ncret)
1390            ncret = nf90_put_var(ncid, ncvarid, &
1391&                                td2n(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1392            call handle_nf90_err(ncret)
1393
1394            ncret = nf90_def_var(ncid, 'lsprecn', NF90_FLOAT, &
1395&                                       dim3dids, ncvarid)
1396            call handle_nf90_err(ncret)
1397            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1398&                                        shuffle=0,     &
1399&                                        deflate=1,     &
1400&                                        deflate_level=DEF_LEVEL)
1401            call handle_nf90_err(ncret)
1402            ncret = nf90_put_var(ncid, ncvarid, &
1403&                                lsprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1404            call handle_nf90_err(ncret)
1405
1406            ncret = nf90_def_var(ncid, 'convprecn', NF90_FLOAT, &
1407&                                       dim3dids, ncvarid)
1408            call handle_nf90_err(ncret)
1409            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1410&                                        shuffle=0,     &
1411&                                        deflate=1,     &
1412&                                        deflate_level=DEF_LEVEL)
1413            call handle_nf90_err(ncret)
1414            ncret = nf90_put_var(ncid, ncvarid, &
1415&                                convprecn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1416            call handle_nf90_err(ncret)
1417
1418            ncret = nf90_def_var(ncid, 'sshfn', NF90_FLOAT, &
1419&                                       dim3dids, ncvarid)
1420            call handle_nf90_err(ncret)
1421            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1422&                                        shuffle=0,     &
1423&                                        deflate=1,     &
1424&                                        deflate_level=DEF_LEVEL)
1425            call handle_nf90_err(ncret)
1426            ncret = nf90_put_var(ncid, ncvarid, &
1427&                                sshfn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1428            call handle_nf90_err(ncret)
1429
1430            ncret = nf90_def_var(ncid, 'ssrn', NF90_FLOAT, &
1431&                                       dim3dids, ncvarid)
1432            call handle_nf90_err(ncret)
1433            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1434&                                        shuffle=0,     &
1435&                                        deflate=1,     &
1436&                                        deflate_level=DEF_LEVEL)
1437            call handle_nf90_err(ncret)
1438            ncret = nf90_put_var(ncid, ncvarid, &
1439&                                ssrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1440            call handle_nf90_err(ncret)
1441
1442            ncret = nf90_def_var(ncid, 'surfstrn', NF90_FLOAT, &
1443&                                       dim3dids, ncvarid)
1444            call handle_nf90_err(ncret)
1445            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1446&                                        shuffle=0,     &
1447&                                        deflate=1,     &
1448&                                        deflate_level=DEF_LEVEL)
1449            call handle_nf90_err(ncret)
1450            ncret = nf90_put_var(ncid, ncvarid, &
1451&                                surfstrn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1452            call handle_nf90_err(ncret)
1453
1454            ncret = nf90_def_var(ncid, 'ustarn', NF90_FLOAT, &
1455&                                       dim3dids, ncvarid)
1456            call handle_nf90_err(ncret)
1457            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1458&                                        shuffle=0,     &
1459&                                        deflate=1,     &
1460&                                        deflate_level=DEF_LEVEL)
1461            call handle_nf90_err(ncret)
1462            ncret = nf90_put_var(ncid, ncvarid, &
1463&                                ustarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1464            call handle_nf90_err(ncret)
1465
1466            ncret = nf90_def_var(ncid, 'wstarn', NF90_FLOAT, &
1467&                                       dim3dids, ncvarid)
1468            call handle_nf90_err(ncret)
1469            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1470&                                        shuffle=0,     &
1471&                                        deflate=1,     &
1472&                                        deflate_level=DEF_LEVEL)
1473            call handle_nf90_err(ncret)
1474            ncret = nf90_put_var(ncid, ncvarid, &
1475&                                wstarn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1476            call handle_nf90_err(ncret)
1477
1478            ncret = nf90_def_var(ncid, 'hmixn', NF90_FLOAT, &
1479&                                       dim3dids, ncvarid)
1480            call handle_nf90_err(ncret)
1481            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1482&                                        shuffle=0,     &
1483&                                        deflate=1,     &
1484&                                        deflate_level=DEF_LEVEL)
1485            call handle_nf90_err(ncret)
1486            ncret = nf90_put_var(ncid, ncvarid, &
1487&                                hmixn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1488            call handle_nf90_err(ncret)
1489
1490            ncret = nf90_def_var(ncid, 'tropopausen', NF90_FLOAT, &
1491&                                       dim3dids, ncvarid)
1492            call handle_nf90_err(ncret)
1493            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1494&                                        shuffle=0,     &
1495&                                        deflate=1,     &
1496&                                        deflate_level=DEF_LEVEL)
1497            call handle_nf90_err(ncret)
1498            ncret = nf90_put_var(ncid, ncvarid, &
1499&                                tropopausen(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1500            call handle_nf90_err(ncret)
1501
1502            ncret = nf90_def_var(ncid, 'olin', NF90_FLOAT, &
1503&                                       dim3dids, ncvarid)
1504            call handle_nf90_err(ncret)
1505            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1506&                                        shuffle=0,     &
1507&                                        deflate=1,     &
1508&                                        deflate_level=DEF_LEVEL)
1509            call handle_nf90_err(ncret)
1510            ncret = nf90_put_var(ncid, ncvarid, &
1511&                                olin(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1512            call handle_nf90_err(ncret)
1513
1514            ncret = nf90_def_var(ncid, 'diffkn', NF90_FLOAT, &
1515&                                       dim3dids, ncvarid)
1516            call handle_nf90_err(ncret)
1517            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1518&                                        shuffle=0,     &
1519&                                        deflate=1,     &
1520&                                        deflate_level=DEF_LEVEL)
1521            call handle_nf90_err(ncret)
1522            ncret = nf90_put_var(ncid, ncvarid, &
1523&                                diffkn(0:nxmaxn-1, 0:nymaxn-1, 1, cm_index, 1:maxnests))
1524            call handle_nf90_err(ncret)
1525
1526            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, maxspec_dimid, maxnests_dimid/)
1527
1528
1529
1530            ncret = nf90_def_var(ncid, 'vdepn', NF90_FLOAT, &
1531&                                       dim4dids, ncvarid)
1532            call handle_nf90_err(ncret)
1533            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1534&                                        shuffle=0,     &
1535&                                        deflate=1,     &
1536&                                        deflate_level=DEF_LEVEL)
1537            call handle_nf90_err(ncret)
1538            ncret = nf90_put_var(ncid, ncvarid, &
1539&                                vdepn(0:nxmaxn-1, 0:nymaxn-1, 1:maxspec, cm_index, 1:maxnests))
1540            call handle_nf90_err(ncret)
1541
1542
1543            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
1544            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
1545            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
1546
1547
1548
1549            ! Auxiliary variables for nests
1550            dim1dids = (/zero_to_maxnests_dimid/)
1551
1552            ncret = nf90_def_var(ncid, 'xresoln', NF90_FLOAT, &
1553&                                       dim1dids, ncvarid)
1554            call handle_nf90_err(ncret)
1555            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1556&                                        shuffle=0,     &
1557&                                        deflate=1,     &
1558&                                        deflate_level=DEF_LEVEL)
1559            call handle_nf90_err(ncret)
1560            ncret = nf90_put_var(ncid, ncvarid, &
1561&                                xresoln(0:maxnests))
1562            call handle_nf90_err(ncret)
1563
1564            ncret = nf90_def_var(ncid, 'yresoln', NF90_FLOAT, &
1565&                                       dim1dids, ncvarid)
1566            call handle_nf90_err(ncret)
1567            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1568&                                        shuffle=0,     &
1569&                                        deflate=1,     &
1570&                                        deflate_level=DEF_LEVEL)
1571            call handle_nf90_err(ncret)
1572            ncret = nf90_put_var(ncid, ncvarid, &
1573&                                yresoln(0:maxnests))
1574            call handle_nf90_err(ncret)
1575
1576            dim1dids = (/maxnests_dimid/)
1577
1578            ncret = nf90_def_var(ncid, 'xln', NF90_FLOAT, &
1579&                                       dim1dids, ncvarid)
1580            call handle_nf90_err(ncret)
1581            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1582&                                        shuffle=0,     &
1583&                                        deflate=1,     &
1584&                                        deflate_level=DEF_LEVEL)
1585            call handle_nf90_err(ncret)
1586            ncret = nf90_put_var(ncid, ncvarid, &
1587&                                xln(1:maxnests))
1588            call handle_nf90_err(ncret)
1589
1590            ncret = nf90_def_var(ncid, 'yln', NF90_FLOAT, &
1591&                                       dim1dids, ncvarid)
1592            call handle_nf90_err(ncret)
1593            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1594&                                        shuffle=0,     &
1595&                                        deflate=1,     &
1596&                                        deflate_level=DEF_LEVEL)
1597            call handle_nf90_err(ncret)
1598            ncret = nf90_put_var(ncid, ncvarid, &
1599&                                yln(1:maxnests))
1600            call handle_nf90_err(ncret)
1601
1602            ncret = nf90_def_var(ncid, 'xrn', NF90_FLOAT, &
1603&                                       dim1dids, ncvarid)
1604            call handle_nf90_err(ncret)
1605            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1606&                                        shuffle=0,     &
1607&                                        deflate=1,     &
1608&                                        deflate_level=DEF_LEVEL)
1609            call handle_nf90_err(ncret)
1610            ncret = nf90_put_var(ncid, ncvarid, &
1611&                                xrn(1:maxnests))
1612            call handle_nf90_err(ncret)
1613
1614            ncret = nf90_def_var(ncid, 'yrn', NF90_FLOAT, &
1615&                                       dim1dids, ncvarid)
1616            call handle_nf90_err(ncret)
1617            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1618&                                        shuffle=0,     &
1619&                                        deflate=1,     &
1620&                                        deflate_level=DEF_LEVEL)
1621            call handle_nf90_err(ncret)
1622            ncret = nf90_put_var(ncid, ncvarid, &
1623&                                yrn(1:maxnests))
1624            call handle_nf90_err(ncret)
1625
1626            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
1627            PRINT *, 'SUM(xrn): ', SUM(xrn)
1628
1629
1630
1631            ! Variables for polar stereographic projection
1632            dim1dids = (/polemap_dimid/)
1633
1634            ncret = nf90_def_var(ncid, 'southpolemap', NF90_FLOAT, &
1635&                                       dim1dids, ncvarid)
1636            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1637&                                        shuffle=0,     &
1638&                                        deflate=1,     &
1639&                                        deflate_level=DEF_LEVEL)
1640            ncret = nf90_put_var(ncid, ncvarid, &
1641&                                southpolemap(:))
1642
1643            ncret = nf90_def_var(ncid, 'northpolemap', NF90_FLOAT, &
1644&                                       dim1dids, ncvarid)
1645            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1646&                                        shuffle=0,     &
1647&                                        deflate=1,     &
1648&                                        deflate_level=DEF_LEVEL)
1649            ncret = nf90_put_var(ncid, ncvarid, &
1650&                                northpolemap(:))
1651
1652
1653
1654            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
1655            ! to INTEGER for NetCDF storage
1656            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
1657            call handle_nf90_err(ncret)
1658            ncret = nf90_put_var(ncid, ncvarid, logical2integer(xglobal))
1659            call handle_nf90_err(ncret)
1660
1661            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
1662            call handle_nf90_err(ncret)
1663            ncret = nf90_put_var(ncid, ncvarid, logical2integer(sglobal))
1664            call handle_nf90_err(ncret)
1665
1666            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
1667            call handle_nf90_err(ncret)
1668            ncret = nf90_put_var(ncid, ncvarid, logical2integer(nglobal))
1669            call handle_nf90_err(ncret)
1670
1671            ncret = nf90_def_var(ncid, 'switchnorthg', NF90_FLOAT, ncvarid)
1672            call handle_nf90_err(ncret)
1673            ncret = nf90_put_var(ncid, ncvarid, switchnorthg)
1674            call handle_nf90_err(ncret)
1675
1676            ncret = nf90_def_var(ncid, 'switchsouthg', NF90_FLOAT, ncvarid)
1677            call handle_nf90_err(ncret)
1678            ncret = nf90_put_var(ncid, ncvarid, switchsouthg)
1679            call handle_nf90_err(ncret)
1680
1681
1682
1683            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
1684            PRINT *, 'xglobal: ', xglobal
1685            PRINT *, 'sglobal: ', sglobal
1686            PRINT *, 'nglobal: ', nglobal
1687            PRINT *, 'switchsouthg: ', switchsouthg
1688
1689            ! Variables declared in conv_mod (convection)
1690            dim1dids = (/nconvlevmax_dimid/)
1691
1692            ncret = nf90_def_var(ncid, 'pconv', NF90_FLOAT, &
1693&                                       dim1dids, ncvarid)
1694            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1695&                                        shuffle=0,     &
1696&                                        deflate=1,     &
1697&                                        deflate_level=DEF_LEVEL)
1698            ncret = nf90_put_var(ncid, ncvarid, &
1699&                                pconv(:))
1700
1701            ncret = nf90_def_var(ncid, 'dpr', NF90_FLOAT, &
1702&                                       dim1dids, ncvarid)
1703            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1704&                                        shuffle=0,     &
1705&                                        deflate=1,     &
1706&                                        deflate_level=DEF_LEVEL)
1707            ncret = nf90_put_var(ncid, ncvarid, &
1708&                                dpr(:))
1709
1710            ncret = nf90_def_var(ncid, 'pconv_hpa', NF90_FLOAT, &
1711&                                       dim1dids, ncvarid)
1712            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1713&                                        shuffle=0,     &
1714&                                        deflate=1,     &
1715&                                        deflate_level=DEF_LEVEL)
1716            ncret = nf90_put_var(ncid, ncvarid, &
1717&                                pconv_hpa(:))
1718
1719            ncret = nf90_def_var(ncid, 'ft', NF90_FLOAT, &
1720&                                       dim1dids, ncvarid)
1721            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1722&                                        shuffle=0,     &
1723&                                        deflate=1,     &
1724&                                        deflate_level=DEF_LEVEL)
1725            ncret = nf90_put_var(ncid, ncvarid, &
1726&                                ft(:))
1727
1728            ncret = nf90_def_var(ncid, 'fq', NF90_FLOAT, &
1729&                                       dim1dids, ncvarid)
1730            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1731&                                        shuffle=0,     &
1732&                                        deflate=1,     &
1733&                                        deflate_level=DEF_LEVEL)
1734            ncret = nf90_put_var(ncid, ncvarid, &
1735&                                fq(:))
1736
1737            ncret = nf90_def_var(ncid, 'sub', NF90_FLOAT, &
1738&                                       dim1dids, ncvarid)
1739            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1740&                                        shuffle=0,     &
1741&                                        deflate=1,     &
1742&                                        deflate_level=DEF_LEVEL)
1743            ncret = nf90_put_var(ncid, ncvarid, &
1744&                                sub(:))
1745
1746            dim1dids = (/na_dimid/)
1747
1748            ncret = nf90_def_var(ncid, 'phconv', NF90_FLOAT, &
1749&                                       dim1dids, ncvarid)
1750            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1751&                                        shuffle=0,     &
1752&                                        deflate=1,     &
1753&                                        deflate_level=DEF_LEVEL)
1754            ncret = nf90_put_var(ncid, ncvarid, &
1755&                                phconv(:))
1756
1757            ncret = nf90_def_var(ncid, 'phconv_hpa', NF90_FLOAT, &
1758&                                       dim1dids, ncvarid)
1759            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1760&                                        shuffle=0,     &
1761&                                        deflate=1,     &
1762&                                        deflate_level=DEF_LEVEL)
1763            ncret = nf90_put_var(ncid, ncvarid, &
1764&                                phconv_hpa(:))
1765
1766            ncret = nf90_def_var(ncid, 'tconv', NF90_FLOAT, &
1767&                                       dim1dids, ncvarid)
1768            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1769&                                        shuffle=0,     &
1770&                                        deflate=1,     &
1771&                                        deflate_level=DEF_LEVEL)
1772            ncret = nf90_put_var(ncid, ncvarid, &
1773&                                tconv(:))
1774
1775            ncret = nf90_def_var(ncid, 'qconv', NF90_FLOAT, &
1776&                                       dim1dids, ncvarid)
1777            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1778&                                        shuffle=0,     &
1779&                                        deflate=1,     &
1780&                                        deflate_level=DEF_LEVEL)
1781            ncret = nf90_put_var(ncid, ncvarid, &
1782&                                qconv(:))
1783
1784            ncret = nf90_def_var(ncid, 'qsconv', NF90_FLOAT, &
1785&                                       dim1dids, ncvarid)
1786            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1787&                                        shuffle=0,     &
1788&                                        deflate=1,     &
1789&                                        deflate_level=DEF_LEVEL)
1790            ncret = nf90_put_var(ncid, ncvarid, &
1791&                                qsconv(:))
1792
1793            ! New dimensions
1794            dim2dids = (/nconvlevmax_dimid, nconvlevmax_dimid/)
1795
1796            ncret = nf90_def_var(ncid, 'fmass', NF90_FLOAT, &
1797&                                       dim2dids, ncvarid)
1798            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1799&                                        shuffle=0,     &
1800&                                        deflate=1,     &
1801&                                        deflate_level=DEF_LEVEL)
1802            ncret = nf90_put_var(ncid, ncvarid, &
1803&                                fmass(:,:))
1804
1805            ncret = nf90_def_var(ncid, 'fmassfrac', NF90_FLOAT, &
1806&                                       dim2dids, ncvarid)
1807            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1808&                                        shuffle=0,     &
1809&                                        deflate=1,     &
1810&                                        deflate_level=DEF_LEVEL)
1811            ncret = nf90_put_var(ncid, ncvarid, &
1812&                                fmassfrac(:,:))
1813
1814
1815            ! New dimensions
1816            dim2dids = (/nxmax_dimid, nymax_dimid/)
1817
1818            ncret = nf90_def_var(ncid, 'cbaseflux', NF90_FLOAT, &
1819&                                       dim2dids, ncvarid)
1820            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1821&                                        shuffle=0,     &
1822&                                        deflate=1,     &
1823&                                        deflate_level=DEF_LEVEL)
1824            ncret = nf90_put_var(ncid, ncvarid, &
1825&                                cbaseflux(0:nxmax-1,0:nymax-1))
1826
1827            ! New dimensions
1828            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1829
1830            ncret = nf90_def_var(ncid, 'cbasefluxn', NF90_FLOAT, &
1831&                                       dim3dids, ncvarid)
1832            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1833&                                        shuffle=0,     &
1834&                                        deflate=1,     &
1835&                                        deflate_level=DEF_LEVEL)
1836            ncret = nf90_put_var(ncid, ncvarid, &
1837&                                cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
1838
1839
1840            ! Scalars
1841            ncret = nf90_def_var(ncid, 'psconv', NF90_FLOAT, ncvarid)
1842            call handle_nf90_err(ncret)
1843            ncret = nf90_put_var(ncid, ncvarid, psconv)
1844            call handle_nf90_err(ncret)
1845
1846            ncret = nf90_def_var(ncid, 'tt2conv', NF90_FLOAT, ncvarid)
1847            call handle_nf90_err(ncret)
1848            ncret = nf90_put_var(ncid, ncvarid, tt2conv)
1849            call handle_nf90_err(ncret)
1850
1851            ncret = nf90_def_var(ncid, 'td2conv', NF90_FLOAT, ncvarid)
1852            call handle_nf90_err(ncret)
1853            ncret = nf90_put_var(ncid, ncvarid, td2conv)
1854            call handle_nf90_err(ncret)
1855
1856            ncret = nf90_def_var(ncid, 'nconvlev', NF90_INT, ncvarid)
1857            call handle_nf90_err(ncret)
1858            ncret = nf90_put_var(ncid, ncvarid, nconvlev)
1859            call handle_nf90_err(ncret)
1860
1861            ncret = nf90_def_var(ncid, 'nconvtop', NF90_INT, ncvarid)
1862            call handle_nf90_err(ncret)
1863            ncret = nf90_put_var(ncid, ncvarid, nconvtop)
1864            call handle_nf90_err(ncret)
1865
1866            PRINT *, 'SUM(pconv): ', SUM(pconv)
1867            PRINT *, 'SUM(qconv): ', SUM(qconv)
1868            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
1869            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
1870            PRINT *, 'tt2conv: ', tt2conv
1871            PRINT *, 'nconvlev: ', nconvlev
1872
1873
1874
1875        ELSE IF (op == 'LOAD') THEN
1876
1877            ! Read the preprocessed format version string and insure it
1878            ! matches this version
1879            ncret = nf90_inq_dimid(ncid, 'preproc_fmt_str_dim', preproc_fmt_str_dimid)
1880            call handle_nf90_err(ncret)           
1881            ncret = nf90_inquire_dimension(ncid, preproc_fmt_str_dimid, preproc_fmt_str_dimname, &
1882&                                                temp_preproc_fmt_str_dim)
1883            call handle_nf90_err(ncret)
1884            PRINT *, 'temp_preproc_fmt_str_dim: ', temp_preproc_fmt_str_dim
1885
1886            ncret = nf90_inq_varid(ncid, 'preproc_fmt_str', ncvarid)
1887            call handle_nf90_err(ncret)
1888            ncret = nf90_get_var(ncid, ncvarid, temp_preproc_format_version_str(1:temp_preproc_fmt_str_dim))
1889            call handle_nf90_err(ncret)
1890
1891
1892            PRINT *, 'Reading preprocessed file format version: ', &
1893&                    temp_preproc_format_version_str
1894            IF (TRIM(temp_preproc_format_version_str) == &
1895&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
1896                CONTINUE
1897            ELSE
1898                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
1899                PRINT *, 'Inconsistent preprocessing format version'
1900                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
1901                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
1902                ! PRINT *, ''
1903                STOP
1904            END IF
1905
1906
1907
1908
1909
1910            ! Read the compiled max dimensions that were dumped from par_mod
1911            ! when creating the fp file, so that we can compare against
1912            ! current FLEXPART dimensions - they need to be the same, or else
1913            ! we abort.
1914
1915            ! Get dimensions
1916            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
1917            call handle_nf90_err(ncret)           
1918            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
1919&                                                temp_nxmax)
1920            call handle_nf90_err(ncret)
1921            PRINT *, 'temp_nxmax: ', temp_nxmax
1922
1923
1924            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
1925            call handle_nf90_err(ncret)
1926            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
1927&                                                temp_nymax)
1928            call handle_nf90_err(ncret)
1929            PRINT *, 'temp_nymax: ', temp_nymax
1930
1931            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
1932            call handle_nf90_err(ncret)
1933            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
1934&                                                temp_nzmax)
1935            call handle_nf90_err(ncret)
1936            PRINT *, 'temp_nzmax: ', temp_nzmax
1937
1938            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
1939            call handle_nf90_err(ncret)
1940            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
1941&                                                temp_nuvzmax)
1942            call handle_nf90_err(ncret)
1943            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
1944
1945            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
1946            call handle_nf90_err(ncret)
1947            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
1948&                                                temp_nwzmax)
1949            call handle_nf90_err(ncret)
1950            PRINT *, 'temp_nwzmax: ', temp_nwzmax
1951
1952            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
1953            call handle_nf90_err(ncret)
1954            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
1955&                                                temp_numclass)
1956            call handle_nf90_err(ncret)
1957            PRINT *, 'temp_numclass: ', temp_numclass
1958
1959            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
1960            call handle_nf90_err(ncret)
1961            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
1962&                                                temp_maxspec)
1963            call handle_nf90_err(ncret)
1964            PRINT *, 'temp_maxspec: ', temp_maxspec
1965
1966
1967
1968            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
1969&                   (temp_nzmax == nzmax) .AND. &
1970&                   (temp_nuvzmax == nuvzmax) .AND. &
1971&                   (temp_nwzmax == nwzmax) .AND. &
1972&                   (temp_numclass == numclass) .AND. &
1973&                   (temp_maxspec == maxspec) ) THEN
1974                CONTINUE
1975            ELSE
1976                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
1977                ! PRINT *, ''
1978                PRINT *, '                  FP file     Compiled FP'
1979                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
1980                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax
1981                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
1982                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
1983                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
1984                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
1985                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
1986                ! PRINT *, ''
1987                STOP
1988            END IF
1989
1990
1991
1992
1993            ! Scalar values
1994
1995
1996            ! Get the varid , then read into scalar variable
1997            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
1998            call handle_nf90_err(ncret)
1999            ncret = nf90_get_var(ncid, ncvarid, nx)
2000            call handle_nf90_err(ncret)
2001
2002            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
2003            call handle_nf90_err(ncret)
2004            ncret = nf90_get_var(ncid, ncvarid, ny)
2005            call handle_nf90_err(ncret)
2006
2007            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
2008            call handle_nf90_err(ncret)
2009            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
2010            call handle_nf90_err(ncret)
2011
2012            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
2013            call handle_nf90_err(ncret)
2014            ncret = nf90_get_var(ncid, ncvarid, nymin1)
2015            call handle_nf90_err(ncret)
2016
2017            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
2018            call handle_nf90_err(ncret)
2019            ncret = nf90_get_var(ncid, ncvarid, nxfield)
2020            call handle_nf90_err(ncret)
2021
2022            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
2023            call handle_nf90_err(ncret)
2024            ncret = nf90_get_var(ncid, ncvarid, nuvz)
2025            call handle_nf90_err(ncret)
2026
2027            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
2028            call handle_nf90_err(ncret)
2029            ncret = nf90_get_var(ncid, ncvarid, nwz)
2030            call handle_nf90_err(ncret)
2031
2032            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
2033            call handle_nf90_err(ncret)
2034            ncret = nf90_get_var(ncid, ncvarid, nz)
2035            call handle_nf90_err(ncret)
2036
2037            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
2038            call handle_nf90_err(ncret)
2039            ncret = nf90_get_var(ncid, ncvarid, nmixz)
2040            call handle_nf90_err(ncret)
2041
2042            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
2043            call handle_nf90_err(ncret)
2044            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
2045            call handle_nf90_err(ncret)
2046
2047            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
2048            call handle_nf90_err(ncret)
2049            ncret = nf90_get_var(ncid, ncvarid, dx)
2050            call handle_nf90_err(ncret)
2051
2052            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
2053            call handle_nf90_err(ncret)
2054            ncret = nf90_get_var(ncid, ncvarid, dy)
2055            call handle_nf90_err(ncret)
2056
2057            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
2058            call handle_nf90_err(ncret)
2059            ncret = nf90_get_var(ncid, ncvarid, xlon0)
2060            call handle_nf90_err(ncret)
2061
2062            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
2063            call handle_nf90_err(ncret)
2064            ncret = nf90_get_var(ncid, ncvarid, ylat0)
2065            call handle_nf90_err(ncret)
2066
2067            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
2068            call handle_nf90_err(ncret)
2069            ncret = nf90_get_var(ncid, ncvarid, dxconst)
2070            call handle_nf90_err(ncret)
2071
2072            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
2073            call handle_nf90_err(ncret)
2074            ncret = nf90_get_var(ncid, ncvarid, dyconst)
2075            call handle_nf90_err(ncret)
2076
2077
2078
2079
2080
2081
2082            ! Fixed fields, static in time
2083            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
2084            call handle_nf90_err(ncret)
2085            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
2086            call handle_nf90_err(ncret)
2087
2088            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
2089            call handle_nf90_err(ncret)
2090            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
2091            call handle_nf90_err(ncret)
2092
2093            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
2094            call handle_nf90_err(ncret)
2095            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
2096            call handle_nf90_err(ncret)
2097
2098            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
2099            call handle_nf90_err(ncret)
2100            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
2101            call handle_nf90_err(ncret)
2102
2103            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
2104            call handle_nf90_err(ncret)
2105            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
2106            call handle_nf90_err(ncret)
2107
2108
2109
2110
2111            ! 3d fields
2112
2113            ! Get the varid and read the variable into the array
2114            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
2115            call handle_nf90_err(ncret)
2116            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2117            call handle_nf90_err(ncret)
2118
2119            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
2120            call handle_nf90_err(ncret)
2121            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2122            call handle_nf90_err(ncret)
2123
2124            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
2125            call handle_nf90_err(ncret)
2126            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2127            call handle_nf90_err(ncret)
2128
2129            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
2130            call handle_nf90_err(ncret)
2131            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2132            call handle_nf90_err(ncret)
2133
2134            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
2135            call handle_nf90_err(ncret)
2136            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2137            call handle_nf90_err(ncret)
2138
2139            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
2140            call handle_nf90_err(ncret)
2141            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2142            call handle_nf90_err(ncret)
2143
2144            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
2145            call handle_nf90_err(ncret)
2146            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2147            call handle_nf90_err(ncret)
2148
2149            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
2150            call handle_nf90_err(ncret)
2151            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2152            call handle_nf90_err(ncret)
2153
2154            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
2155            call handle_nf90_err(ncret)
2156            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2157            call handle_nf90_err(ncret)
2158
2159            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
2160            call handle_nf90_err(ncret)
2161            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2162            call handle_nf90_err(ncret)
2163
2164            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
2165            call handle_nf90_err(ncret)
2166            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
2167            call handle_nf90_err(ncret)
2168
2169            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
2170            call handle_nf90_err(ncret)
2171            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2172            call handle_nf90_err(ncret)
2173
2174            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
2175            call handle_nf90_err(ncret)
2176            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2177            call handle_nf90_err(ncret)
2178
2179            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
2180            call handle_nf90_err(ncret)
2181            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
2182            call handle_nf90_err(ncret)
2183
2184            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
2185            call handle_nf90_err(ncret)
2186            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
2187            call handle_nf90_err(ncret)
2188
2189
2190
2191
2192            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2193&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2194
2195
2196            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2197&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2198
2199
2200
2201            ! 2d fields
2202
2203            ! Get the varid and read the variable into the array
2204            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
2205            call handle_nf90_err(ncret)
2206            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
2207            call handle_nf90_err(ncret)
2208
2209            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
2210            call handle_nf90_err(ncret)
2211            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
2212            call handle_nf90_err(ncret)
2213
2214            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
2215            call handle_nf90_err(ncret)
2216            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
2217            call handle_nf90_err(ncret)
2218
2219            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
2220            call handle_nf90_err(ncret)
2221            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
2222            call handle_nf90_err(ncret)
2223
2224            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
2225            call handle_nf90_err(ncret)
2226            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
2227            call handle_nf90_err(ncret)
2228
2229            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
2230            call handle_nf90_err(ncret)
2231            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
2232            call handle_nf90_err(ncret)
2233
2234            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
2235            call handle_nf90_err(ncret)
2236            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
2237            call handle_nf90_err(ncret)
2238
2239            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
2240            call handle_nf90_err(ncret)
2241            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
2242            call handle_nf90_err(ncret)
2243
2244            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
2245            call handle_nf90_err(ncret)
2246            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
2247            call handle_nf90_err(ncret)
2248
2249            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
2250            call handle_nf90_err(ncret)
2251            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
2252            call handle_nf90_err(ncret)
2253
2254            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
2255            call handle_nf90_err(ncret)
2256            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
2257            call handle_nf90_err(ncret)
2258
2259            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
2260            call handle_nf90_err(ncret)
2261            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
2262            call handle_nf90_err(ncret)
2263
2264            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
2265            call handle_nf90_err(ncret)
2266            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
2267            call handle_nf90_err(ncret)
2268
2269            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
2270            call handle_nf90_err(ncret)
2271            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
2272            call handle_nf90_err(ncret)
2273
2274            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
2275            call handle_nf90_err(ncret)
2276            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
2277            call handle_nf90_err(ncret)
2278
2279            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
2280            call handle_nf90_err(ncret)
2281            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
2282            call handle_nf90_err(ncret)
2283
2284            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
2285            call handle_nf90_err(ncret)
2286            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
2287            call handle_nf90_err(ncret)
2288
2289            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
2290            call handle_nf90_err(ncret)
2291            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
2292            call handle_nf90_err(ncret)
2293
2294            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
2295            call handle_nf90_err(ncret)
2296            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
2297            call handle_nf90_err(ncret)
2298
2299
2300
2301
2302            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
2303&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
2304
2305            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
2306&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
2307
2308
2309            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
2310            call handle_nf90_err(ncret)
2311            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
2312            call handle_nf90_err(ncret)
2313
2314
2315
2316
2317
2318            ! 1d fields
2319
2320            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
2321            call handle_nf90_err(ncret)
2322            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
2323            call handle_nf90_err(ncret)
2324
2325            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
2326            call handle_nf90_err(ncret)
2327            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
2328            call handle_nf90_err(ncret)
2329
2330            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
2331            call handle_nf90_err(ncret)
2332            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
2333            call handle_nf90_err(ncret)
2334
2335            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
2336            call handle_nf90_err(ncret)
2337            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
2338            call handle_nf90_err(ncret)
2339
2340            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
2341            call handle_nf90_err(ncret)
2342            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
2343            call handle_nf90_err(ncret)
2344
2345            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
2346            call handle_nf90_err(ncret)
2347            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
2348            call handle_nf90_err(ncret)
2349
2350            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
2351            call handle_nf90_err(ncret)
2352            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
2353            call handle_nf90_err(ncret)
2354
2355
2356
2357            PRINT *, 'SUM(bknew(1:nzmax)): ', &
2358&                                        SUM(bknew(1:nzmax))
2359
2360
2361
2362
2363            ! Now the nested input grid variables
2364            ! Get the compiled values that were written into the FP file, and
2365            ! make sure they are equal to the current compiled values, to make
2366            ! sure we are working with consistent arrays
2367            ncret = nf90_inq_dimid(ncid, 'maxnests', maxnests_dimid)
2368            call handle_nf90_err(ncret)
2369            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
2370&                                                temp_maxnests)
2371            call handle_nf90_err(ncret)
2372            PRINT *, 'temp_maxnests: ', temp_maxnests
2373
2374            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
2375            call handle_nf90_err(ncret)
2376            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
2377&                                                temp_nxmaxn)
2378            call handle_nf90_err(ncret)
2379            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
2380
2381            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
2382            call handle_nf90_err(ncret)
2383            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
2384&                                                temp_nymaxn)
2385            call handle_nf90_err(ncret)
2386            PRINT *, 'temp_nymaxn: ', temp_nymaxn
2387
2388            ! Note that maxspec_dimid and numclass_dimid were checked above
2389
2390
2391
2392
2393            IF ( (temp_nxmaxn == nxmaxn) .AND. (temp_nymaxn == nymaxn) .AND. &
2394&                   (temp_maxnests == maxnests) ) THEN
2395                CONTINUE
2396            ELSE
2397                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
2398                ! PRINT *, ''
2399                PRINT *, '                  FP file     Compiled FP'
2400                PRINT *, 'nxmaxn:     ', temp_nxmaxn, '    ', nxmaxn
2401                PRINT *, 'nymaxn:     ', temp_nymaxn, '    ', nymaxn
2402                PRINT *, 'maxnests:     ', temp_maxnests, '    ', maxnests
2403                STOP
2404            END IF
2405
2406
2407
2408            ! Nested, scalar values (for each nest)
2409            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
2410            call handle_nf90_err(ncret)
2411            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
2412            call handle_nf90_err(ncret)
2413
2414            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
2415            call handle_nf90_err(ncret)
2416            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
2417            call handle_nf90_err(ncret)
2418
2419            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
2420            call handle_nf90_err(ncret)
2421            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
2422            call handle_nf90_err(ncret)
2423
2424            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
2425            call handle_nf90_err(ncret)
2426            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
2427            call handle_nf90_err(ncret)
2428
2429            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
2430            call handle_nf90_err(ncret)
2431            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
2432            call handle_nf90_err(ncret)
2433
2434            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
2435            call handle_nf90_err(ncret)
2436            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
2437            call handle_nf90_err(ncret)
2438
2439
2440
2441            ! Nested fields, static over time
2442            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
2443            call handle_nf90_err(ncret)
2444            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2445            call handle_nf90_err(ncret)
2446
2447            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
2448            call handle_nf90_err(ncret)
2449            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2450            call handle_nf90_err(ncret)
2451
2452            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
2453            call handle_nf90_err(ncret)
2454            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2455            call handle_nf90_err(ncret)
2456
2457            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
2458            call handle_nf90_err(ncret)
2459            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
2460            call handle_nf90_err(ncret)
2461
2462
2463            PRINT *, 'SUM(oron): ', SUM(oron)
2464
2465
2466
2467
2468            ! 3d nested fields
2469
2470            ncret = nf90_inq_varid(ncid, 'uun', ncvarid)
2471            call handle_nf90_err(ncret)
2472            ncret = nf90_get_var(ncid, ncvarid, uun(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2473            call handle_nf90_err(ncret)
2474
2475            ncret = nf90_inq_varid(ncid, 'vvn', ncvarid)
2476            call handle_nf90_err(ncret)
2477            ncret = nf90_get_var(ncid, ncvarid, vvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2478            call handle_nf90_err(ncret)
2479
2480            ncret = nf90_inq_varid(ncid, 'wwn', ncvarid)
2481            call handle_nf90_err(ncret)
2482            ncret = nf90_get_var(ncid, ncvarid, wwn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2483            call handle_nf90_err(ncret)
2484
2485            ncret = nf90_inq_varid(ncid, 'ttn', ncvarid)
2486            call handle_nf90_err(ncret)
2487            ncret = nf90_get_var(ncid, ncvarid, ttn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2488            call handle_nf90_err(ncret)
2489
2490            ncret = nf90_inq_varid(ncid, 'qvn', ncvarid)
2491            call handle_nf90_err(ncret)
2492            ncret = nf90_get_var(ncid, ncvarid, qvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2493            call handle_nf90_err(ncret)
2494
2495            ncret = nf90_inq_varid(ncid, 'pvn', ncvarid)
2496            call handle_nf90_err(ncret)
2497            ncret = nf90_get_var(ncid, ncvarid, pvn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2498            call handle_nf90_err(ncret)
2499
2500            ncret = nf90_inq_varid(ncid, 'rhon', ncvarid)
2501            call handle_nf90_err(ncret)
2502            ncret = nf90_get_var(ncid, ncvarid, rhon(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2503            call handle_nf90_err(ncret)
2504
2505            ncret = nf90_inq_varid(ncid, 'drhodzn', ncvarid)
2506            call handle_nf90_err(ncret)
2507            ncret = nf90_get_var(ncid, ncvarid, drhodzn(0:nxmaxn-1,0:nymaxn-1,1:nzmax,cm_index,1:maxnests))
2508            call handle_nf90_err(ncret)
2509
2510            ncret = nf90_inq_varid(ncid, 'tthn', ncvarid)
2511            call handle_nf90_err(ncret)
2512            ncret = nf90_get_var(ncid, ncvarid, tthn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
2513            call handle_nf90_err(ncret)
2514
2515            ncret = nf90_inq_varid(ncid, 'qvhn', ncvarid)
2516            call handle_nf90_err(ncret)
2517            ncret = nf90_get_var(ncid, ncvarid, qvhn(0:nxmaxn-1,0:nymaxn-1,1:nuvzmax,cm_index,1:maxnests))
2518            call handle_nf90_err(ncret)
2519
2520            ncret = nf90_inq_varid(ncid, 'cloudsn', ncvarid)
2521            call handle_nf90_err(ncret)
2522            ncret = nf90_get_var(ncid, ncvarid, cloudsn(0:nxmaxn-1,0:nymaxn-1,0:nzmax,cm_index,1:maxnests))
2523            call handle_nf90_err(ncret)
2524
2525            ncret = nf90_inq_varid(ncid, 'cloudsnh', ncvarid)
2526            call handle_nf90_err(ncret)
2527            ncret = nf90_get_var(ncid, ncvarid, cloudsnh(0:nxmaxn-1,0:nymaxn-1,cm_index,1:maxnests))
2528            call handle_nf90_err(ncret)
2529
2530
2531
2532
2533            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
2534            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
2535            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
2536
2537
2538
2539
2540            ! 2d nested fields
2541            ncret = nf90_inq_varid(ncid, 'psn', ncvarid)
2542            call handle_nf90_err(ncret)
2543            ncret = nf90_get_var(ncid, ncvarid, psn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2544            call handle_nf90_err(ncret)
2545
2546            ncret = nf90_inq_varid(ncid, 'sdn', ncvarid)
2547            call handle_nf90_err(ncret)
2548            ncret = nf90_get_var(ncid, ncvarid, sdn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2549            call handle_nf90_err(ncret)
2550
2551            ncret = nf90_inq_varid(ncid, 'msln', ncvarid)
2552            call handle_nf90_err(ncret)
2553            ncret = nf90_get_var(ncid, ncvarid, msln(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2554            call handle_nf90_err(ncret)
2555
2556            ncret = nf90_inq_varid(ncid, 'tccn', ncvarid)
2557            call handle_nf90_err(ncret)
2558            ncret = nf90_get_var(ncid, ncvarid, tccn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2559            call handle_nf90_err(ncret)
2560
2561            ncret = nf90_inq_varid(ncid, 'u10n', ncvarid)
2562            call handle_nf90_err(ncret)
2563            ncret = nf90_get_var(ncid, ncvarid, u10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2564            call handle_nf90_err(ncret)
2565
2566            ncret = nf90_inq_varid(ncid, 'v10n', ncvarid)
2567            call handle_nf90_err(ncret)
2568            ncret = nf90_get_var(ncid, ncvarid, v10n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2569            call handle_nf90_err(ncret)
2570
2571            ncret = nf90_inq_varid(ncid, 'tt2n', ncvarid)
2572            call handle_nf90_err(ncret)
2573            ncret = nf90_get_var(ncid, ncvarid, tt2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2574            call handle_nf90_err(ncret)
2575
2576            ncret = nf90_inq_varid(ncid, 'td2n', ncvarid)
2577            call handle_nf90_err(ncret)
2578            ncret = nf90_get_var(ncid, ncvarid, td2n(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2579            call handle_nf90_err(ncret)
2580
2581            ncret = nf90_inq_varid(ncid, 'lsprecn', ncvarid)
2582            call handle_nf90_err(ncret)
2583            ncret = nf90_get_var(ncid, ncvarid, lsprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2584            call handle_nf90_err(ncret)
2585
2586            ncret = nf90_inq_varid(ncid, 'convprecn', ncvarid)
2587            call handle_nf90_err(ncret)
2588            ncret = nf90_get_var(ncid, ncvarid, convprecn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2589            call handle_nf90_err(ncret)
2590
2591            ncret = nf90_inq_varid(ncid, 'sshfn', ncvarid)
2592            call handle_nf90_err(ncret)
2593            ncret = nf90_get_var(ncid, ncvarid, sshfn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2594            call handle_nf90_err(ncret)
2595
2596            ncret = nf90_inq_varid(ncid, 'ssrn', ncvarid)
2597            call handle_nf90_err(ncret)
2598            ncret = nf90_get_var(ncid, ncvarid, ssrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2599            call handle_nf90_err(ncret)
2600
2601            ncret = nf90_inq_varid(ncid, 'surfstrn', ncvarid)
2602            call handle_nf90_err(ncret)
2603            ncret = nf90_get_var(ncid, ncvarid, surfstrn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2604            call handle_nf90_err(ncret)
2605
2606            ncret = nf90_inq_varid(ncid, 'ustarn', ncvarid)
2607            call handle_nf90_err(ncret)
2608            ncret = nf90_get_var(ncid, ncvarid, ustarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2609            call handle_nf90_err(ncret)
2610
2611            ncret = nf90_inq_varid(ncid, 'wstarn', ncvarid)
2612            call handle_nf90_err(ncret)
2613            ncret = nf90_get_var(ncid, ncvarid, wstarn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2614            call handle_nf90_err(ncret)
2615
2616            ncret = nf90_inq_varid(ncid, 'hmixn', ncvarid)
2617            call handle_nf90_err(ncret)
2618            ncret = nf90_get_var(ncid, ncvarid, hmixn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2619            call handle_nf90_err(ncret)
2620
2621            ncret = nf90_inq_varid(ncid, 'tropopausen', ncvarid)
2622            call handle_nf90_err(ncret)
2623            ncret = nf90_get_var(ncid, ncvarid, tropopausen(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2624            call handle_nf90_err(ncret)
2625
2626            ncret = nf90_inq_varid(ncid, 'olin', ncvarid)
2627            call handle_nf90_err(ncret)
2628            ncret = nf90_get_var(ncid, ncvarid, olin(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2629            call handle_nf90_err(ncret)
2630
2631            ncret = nf90_inq_varid(ncid, 'diffkn', ncvarid)
2632            call handle_nf90_err(ncret)
2633            ncret = nf90_get_var(ncid, ncvarid, diffkn(0:nxmaxn-1,0:nymaxn-1,1,cm_index,1:maxnests))
2634            call handle_nf90_err(ncret)
2635
2636            ncret = nf90_inq_varid(ncid, 'vdepn', ncvarid)
2637            call handle_nf90_err(ncret)
2638            ncret = nf90_get_var(ncid, ncvarid, vdepn(0:nxmaxn-1,0:nymaxn-1,1:maxspec,cm_index,1:maxnests))
2639            call handle_nf90_err(ncret)
2640
2641
2642
2643
2644            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
2645            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
2646            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
2647
2648
2649
2650            ! Auxiliary variables for nests
2651            ncret = nf90_inq_varid(ncid, 'xresoln', ncvarid)
2652            call handle_nf90_err(ncret)
2653            ncret = nf90_get_var(ncid, ncvarid, xresoln(0:maxnests))
2654            call handle_nf90_err(ncret)
2655
2656            ncret = nf90_inq_varid(ncid, 'yresoln', ncvarid)
2657            call handle_nf90_err(ncret)
2658            ncret = nf90_get_var(ncid, ncvarid, yresoln(0:maxnests))
2659            call handle_nf90_err(ncret)
2660
2661            ncret = nf90_inq_varid(ncid, 'xln', ncvarid)
2662            call handle_nf90_err(ncret)
2663            ncret = nf90_get_var(ncid, ncvarid, xln(1:maxnests))
2664            call handle_nf90_err(ncret)
2665
2666            ncret = nf90_inq_varid(ncid, 'yln', ncvarid)
2667            call handle_nf90_err(ncret)
2668            ncret = nf90_get_var(ncid, ncvarid, yln(1:maxnests))
2669            call handle_nf90_err(ncret)
2670
2671            ncret = nf90_inq_varid(ncid, 'xrn', ncvarid)
2672            call handle_nf90_err(ncret)
2673            ncret = nf90_get_var(ncid, ncvarid, xrn(1:maxnests))
2674            call handle_nf90_err(ncret)
2675
2676            ncret = nf90_inq_varid(ncid, 'yrn', ncvarid)
2677            call handle_nf90_err(ncret)
2678            ncret = nf90_get_var(ncid, ncvarid, yrn(1:maxnests))
2679            call handle_nf90_err(ncret)
2680
2681
2682
2683            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
2684            PRINT *, 'SUM(xrn): ', SUM(xrn)
2685
2686
2687
2688            ! Variables for polar stereographic projection
2689            ncret = nf90_inq_varid(ncid, 'southpolemap', ncvarid)
2690            call handle_nf90_err(ncret)
2691            ncret = nf90_get_var(ncid, ncvarid, southpolemap(:))
2692            call handle_nf90_err(ncret)
2693
2694            ncret = nf90_inq_varid(ncid, 'northpolemap', ncvarid)
2695            call handle_nf90_err(ncret)
2696            ncret = nf90_get_var(ncid, ncvarid, northpolemap(:))
2697            call handle_nf90_err(ncret)
2698
2699            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
2700            ! to INTEGER for NetCDF storage
2701            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
2702            call handle_nf90_err(ncret)
2703            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
2704            call handle_nf90_err(ncret)
2705            xglobal = integer2logical(temp_integer)
2706
2707            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
2708            call handle_nf90_err(ncret)
2709            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
2710            call handle_nf90_err(ncret)
2711            sglobal = integer2logical(temp_integer)
2712
2713            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
2714            call handle_nf90_err(ncret)
2715            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
2716            call handle_nf90_err(ncret)
2717            nglobal = integer2logical(temp_integer)
2718
2719            ncret = nf90_inq_varid(ncid, 'switchnorthg', ncvarid)
2720            call handle_nf90_err(ncret)
2721            ncret = nf90_get_var(ncid, ncvarid, switchnorthg)
2722            call handle_nf90_err(ncret)
2723
2724            ncret = nf90_inq_varid(ncid, 'switchsouthg', ncvarid)
2725            call handle_nf90_err(ncret)
2726            ncret = nf90_get_var(ncid, ncvarid, switchsouthg)
2727            call handle_nf90_err(ncret)
2728
2729
2730            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
2731            PRINT *, 'xglobal: ', xglobal
2732            PRINT *, 'sglobal: ', sglobal
2733            PRINT *, 'nglobal: ', nglobal
2734            PRINT *, 'switchsouthg: ', switchsouthg
2735
2736
2737
2738
2739            ! Variables declared in conv_mod (convection)
2740            ncret = nf90_inq_varid(ncid, 'pconv', ncvarid)
2741            call handle_nf90_err(ncret)
2742            ncret = nf90_get_var(ncid, ncvarid, pconv(:))
2743            call handle_nf90_err(ncret)
2744
2745            ncret = nf90_inq_varid(ncid, 'dpr', ncvarid)
2746            call handle_nf90_err(ncret)
2747            ncret = nf90_get_var(ncid, ncvarid, dpr(:))
2748            call handle_nf90_err(ncret)
2749
2750            ncret = nf90_inq_varid(ncid, 'pconv_hpa', ncvarid)
2751            call handle_nf90_err(ncret)
2752            ncret = nf90_get_var(ncid, ncvarid, pconv_hpa(:))
2753            call handle_nf90_err(ncret)
2754
2755            ncret = nf90_inq_varid(ncid, 'ft', ncvarid)
2756            call handle_nf90_err(ncret)
2757            ncret = nf90_get_var(ncid, ncvarid, ft(:))
2758            call handle_nf90_err(ncret)
2759
2760            ncret = nf90_inq_varid(ncid, 'fq', ncvarid)
2761            call handle_nf90_err(ncret)
2762            ncret = nf90_get_var(ncid, ncvarid, fq(:))
2763            call handle_nf90_err(ncret)
2764
2765            ncret = nf90_inq_varid(ncid, 'sub', ncvarid)
2766            call handle_nf90_err(ncret)
2767            ncret = nf90_get_var(ncid, ncvarid, sub(:))
2768            call handle_nf90_err(ncret)
2769
2770            ncret = nf90_inq_varid(ncid, 'phconv', ncvarid)
2771            call handle_nf90_err(ncret)
2772            ncret = nf90_get_var(ncid, ncvarid, phconv(:))
2773            call handle_nf90_err(ncret)
2774
2775            ncret = nf90_inq_varid(ncid, 'phconv_hpa', ncvarid)
2776            call handle_nf90_err(ncret)
2777            ncret = nf90_get_var(ncid, ncvarid, phconv_hpa(:))
2778            call handle_nf90_err(ncret)
2779
2780            ncret = nf90_inq_varid(ncid, 'tconv', ncvarid)
2781            call handle_nf90_err(ncret)
2782            ncret = nf90_get_var(ncid, ncvarid, tconv(:))
2783            call handle_nf90_err(ncret)
2784
2785            ncret = nf90_inq_varid(ncid, 'qconv', ncvarid)
2786            call handle_nf90_err(ncret)
2787            ncret = nf90_get_var(ncid, ncvarid, qconv(:))
2788            call handle_nf90_err(ncret)
2789
2790            ncret = nf90_inq_varid(ncid, 'qsconv', ncvarid)
2791            call handle_nf90_err(ncret)
2792            ncret = nf90_get_var(ncid, ncvarid, qsconv(:))
2793            call handle_nf90_err(ncret)
2794
2795            ncret = nf90_inq_varid(ncid, 'fmass', ncvarid)
2796            call handle_nf90_err(ncret)
2797            ncret = nf90_get_var(ncid, ncvarid, fmass(:,:))
2798            call handle_nf90_err(ncret)
2799
2800            ncret = nf90_inq_varid(ncid, 'fmassfrac', ncvarid)
2801            call handle_nf90_err(ncret)
2802            ncret = nf90_get_var(ncid, ncvarid, fmassfrac(:,:))
2803            call handle_nf90_err(ncret)
2804
2805            ncret = nf90_inq_varid(ncid, 'cbaseflux', ncvarid)
2806            call handle_nf90_err(ncret)
2807            ncret = nf90_get_var(ncid, ncvarid, cbaseflux(0:nxmax-1,0:nymax-1))
2808            call handle_nf90_err(ncret)
2809
2810            ncret = nf90_inq_varid(ncid, 'cbasefluxn', ncvarid)
2811            call handle_nf90_err(ncret)
2812            ncret = nf90_get_var(ncid, ncvarid, cbasefluxn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
2813            call handle_nf90_err(ncret)
2814
2815            ncret = nf90_inq_varid(ncid, 'psconv', ncvarid)
2816            call handle_nf90_err(ncret)
2817            ncret = nf90_get_var(ncid, ncvarid, psconv)
2818            call handle_nf90_err(ncret)
2819
2820            ncret = nf90_inq_varid(ncid, 'tt2conv', ncvarid)
2821            call handle_nf90_err(ncret)
2822            ncret = nf90_get_var(ncid, ncvarid, tt2conv)
2823            call handle_nf90_err(ncret)
2824
2825            ncret = nf90_inq_varid(ncid, 'td2conv', ncvarid)
2826            call handle_nf90_err(ncret)
2827            ncret = nf90_get_var(ncid, ncvarid, td2conv)
2828            call handle_nf90_err(ncret)
2829
2830            ncret = nf90_inq_varid(ncid, 'nconvlev', ncvarid)
2831            call handle_nf90_err(ncret)
2832            ncret = nf90_get_var(ncid, ncvarid, nconvlev)
2833            call handle_nf90_err(ncret)
2834
2835            ncret = nf90_inq_varid(ncid, 'nconvtop', ncvarid)
2836            call handle_nf90_err(ncret)
2837            ncret = nf90_get_var(ncid, ncvarid, nconvtop)
2838            call handle_nf90_err(ncret)
2839
2840
2841
2842
2843            PRINT *, 'SUM(pconv): ', SUM(pconv)
2844            PRINT *, 'SUM(qconv): ', SUM(qconv)
2845            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
2846            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
2847            PRINT *, 'tt2conv: ', tt2conv
2848            PRINT *, 'nconvlev: ', nconvlev
2849
2850
2851
2852        ELSE
2853            STOP 'fpio(): Illegal operation'
2854           
2855        ENDIF
2856    END SUBROUTINE fpio
2857
2858
2859
2860
2861
2862    SUBROUTINE fpio_rawbin(iounit, op, cm_index)
2863        IMPLICIT NONE
2864        INTEGER, INTENT(IN) :: iounit
2865        CHARACTER(LEN=4), INTENT(IN) :: op        ! Operation - DUMP or LOAD
2866        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
2867                                                  ! most com_mod variables.
2868                                                  ! Should be 1 or 2
2869
2870
2871        INTEGER :: temp_integer   ! temporary value
2872
2873
2874        ! These are temporary variables, used in the LOAD option, for
2875        ! comparing against the current values in FLEXPART of nxmax, nymax, ...
2876        INTEGER :: temp_nxmax, temp_nymax, temp_nzmax, &
2877&                  temp_nuvzmax, temp_nwzmax, &
2878&                  temp_maxspec, temp_numclass,&
2879&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
2880
2881        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
2882
2883        CHARACTER(LEN=128) :: errmesg
2884
2885        INTEGER, PARAMETER :: DEF_LEVEL = 3
2886
2887        if (op == 'DUMP') THEN
2888
2889
2890            ! Write the preprocessing format version string
2891            !  NEED TO FILL THIS IN FOR NC4
2892
2893
2894
2895            WRITE (iounit) PREPROC_FORMAT_VERSION_STR
2896
2897
2898            ! Write the compiled max dimensions from par_mod - these are
2899            ! not meant to be reassigned during a LOAD, but used as "header"
2900            ! information to provide the structure of arrays
2901
2902
2903            WRITE (iounit) nxmax, nymax, nzmax, nuvzmax, nwzmax
2904
2905
2906
2907
2908            ! Scalar values
2909
2910            ! Fixed fields, static in time
2911
2912
2913
2914            WRITE(iounit) oro, excessoro, lsm, xlanduse, height
2915
2916
2917 
2918
2919            ! 3d fields
2920            WRITE(iounit) uu(:,:,:,cm_index)
2921            WRITE(iounit) vv(:,:,:,cm_index)
2922            WRITE(iounit) uupol(:,:,:,cm_index)
2923            WRITE(iounit) vvpol(:,:,:,cm_index)
2924            WRITE(iounit) ww(:,:,:,cm_index)
2925            WRITE(iounit) tt(:,:,:,cm_index)
2926            WRITE(iounit) qv(:,:,:,cm_index)
2927            WRITE(iounit) pv(:,:,:,cm_index)
2928            WRITE(iounit) rho(:,:,:,cm_index)
2929            WRITE(iounit) drhodz(:,:,:,cm_index)
2930            WRITE(iounit) tth(:,:,:,cm_index)
2931            WRITE(iounit) qvh(:,:,:,cm_index)
2932            WRITE(iounit) pplev(:,:,:,cm_index)
2933            WRITE(iounit) clouds(:,:,:,cm_index)
2934            WRITE(iounit) cloudsh(:,:,cm_index)
2935
2936
2937
2938!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2939!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2940
2941!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
2942!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
2943
2944
2945
2946            ! 2d fields
2947            WRITE(iounit) ps(:,:,:,cm_index)
2948            WRITE(iounit) sd(:,:,:,cm_index)
2949            WRITE(iounit) msl(:,:,:,cm_index)
2950            WRITE(iounit) tcc(:,:,:,cm_index)
2951            WRITE(iounit) u10(:,:,:,cm_index)
2952            WRITE(iounit) v10(:,:,:,cm_index)
2953            WRITE(iounit) tt2(:,:,:,cm_index)
2954            WRITE(iounit) td2(:,:,:,cm_index)
2955            WRITE(iounit) lsprec(:,:,:,cm_index)
2956            WRITE(iounit) convprec(:,:,:,cm_index)
2957            WRITE(iounit) sshf(:,:,:,cm_index)
2958            WRITE(iounit) ssr(:,:,:,cm_index)
2959            WRITE(iounit) surfstr(:,:,:,cm_index)
2960            WRITE(iounit) ustar(:,:,:,cm_index)
2961            WRITE(iounit) wstar(:,:,:,cm_index)
2962            WRITE(iounit) hmix(:,:,:,cm_index)
2963            WRITE(iounit) tropopause(:,:,:,cm_index)
2964            WRITE(iounit) oli(:,:,:,cm_index)
2965            WRITE(iounit) diffk(:,:,:,cm_index)
2966            WRITE(iounit) vdep(:,:,:,cm_index)
2967
2968
2969
2970
2971            ! 1d fields
2972            WRITE(iounit) z0(:)
2973            WRITE(iounit) akm(:)
2974            WRITE(iounit) bkm(:)
2975            WRITE(iounit) akz(:)
2976            WRITE(iounit) bkz(:)
2977            WRITE(iounit) aknew(:)
2978            WRITE(iounit) bknew(:)
2979
2980
2981
2982
2983
2984!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
2985!&                                        SUM(bknew(1:nzmax))
2986
2987
2988
2989            ! Getting ready to add in nested code
2990
2991            ! These are compiled max dimensions from par_mod - these are
2992            ! not meant to be reassigned during a LOAD, but used as "header"
2993            ! information to provide the structure of arrays
2994            WRITE(iounit) nxn(:)
2995            WRITE(iounit) nyn(:)
2996            WRITE(iounit) dxn(:)
2997            WRITE(iounit) dyn(:)
2998            WRITE(iounit) xlon0n(:)
2999            WRITE(iounit) ylat0n(:)
3000
3001            ! Nested, scalar values (for each nest)
3002
3003
3004            ! Nested fields, static over time
3005            WRITE(iounit) oron, excessoron, lsmn, xlandusen
3006
3007
3008!           PRINT *, 'SUM(oron): ', SUM(oron)
3009
3010
3011
3012            ! 3d nested fields
3013            WRITE(iounit) uun(:,:,:,cm_index,:)
3014            WRITE(iounit) vvn(:,:,:,cm_index,:)
3015            WRITE(iounit) wwn(:,:,:,cm_index,:)
3016            WRITE(iounit) ttn(:,:,:,cm_index,:)
3017            WRITE(iounit) qvn(:,:,:,cm_index,:)
3018            WRITE(iounit) pvn(:,:,:,cm_index,:)
3019            WRITE(iounit) cloudsn(:,:,:,cm_index,:)
3020            WRITE(iounit) cloudsnh(:,:,cm_index,:)
3021            WRITE(iounit) rhon(:,:,:,cm_index,:)
3022            WRITE(iounit) drhodzn(:,:,:,cm_index,:)
3023            WRITE(iounit) tthn(:,:,:,cm_index,:)
3024            WRITE(iounit) qvhn(:,:,:,cm_index,:)
3025
3026
3027
3028!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
3029!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
3030!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
3031
3032
3033
3034            ! 2d nested fields
3035            WRITE(iounit) psn(:,:,:,cm_index,:)
3036            WRITE(iounit) sdn(:,:,:,cm_index,:)
3037            WRITE(iounit) msln(:,:,:,cm_index,:)
3038            WRITE(iounit) tccn(:,:,:,cm_index,:)
3039            WRITE(iounit) u10n(:,:,:,cm_index,:)
3040            WRITE(iounit) v10n(:,:,:,cm_index,:)
3041            WRITE(iounit) tt2n(:,:,:,cm_index,:)
3042            WRITE(iounit) td2n(:,:,:,cm_index,:)
3043            WRITE(iounit) lsprecn(:,:,:,cm_index,:)
3044            WRITE(iounit) convprecn(:,:,:,cm_index,:)
3045            WRITE(iounit) sshfn(:,:,:,cm_index,:)
3046            WRITE(iounit) ssrn(:,:,:,cm_index,:)
3047            WRITE(iounit) surfstrn(:,:,:,cm_index,:)
3048            WRITE(iounit) ustarn(:,:,:,cm_index,:)
3049            WRITE(iounit) wstarn(:,:,:,cm_index,:)
3050            WRITE(iounit) hmixn(:,:,:,cm_index,:)
3051            WRITE(iounit) tropopausen(:,:,:,cm_index,:)
3052            WRITE(iounit) olin(:,:,:,cm_index,:)
3053            WRITE(iounit) diffkn(:,:,:,cm_index,:)
3054            WRITE(iounit) vdepn(:,:,:,cm_index,:)
3055
3056
3057
3058!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
3059!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
3060!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
3061
3062
3063
3064
3065
3066            ! Auxiliary variables for nests
3067            WRITE(iounit) xresoln(:)
3068            WRITE(iounit) yresoln(:)
3069            WRITE(iounit) xln(:)
3070            WRITE(iounit) yln(:)
3071            WRITE(iounit) xrn(:)
3072            WRITE(iounit) yrn(:)
3073
3074
3075
3076!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
3077!            PRINT *, 'SUM(xrn): ', SUM(xrn)
3078
3079
3080
3081            ! Variables for polar stereographic projection
3082            WRITE(iounit) xglobal, sglobal, nglobal
3083            WRITE(iounit) switchnorthg, switchsouthg
3084            WRITE(iounit) southpolemap(:)
3085            WRITE(iounit) northpolemap(:)
3086
3087
3088
3089
3090
3091!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
3092!            PRINT *, 'xglobal: ', xglobal
3093!            PRINT *, 'sglobal: ', sglobal
3094!            PRINT *, 'nglobal: ', nglobal
3095!            PRINT *, 'switchsouthg: ', switchsouthg
3096
3097            ! Variables declared in conv_mod (convection)
3098            WRITE(iounit) pconv(:)
3099            WRITE(iounit) phconv(:)
3100            WRITE(iounit) dpr(:)
3101            WRITE(iounit) pconv_hpa(:)
3102            WRITE(iounit) phconv_hpa(:)
3103            WRITE(iounit) ft(:)
3104            WRITE(iounit) fq(:)
3105            WRITE(iounit) fmass(:,:)
3106            WRITE(iounit) sub(:)
3107            WRITE(iounit) fmassfrac(:,:)
3108            WRITE(iounit) cbaseflux(:,:)
3109            WRITE(iounit) cbasefluxn(:,:,:)
3110            WRITE(iounit) tconv(:)
3111            WRITE(iounit) qconv(:)
3112            WRITE(iounit) qsconv(:)
3113            WRITE(iounit) psconv, tt2conv, td2conv
3114            WRITE(iounit) nconvlev, nconvtop
3115
3116
3117
3118
3119!            PRINT *, 'SUM(pconv): ', SUM(pconv)
3120!            PRINT *, 'SUM(qconv): ', SUM(qconv)
3121!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
3122!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
3123!            PRINT *, 'tt2conv: ', tt2conv
3124!            PRINT *, 'nconvlev: ', nconvlev
3125
3126
3127
3128        ELSE IF (op == 'LOAD') THEN
3129
3130            ! Read the preprocessed format version string and insure it
3131            ! matches this version
3132            READ (iounit) temp_preproc_format_version_str
3133
3134            PRINT *, 'Reading preprocessed file format version: ', &
3135&                    temp_preproc_format_version_str
3136            IF (TRIM(temp_preproc_format_version_str) == &
3137&                                        TRIM(PREPROC_FORMAT_VERSION_STR)) THEN
3138                CONTINUE
3139            ELSE
3140                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
3141                PRINT *, 'Inconsistent preprocessing format version'
3142                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
3143                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
3144                ! PRINT *, ''
3145                STOP
3146            END IF
3147
3148
3149            ! Read the compiled max dimensions that were dumped from par_mod
3150            ! when creating the fp file, so that we can compare against
3151            ! current FLEXPART dimensions - they need to be the same, or else
3152            ! we abort.
3153            READ (iounit) temp_nxmax, temp_nymax, temp_nzmax, &
3154&                         temp_nuvzmax, temp_nwzmax
3155
3156
3157
3158
3159
3160            ! Get dimensions
3161            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
3162&                   (temp_nzmax == nzmax) .AND. &
3163&                   (temp_nuvzmax == nuvzmax) .AND. &
3164&                   (temp_nwzmax == nwzmax) ) THEN
3165                CONTINUE
3166            ELSE
3167                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
3168                PRINT *, '                  FP file     Compiled FP'
3169                PRINT *, 'nxmax:     ', temp_nxmax, '    ', nxmax
3170                PRINT *, 'nymax:     ', temp_nymax, '    ', nymax
3171                PRINT *, 'nzmax:     ', temp_nzmax, '    ', nzmax
3172                PRINT *, 'nuvzmax:     ', temp_nuvzmax, '    ', nuvzmax
3173                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
3174                STOP
3175            END IF
3176
3177
3178
3179
3180            ! Scalar values
3181            READ(iounit) nx, ny, nxmin1, nymin1, nxfield
3182            READ(iounit) nuvz, nwz, nz, nmixz, nlev_ec
3183            READ(iounit) dx, dy, xlon0, ylat0, dxconst, dyconst
3184
3185
3186
3187
3188
3189            ! Fixed fields, static in time           
3190            READ(iounit) oro, excessoro, lsm, xlanduse, height
3191
3192
3193
3194            ! 3d fields
3195            READ(iounit) uu(:,:,:,cm_index)
3196            READ(iounit) vv(:,:,:,cm_index)
3197            READ(iounit) uupol(:,:,:,cm_index)
3198            READ(iounit) vvpol(:,:,:,cm_index)
3199            READ(iounit) ww(:,:,:,cm_index)
3200            READ(iounit) tt(:,:,:,cm_index)
3201            READ(iounit) qv(:,:,:,cm_index)
3202            READ(iounit) pv(:,:,:,cm_index)
3203            READ(iounit) rho(:,:,:,cm_index)
3204            READ(iounit) drhodz(:,:,:,cm_index)
3205            READ(iounit) tth(:,:,:,cm_index)
3206            READ(iounit) qvh(:,:,:,cm_index)
3207            READ(iounit) pplev(:,:,:,cm_index)
3208            READ(iounit) clouds(:,:,:,cm_index)
3209            READ(iounit) cloudsh(:,:,cm_index)
3210
3211
3212!            PRINT *, 'SUM(tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
3213!&                                        SUM(tt(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
3214
3215
3216!            PRINT *, 'SUM(clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index)): ', &
3217!&                                        SUM(clouds(0:nxmax-1,0:nymax-1,1:nzmax, cm_index))
3218
3219
3220
3221            ! 2d fields
3222            READ(iounit) ps(:,:,:,cm_index)
3223            READ(iounit) sd(:,:,:,cm_index)
3224            READ(iounit) msl(:,:,:,cm_index)
3225            READ(iounit) tcc(:,:,:,cm_index)
3226            READ(iounit) u10(:,:,:,cm_index)
3227            READ(iounit) v10(:,:,:,cm_index)
3228            READ(iounit) tt2(:,:,:,cm_index)
3229            READ(iounit) td2(:,:,:,cm_index)
3230            READ(iounit) lsprec(:,:,:,cm_index)
3231            READ(iounit) convprec(:,:,:,cm_index)
3232            READ(iounit) sshf(:,:,:,cm_index)
3233            READ(iounit) ssr(:,:,:,cm_index)
3234            READ(iounit) surfstr(:,:,:,cm_index)
3235            READ(iounit) ustar(:,:,:,cm_index)
3236            READ(iounit) wstar(:,:,:,cm_index)
3237            READ(iounit) hmix(:,:,:,cm_index)
3238            READ(iounit) tropopause(:,:,:,cm_index)
3239            READ(iounit) oli(:,:,:,cm_index)
3240            READ(iounit) diffk(:,:,:,cm_index)
3241            READ(iounit) vdep(:,:,:,cm_index)
3242
3243
3244
3245
3246
3247!            PRINT *, 'SUM(ps(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
3248!&                                        SUM(ps(0:nxmax-1,0:nymax-1,1, cm_index))
3249
3250!            PRINT *, 'SUM(wstar(0:nxmax-1, 0:nymax-1, 1, cm_index)): ', &
3251!&                                        SUM(wstar(0:nxmax-1,0:nymax-1,1, cm_index))
3252
3253
3254
3255
3256            ! 1d fields
3257            READ(iounit) z0(:)
3258            READ(iounit) akm(:)
3259            READ(iounit) bkm(:)
3260            READ(iounit) akz(:)
3261            READ(iounit) bkz(:)
3262            READ(iounit) aknew(:)
3263            READ(iounit) bknew(:)
3264
3265
3266
3267!            PRINT *, 'SUM(bknew(1:nzmax)): ', &
3268!&                                        SUM(bknew(1:nzmax))
3269
3270
3271
3272
3273
3274            ! Nested, scalar values (for each nest)
3275            READ(iounit) nxn(:)
3276            READ(iounit) nyn(:)
3277            READ(iounit) dxn(:)
3278            READ(iounit) dyn(:)
3279            READ(iounit) xlon0n(:)
3280            READ(iounit) ylat0n(:)
3281
3282
3283
3284            ! Nested fields, static over time
3285            READ(iounit) oron, excessoron, lsmn, xlandusen
3286
3287
3288
3289!            PRINT *, 'SUM(oron): ', SUM(oron)
3290
3291
3292
3293
3294            ! 3d nested fields
3295            READ(iounit) uun(:,:,:,cm_index,:)
3296            READ(iounit) vvn(:,:,:,cm_index,:)
3297            READ(iounit) wwn(:,:,:,cm_index,:)
3298            READ(iounit) ttn(:,:,:,cm_index,:)
3299            READ(iounit) qvn(:,:,:,cm_index,:)
3300            READ(iounit) pvn(:,:,:,cm_index,:)
3301            READ(iounit) cloudsn(:,:,:,cm_index,:)
3302            READ(iounit) cloudsnh(:,:,cm_index,:)
3303            READ(iounit) rhon(:,:,:,cm_index,:)
3304            READ(iounit) drhodzn(:,:,:,cm_index,:)
3305            READ(iounit) tthn(:,:,:,cm_index,:)
3306            READ(iounit) qvhn(:,:,:,cm_index,:)
3307
3308!            PRINT *, 'SUM(uun): ', SUM(uun(:,:,:,cm_index,:))
3309!            PRINT *, 'SUM(qvhn): ', SUM(qvhn(:,:,:,cm_index,:))
3310!            PRINT *, 'SUM(cloudsn): ', SUM(cloudsn(:,:,:,cm_index,:))
3311
3312
3313
3314
3315            ! 2d nested fields
3316            READ(iounit) psn(:,:,:,cm_index,:)
3317            READ(iounit) sdn(:,:,:,cm_index,:)
3318            READ(iounit) msln(:,:,:,cm_index,:)
3319            READ(iounit) tccn(:,:,:,cm_index,:)
3320            READ(iounit) u10n(:,:,:,cm_index,:)
3321            READ(iounit) v10n(:,:,:,cm_index,:)
3322            READ(iounit) tt2n(:,:,:,cm_index,:)
3323            READ(iounit) td2n(:,:,:,cm_index,:)
3324            READ(iounit) lsprecn(:,:,:,cm_index,:)
3325            READ(iounit) convprecn(:,:,:,cm_index,:)
3326            READ(iounit) sshfn(:,:,:,cm_index,:)
3327            READ(iounit) ssrn(:,:,:,cm_index,:)
3328            READ(iounit) surfstrn(:,:,:,cm_index,:)
3329            READ(iounit) ustarn(:,:,:,cm_index,:)
3330            READ(iounit) wstarn(:,:,:,cm_index,:)
3331            READ(iounit) hmixn(:,:,:,cm_index,:)
3332            READ(iounit) tropopausen(:,:,:,cm_index,:)
3333            READ(iounit) olin(:,:,:,cm_index,:)
3334            READ(iounit) diffkn(:,:,:,cm_index,:)
3335            READ(iounit) vdepn(:,:,:,cm_index,:)
3336
3337!            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
3338!            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
3339!            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
3340
3341
3342
3343            ! Auxiliary variables for nests
3344            READ(iounit) xresoln(:)
3345            READ(iounit) yresoln(:)
3346            READ(iounit) xln(:)
3347            READ(iounit) yln(:)
3348            READ(iounit) xrn(:)
3349
3350
3351!            PRINT *, 'SUM(yresoln): ', SUM(yresoln)
3352!            PRINT *, 'SUM(xrn): ', SUM(xrn)
3353
3354
3355
3356            ! Variables for polar stereographic projection
3357            READ(iounit) xglobal, sglobal, nglobal
3358            READ(iounit) switchnorthg, switchsouthg
3359            READ(iounit) southpolemap(:)
3360            READ(iounit) northpolemap(:)
3361
3362
3363!            PRINT *, 'SUM(northpolemap): ', SUM(northpolemap)
3364!            PRINT *, 'xglobal: ', xglobal
3365!            PRINT *, 'sglobal: ', sglobal
3366!            PRINT *, 'nglobal: ', nglobal
3367!            PRINT *, 'switchsouthg: ', switchsouthg
3368
3369
3370
3371
3372            ! Variables declared in conv_mod (convection)
3373            READ(iounit) pconv(:)
3374            READ(iounit) phconv(:)
3375            READ(iounit) dpr(:)
3376            READ(iounit) pconv_hpa(:)
3377            READ(iounit) phconv_hpa(:)
3378            READ(iounit) ft(:)
3379            READ(iounit) fq(:)
3380            READ(iounit) fmass(:,:)
3381            READ(iounit) sub(:)
3382            READ(iounit) fmassfrac(:,:)
3383            READ(iounit) cbaseflux(:,:)
3384            READ(iounit) cbasefluxn(:,:,:)
3385            READ(iounit) tconv(:)
3386            READ(iounit) qconv(:)
3387            READ(iounit) qsconv(:)
3388            READ(iounit) psconv, tt2conv, td2conv
3389            READ(iounit) nconvlev, nconvtop
3390
3391
3392
3393
3394
3395!            PRINT *, 'SUM(pconv): ', SUM(pconv)
3396!            PRINT *, 'SUM(qconv): ', SUM(qconv)
3397!            PRINT *, 'SUM(fmassfrac): ', SUM(fmassfrac)
3398!            PRINT *, 'SUM(cbasefluxn): ', SUM(cbasefluxn)
3399!            PRINT *, 'tt2conv: ', tt2conv
3400!            PRINT *, 'nconvlev: ', nconvlev
3401
3402
3403
3404        ELSE
3405            STOP 'fpio_rawbin(): Illegal operation'
3406           
3407        ENDIF
3408    END SUBROUTINE fpio_rawbin
3409
3410
3411
3412
3413    subroutine handle_nf90_err(status)
3414
3415        ! Custom routine for checking NF90 error status
3416        ! and aborting if necessary
3417        use netcdf
3418        implicit none
3419        integer, intent (in) :: status
3420
3421        if (status /= nf90_noerr) then
3422            print *, trim(nf90_strerror(status))
3423            stop "Stopped..."
3424        endif
3425    end subroutine handle_nf90_err
3426
3427
3428    INTEGER FUNCTION logical2integer(logical_value)
3429        IMPLICIT NONE
3430
3431        ! Auxiliary function to convert logical values to
3432        ! integers.  THIS DOES NO TYPE CHECKING!!!
3433
3434
3435        LOGICAL, INTENT(IN) :: logical_value
3436
3437        IF (logical_value .EQV. .TRUE.) THEN
3438            logical2integer = 1
3439        ELSE
3440            logical2integer = 0
3441        ENDIF
3442
3443        RETURN
3444
3445    END FUNCTION logical2integer
3446
3447
3448    LOGICAL FUNCTION integer2logical(integer_value)
3449        IMPLICIT NONE
3450
3451        ! Auxiliary function to convert integer values to
3452        ! logical.  THIS DOES NO TYPE CHECKING!!!
3453
3454
3455        INTEGER, INTENT(IN) :: integer_value
3456
3457        IF (integer_value .EQ. 0) THEN
3458            integer2logical = .FALSE.
3459        ELSE
3460            integer2logical = .TRUE.
3461        ENDIF
3462
3463        RETURN
3464
3465    END FUNCTION integer2logical
3466
3467
3468END MODULE fpmetbinary_mod
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG