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
RevLine 
[496c607]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  !                                                                            *
[5cef1eb]10  !     07 Oct 2016                                                            *
[496c607]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  !                                                                            *
[5cef1eb]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  !                                                                            *
[496c607]42  !*****************************************************************************
43
44    USE com_mod
45    USE conv_mod
[41a2981]46    USE par_mod, ONLY : nxmax, nymax, nzmax, nuvzmax, nwzmax, numclass, maxspec, &
47&                       maxnests, nxmaxn, nymaxn
[496c607]48
[5b3cc42]49    USE netcdf
50
[496c607]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
[515b21c]57                         
58                   
59    INTEGER, PARAMETER :: PREPROC_FMT_STR_DIM = 11
[5cef1eb]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
[515b21c]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)
[5cef1eb]70
71    PRIVATE IOUNIT_DUMP, IOUNIT_LOAD, IOUNIT_TEXTOUT, fpio,    &
72&           PREPROC_FORMAT_VERSION_STR
[496c607]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
[b9970e3]103        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
[5b3cc42]104
[496c607]105        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
[5b3cc42]106
107        ! Create and open NC4 file for writing
108        PRINT *, 'Opening NC4 file...'
[5f50284]109        ncretval = nf90_create(filename, &
[5b3cc42]110&                              OR(NF90_CLOBBER, NF90_HDF5), &
111&                              ncid)
112
113
114
[b398fb6]115        CALL fpio(ncid, 'DUMP', cm_index)
[5b3cc42]116
117        PRINT *, 'Closing NC4 file...'
118        ncretval = nf90_close(ncid)
119
[496c607]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
[b9970e3]131        INTEGER :: ncretval, ncid          ! NetCDF func return value, file id
132
[496c607]133        INTEGER millisecs_start, millisecs_stop, count_rate, count_max
134
135        CALL SYSTEM_CLOCK(millisecs_start, count_rate, count_max)
[b9970e3]136
[5f50284]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...'
[b9970e3]142
143
[b398fb6]144        CALL fpio(ncid, 'LOAD', cm_index)
[5f50284]145
[496c607]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
[b398fb6]152
153    SUBROUTINE fpio(ncid, op, cm_index)
[496c607]154        IMPLICIT NONE
[b9970e3]155        INTEGER, INTENT(IN) :: ncid               ! NetCDF file id
[496c607]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
[9cdf8bd]160
[b9970e3]161
[030e3c1]162        ! Helper functions (in this module)
163        !INTEGER :: logical2integer
164        !LOGICAL :: integer2logical
165
166        INTEGER :: temp_integer   ! temporary value
[b9970e3]167        INTEGER :: ncret          ! Return value from NetCDF calls
[929ae37]168        INTEGER :: ncvarid          ! NetCDF variable ID
169
[41a2981]170        INTEGER :: nxmax_dimid, nymax_dimid, nzmax_dimid, nuvzmax_dimid, nwzmax_dimid, &
[8413bc9]171&                  maxspec_dimid, numclass_dimid, maxnests_dimid, nxmaxn_dimid, nymaxn_dimid, &
[030e3c1]172&                  zero_to_nzmax_dimid, zero_to_maxnests_dimid, polemap_dimid, &
[515b21c]173&                  nconvlevmax_dimid, na_dimid, preproc_fmt_str_dimid
[8413bc9]174
[b9970e3]175
[70ecaa0]176        INTEGER, DIMENSION(1) :: dim1dids    ! Dimension IDs for 1D arrays
177        INTEGER, DIMENSION(2) :: dim2dids    ! Dimension IDs for 2D arrays
[929ae37]178        INTEGER, DIMENSION(3) :: dim3dids    ! Dimension IDs for 3D arrays
[8651603]179        INTEGER, DIMENSION(4) :: dim4dids    ! Dimension IDs for 4D arrays
[8413bc9]180        INTEGER, DIMENSION(5) :: dim5dids    ! Dimension IDs for 5D arrays
181
182
[8651603]183
[929ae37]184
[b9970e3]185        ! These are used when loading in dimensions from NC file
186        CHARACTER(LEN=NF90_MAX_NAME) :: nxmax_dimname, nymax_dimname, nzmax_dimname, &
[41a2981]187&                                       nuvzmax_dimname, nwzmax_dimname,&
[8651603]188&                                       maxspec_dimname, numclass_dimname,&
[8413bc9]189&                                       maxnests_dimname, nxmaxn_dimname, nymaxn_dimname, &
[ee13a7b]190&                                       zero_to_nzmax_dimname, zero_to_maxnests_dimname, &
[515b21c]191&                                       polemap_dimname, nconvlevmax_dimname, na_dimname, &
192&                                       preproc_fmt_str_dimname
[b9970e3]193
[9cdf8bd]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, &
[41a2981]197&                  temp_nuvzmax, temp_nwzmax, &
[8651603]198&                  temp_maxspec, temp_numclass,&
[515b21c]199&                  temp_maxnests, temp_nxmaxn, temp_nymaxn, temp_preproc_fmt_str_dim
[9cdf8bd]200
[515b21c]201        CHARACTER(LEN=PREPROC_FMT_STR_DIM) :: temp_preproc_format_version_str
[5cef1eb]202
[496c607]203        CHARACTER(LEN=128) :: errmesg
204
[d2d8a96]205        INTEGER, PARAMETER :: DEF_LEVEL = 3
[929ae37]206
[496c607]207        if (op == 'DUMP') THEN
208
[5cef1eb]209
210            ! Write the preprocessing format version string
[5f50284]211            !  NEED TO FILL THIS IN FOR NC4
212
213
[5cef1eb]214
[5f50284]215
[9cdf8bd]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
[5f50284]219
220
[9cdf8bd]221
[515b21c]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
[b9970e3]229            ncret = nf90_def_dim(ncid, 'nxmax', nxmax, nxmax_dimid)
[8413bc9]230            call handle_nf90_err(ncret)
[b9970e3]231            ncret = nf90_def_dim(ncid, 'nymax', nymax, nymax_dimid)
[8413bc9]232            call handle_nf90_err(ncret)
[b9970e3]233            ncret = nf90_def_dim(ncid, 'nzmax', nzmax, nzmax_dimid)
[8413bc9]234            call handle_nf90_err(ncret)
[b9970e3]235            ncret = nf90_def_dim(ncid, 'nuvzmax', nuvzmax, nuvzmax_dimid)
[8413bc9]236            call handle_nf90_err(ncret)
[b9970e3]237            ncret = nf90_def_dim(ncid, 'nwzmax', nwzmax, nwzmax_dimid)
[8413bc9]238            call handle_nf90_err(ncret)
[8651603]239            ncret = nf90_def_dim(ncid, 'maxspec', maxspec, maxspec_dimid)
[8413bc9]240            call handle_nf90_err(ncret)
[8651603]241            ncret = nf90_def_dim(ncid, 'numclass', numclass, numclass_dimid)
[8413bc9]242            call handle_nf90_err(ncret)
[030e3c1]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.
[8413bc9]246            ncret = nf90_def_dim(ncid, 'zero_to_nzmax', nzmax+1, zero_to_nzmax_dimid)
247            call handle_nf90_err(ncret)
[ee13a7b]248            ncret = nf90_def_dim(ncid, 'zero_to_maxnests', maxnests+1, zero_to_maxnests_dimid)
249            call handle_nf90_err(ncret)
[030e3c1]250
251            ! This is for a couple of small arrays that store polar stereographic stuff
[ee13a7b]252            ncret = nf90_def_dim(ncid, 'polemap_dim', 9, polemap_dimid)
253            call handle_nf90_err(ncret)
[b9970e3]254
[030e3c1]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
[496c607]261            ! Scalar values
[5f50284]262
263
[515b21c]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
[929ae37]277            ncret = nf90_def_var(ncid, 'nx', NF90_INT, ncvarid)
[8413bc9]278            call handle_nf90_err(ncret)
[929ae37]279            ncret = nf90_put_var(ncid, ncvarid, nx)
[8413bc9]280            call handle_nf90_err(ncret)
[929ae37]281
282            ncret = nf90_def_var(ncid, 'ny', NF90_INT, ncvarid)
[8413bc9]283            call handle_nf90_err(ncret)
[929ae37]284            ncret = nf90_put_var(ncid, ncvarid, ny)
[8413bc9]285            call handle_nf90_err(ncret)
[929ae37]286
287            ncret = nf90_def_var(ncid, 'nxmin1', NF90_INT, ncvarid)
[8413bc9]288            call handle_nf90_err(ncret)
[929ae37]289            ncret = nf90_put_var(ncid, ncvarid, nxmin1)
[8413bc9]290            call handle_nf90_err(ncret)
[929ae37]291
292            ncret = nf90_def_var(ncid, 'nymin1', NF90_INT, ncvarid)
[8413bc9]293            call handle_nf90_err(ncret)
[929ae37]294            ncret = nf90_put_var(ncid, ncvarid, nymin1)
[8413bc9]295            call handle_nf90_err(ncret)
[929ae37]296
297            ncret = nf90_def_var(ncid, 'nxfield', NF90_INT, ncvarid)
[8413bc9]298            call handle_nf90_err(ncret)
[929ae37]299            ncret = nf90_put_var(ncid, ncvarid, nxfield)
[8413bc9]300            call handle_nf90_err(ncret)
[929ae37]301
302            ncret = nf90_def_var(ncid, 'nuvz', NF90_INT, ncvarid)
[8413bc9]303            call handle_nf90_err(ncret)
[929ae37]304            ncret = nf90_put_var(ncid, ncvarid, nuvz)
[8413bc9]305            call handle_nf90_err(ncret)
[929ae37]306
307            ncret = nf90_def_var(ncid, 'nwz', NF90_INT, ncvarid)
[8413bc9]308            call handle_nf90_err(ncret)
[929ae37]309            ncret = nf90_put_var(ncid, ncvarid, nwz)
[8413bc9]310            call handle_nf90_err(ncret)
[929ae37]311
312            ncret = nf90_def_var(ncid, 'nz', NF90_INT, ncvarid)
[8413bc9]313            call handle_nf90_err(ncret)
[929ae37]314            ncret = nf90_put_var(ncid, ncvarid, nz)
[8413bc9]315            call handle_nf90_err(ncret)
[929ae37]316
317            ncret = nf90_def_var(ncid, 'nmixz', NF90_INT, ncvarid)
[8413bc9]318            call handle_nf90_err(ncret)
[929ae37]319            ncret = nf90_put_var(ncid, ncvarid, nmixz)
[8413bc9]320            call handle_nf90_err(ncret)
[929ae37]321
[8651603]322            ncret = nf90_def_var(ncid, 'nlev_ec', NF90_INT, ncvarid)
[8413bc9]323            call handle_nf90_err(ncret)
[929ae37]324            ncret = nf90_put_var(ncid, ncvarid, nlev_ec)
[8413bc9]325            call handle_nf90_err(ncret)
[929ae37]326
327            ncret = nf90_def_var(ncid, 'dx', NF90_FLOAT, ncvarid)
[8413bc9]328            call handle_nf90_err(ncret)
[929ae37]329            ncret = nf90_put_var(ncid, ncvarid, dx)
[8413bc9]330            call handle_nf90_err(ncret)
[929ae37]331
332            ncret = nf90_def_var(ncid, 'dy', NF90_FLOAT, ncvarid)
[8413bc9]333            call handle_nf90_err(ncret)
[929ae37]334            ncret = nf90_put_var(ncid, ncvarid, dy)
[8413bc9]335            call handle_nf90_err(ncret)
[929ae37]336
337            ncret = nf90_def_var(ncid, 'xlon0', NF90_FLOAT, ncvarid)
[8413bc9]338            call handle_nf90_err(ncret)
[929ae37]339            ncret = nf90_put_var(ncid, ncvarid, xlon0)
[8413bc9]340            call handle_nf90_err(ncret)
[929ae37]341
342            ncret = nf90_def_var(ncid, 'ylat0', NF90_FLOAT, ncvarid)
[8413bc9]343            call handle_nf90_err(ncret)
[929ae37]344            ncret = nf90_put_var(ncid, ncvarid, ylat0)
[8413bc9]345            call handle_nf90_err(ncret)
[929ae37]346
347            ncret = nf90_def_var(ncid, 'dxconst', NF90_FLOAT, ncvarid)
[8413bc9]348            call handle_nf90_err(ncret)
[929ae37]349            ncret = nf90_put_var(ncid, ncvarid, dxconst)
[8413bc9]350            call handle_nf90_err(ncret)
[929ae37]351
352            ncret = nf90_def_var(ncid, 'dyconst', NF90_FLOAT, ncvarid)
[8413bc9]353            call handle_nf90_err(ncret)
[929ae37]354            ncret = nf90_put_var(ncid, ncvarid, dyconst)
[8413bc9]355            call handle_nf90_err(ncret)
[929ae37]356
357
358
[496c607]359            ! Fixed fields, static in time
[70ecaa0]360            dim2dids = (/nxmax_dimid, nymax_dimid/)
361
362            ncret = nf90_def_var(ncid, 'oro', NF90_FLOAT, &
363&                                       dim2dids, ncvarid)
[8413bc9]364            call handle_nf90_err(ncret)
[70ecaa0]365            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
366&                                        shuffle=0,     &
367&                                        deflate=1,     &
368&                                        deflate_level=DEF_LEVEL)
[8413bc9]369            call handle_nf90_err(ncret)
[70ecaa0]370            ncret = nf90_put_var(ncid, ncvarid, &
371&                                oro(0:nxmax-1, 0:nymax-1))
[8413bc9]372            call handle_nf90_err(ncret)
[70ecaa0]373
374            ncret = nf90_def_var(ncid, 'excessoro', NF90_FLOAT, &
375&                                       dim2dids, ncvarid)
[8413bc9]376            call handle_nf90_err(ncret)
[70ecaa0]377            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
378&                                        shuffle=0,     &
379&                                        deflate=1,     &
380&                                        deflate_level=DEF_LEVEL)
[8413bc9]381            call handle_nf90_err(ncret)
[70ecaa0]382            ncret = nf90_put_var(ncid, ncvarid, &
383&                                excessoro(0:nxmax-1, 0:nymax-1))
[8413bc9]384            call handle_nf90_err(ncret)
[70ecaa0]385
386            ncret = nf90_def_var(ncid, 'lsm', NF90_FLOAT, &
387&                                       dim2dids, ncvarid)
[8413bc9]388            call handle_nf90_err(ncret)
[70ecaa0]389            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
390&                                        shuffle=0,     &
391&                                        deflate=1,     &
392&                                        deflate_level=DEF_LEVEL)
[8413bc9]393            call handle_nf90_err(ncret)
[70ecaa0]394            ncret = nf90_put_var(ncid, ncvarid, &
395&                                lsm(0:nxmax-1, 0:nymax-1))
[8413bc9]396            call handle_nf90_err(ncret)
[70ecaa0]397
[8651603]398            dim3dids = (/nxmax_dimid, nymax_dimid, numclass_dimid/)
[70ecaa0]399            ! numclass comes from par_mod - number of land use classes
400            ncret = nf90_def_var(ncid, 'xlanduse', NF90_FLOAT, &
401&                                       dim3dids, ncvarid)
[8413bc9]402            call handle_nf90_err(ncret)
[70ecaa0]403            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
404&                                        shuffle=0,     &
405&                                        deflate=1,     &
406&                                        deflate_level=DEF_LEVEL)
[8413bc9]407            call handle_nf90_err(ncret)
[70ecaa0]408            ncret = nf90_put_var(ncid, ncvarid, &
409&                                xlanduse(0:nxmax-1, 0:nymax-1, 1:numclass))
[8413bc9]410            call handle_nf90_err(ncret)
[70ecaa0]411
412            dim1dids = (/nzmax_dimid/)
413            ncret = nf90_def_var(ncid, 'height', NF90_FLOAT, &
414&                                       dim1dids, ncvarid)
[8413bc9]415            call handle_nf90_err(ncret)
[70ecaa0]416            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
417&                                        shuffle=0,     &
418&                                        deflate=1,     &
419&                                        deflate_level=DEF_LEVEL)
[8413bc9]420            call handle_nf90_err(ncret)
[70ecaa0]421            ncret = nf90_put_var(ncid, ncvarid, &
422&                                height(1:nzmax))
[8413bc9]423            call handle_nf90_err(ncret)
[70ecaa0]424
425
426
427
[496c607]428            ! 3d fields
[929ae37]429            dim3dids = (/nxmax_dimid, nymax_dimid, nzmax_dimid/)
430
431            ncret = nf90_def_var(ncid, 'uu', NF90_FLOAT, &
432&                                       dim3dids, ncvarid)
[8413bc9]433            call handle_nf90_err(ncret)
[929ae37]434            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
435&                                        shuffle=0,     &
436&                                        deflate=1,     &
437&                                        deflate_level=DEF_LEVEL)
[8413bc9]438            call handle_nf90_err(ncret)
[929ae37]439            ncret = nf90_put_var(ncid, ncvarid, &
440&                                uu(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]441            call handle_nf90_err(ncret)
[929ae37]442
443            ncret = nf90_def_var(ncid, 'vv', NF90_FLOAT, &
444&                                       dim3dids, ncvarid)
[8413bc9]445            call handle_nf90_err(ncret)
[929ae37]446            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
447&                                        shuffle=0,     &
448&                                        deflate=1,     &
449&                                        deflate_level=DEF_LEVEL)
[8413bc9]450            call handle_nf90_err(ncret)
[929ae37]451            ncret = nf90_put_var(ncid, ncvarid, &
452&                                vv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]453            call handle_nf90_err(ncret)
[929ae37]454
455            ncret = nf90_def_var(ncid, 'uupol', NF90_FLOAT, &
456&                                       dim3dids, ncvarid)
[8413bc9]457            call handle_nf90_err(ncret)
[929ae37]458            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
459&                                        shuffle=0,     &
460&                                        deflate=1,     &
461&                                        deflate_level=DEF_LEVEL)
[8413bc9]462            call handle_nf90_err(ncret)
[929ae37]463            ncret = nf90_put_var(ncid, ncvarid, &
464&                                uupol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]465            call handle_nf90_err(ncret)
[929ae37]466
467            ncret = nf90_def_var(ncid, 'vvpol', NF90_FLOAT, &
468&                                       dim3dids, ncvarid)
[8413bc9]469            call handle_nf90_err(ncret)
[929ae37]470            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
471&                                        shuffle=0,     &
472&                                        deflate=1,     &
473&                                        deflate_level=DEF_LEVEL)
[8413bc9]474            call handle_nf90_err(ncret)
[929ae37]475            ncret = nf90_put_var(ncid, ncvarid, &
476&                                vvpol(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]477            call handle_nf90_err(ncret)
[929ae37]478
479            ncret = nf90_def_var(ncid, 'ww', NF90_FLOAT, &
480&                                       dim3dids, ncvarid)
[8413bc9]481            call handle_nf90_err(ncret)
[929ae37]482            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
483&                                        shuffle=0,     &
484&                                        deflate=1,     &
485&                                        deflate_level=DEF_LEVEL)
[8413bc9]486            call handle_nf90_err(ncret)
[929ae37]487            ncret = nf90_put_var(ncid, ncvarid, &
488&                                ww(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]489            call handle_nf90_err(ncret)
[929ae37]490
491            ncret = nf90_def_var(ncid, 'tt', NF90_FLOAT, &
492&                                       dim3dids, ncvarid)
[8413bc9]493            call handle_nf90_err(ncret)
[929ae37]494            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
495&                                        shuffle=0,     &
496&                                        deflate=1,     &
497&                                        deflate_level=DEF_LEVEL)
[8413bc9]498            call handle_nf90_err(ncret)
[929ae37]499            ncret = nf90_put_var(ncid, ncvarid, &
500&                                tt(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]501            call handle_nf90_err(ncret)
[929ae37]502
503            ncret = nf90_def_var(ncid, 'qv', NF90_FLOAT, &
504&                                       dim3dids, ncvarid)
[8413bc9]505            call handle_nf90_err(ncret)
[929ae37]506            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
507&                                        shuffle=0,     &
508&                                        deflate=1,     &
509&                                        deflate_level=DEF_LEVEL)
[8413bc9]510            call handle_nf90_err(ncret)
[929ae37]511            ncret = nf90_put_var(ncid, ncvarid, &
512&                                qv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]513            call handle_nf90_err(ncret)
[929ae37]514
515            ncret = nf90_def_var(ncid, 'pv', NF90_FLOAT, &
516&                                       dim3dids, ncvarid)
[8413bc9]517            call handle_nf90_err(ncret)
[929ae37]518            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
519&                                        shuffle=0,     &
520&                                        deflate=1,     &
521&                                        deflate_level=DEF_LEVEL)
[8413bc9]522            call handle_nf90_err(ncret)
[929ae37]523            ncret = nf90_put_var(ncid, ncvarid, &
524&                                pv(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]525            call handle_nf90_err(ncret)
[929ae37]526
527            ncret = nf90_def_var(ncid, 'rho', NF90_FLOAT, &
528&                                       dim3dids, ncvarid)
[8413bc9]529            call handle_nf90_err(ncret)
[929ae37]530            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
531&                                        shuffle=0,     &
532&                                        deflate=1,     &
533&                                        deflate_level=DEF_LEVEL)
[8413bc9]534            call handle_nf90_err(ncret)
[929ae37]535            ncret = nf90_put_var(ncid, ncvarid, &
536&                                rho(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]537            call handle_nf90_err(ncret)
[929ae37]538
539            ncret = nf90_def_var(ncid, 'drhodz', NF90_FLOAT, &
540&                                       dim3dids, ncvarid)
[8413bc9]541            call handle_nf90_err(ncret)
[929ae37]542            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
543&                                        shuffle=0,     &
544&                                        deflate=1,     &
545&                                        deflate_level=DEF_LEVEL)
[8413bc9]546            call handle_nf90_err(ncret)
[929ae37]547            ncret = nf90_put_var(ncid, ncvarid, &
548&                                drhodz(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]549            call handle_nf90_err(ncret)
[929ae37]550
[70ecaa0]551            ncret = nf90_def_var(ncid, 'clouds', NF90_BYTE, &
552&                                       dim3dids, ncvarid)
[8413bc9]553            call handle_nf90_err(ncret)
[70ecaa0]554            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
555&                                        shuffle=0,     &
556&                                        deflate=1,     &
557&                                        deflate_level=DEF_LEVEL)
[8413bc9]558            call handle_nf90_err(ncret)
[70ecaa0]559            ncret = nf90_put_var(ncid, ncvarid, &
560&                                clouds(0:nxmax-1, 0:nymax-1, 1:nzmax, cm_index))
[8413bc9]561            call handle_nf90_err(ncret)
[70ecaa0]562
563
[929ae37]564
[70ecaa0]565            ! Note the change in z dimension for the following
[929ae37]566            dim3dids = (/nxmax_dimid, nymax_dimid, nuvzmax_dimid/)
567
568            ncret = nf90_def_var(ncid, 'tth', NF90_FLOAT, &
569&                                       dim3dids, ncvarid)
[8413bc9]570            call handle_nf90_err(ncret)
[929ae37]571            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
572&                                        shuffle=0,     &
573&                                        deflate=1,     &
574&                                        deflate_level=DEF_LEVEL)
[8413bc9]575            call handle_nf90_err(ncret)
[929ae37]576            ncret = nf90_put_var(ncid, ncvarid, &
577&                                tth(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
[8413bc9]578            call handle_nf90_err(ncret)
[929ae37]579
580            ncret = nf90_def_var(ncid, 'qvh', NF90_FLOAT, &
581&                                       dim3dids, ncvarid)
[8413bc9]582            call handle_nf90_err(ncret)
[929ae37]583            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
584&                                        shuffle=0,     &
585&                                        deflate=1,     &
586&                                        deflate_level=DEF_LEVEL)
[8413bc9]587            call handle_nf90_err(ncret)
[929ae37]588            ncret = nf90_put_var(ncid, ncvarid, &
589&                                qvh(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
[8413bc9]590            call handle_nf90_err(ncret)
[929ae37]591
592            ncret = nf90_def_var(ncid, 'pplev', NF90_FLOAT, &
593&                                       dim3dids, ncvarid)
[8413bc9]594            call handle_nf90_err(ncret)
[929ae37]595            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
596&                                        shuffle=0,     &
597&                                        deflate=1,     &
598&                                        deflate_level=DEF_LEVEL)
[8413bc9]599            call handle_nf90_err(ncret)
[929ae37]600            ncret = nf90_put_var(ncid, ncvarid, &
601&                                pplev(0:nxmax-1, 0:nymax-1, 1:nuvzmax, cm_index))
[8413bc9]602            call handle_nf90_err(ncret)
[929ae37]603
[70ecaa0]604
605            dim2dids = (/nxmax_dimid, nymax_dimid/)
606            ncret = nf90_def_var(ncid, 'cloudsh', NF90_INT, &
607&                                       dim2dids, ncvarid)
[8413bc9]608            call handle_nf90_err(ncret)
[70ecaa0]609            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
610&                                        shuffle=0,     &
611&                                        deflate=1,     &
612&                                        deflate_level=DEF_LEVEL)
[8413bc9]613            call handle_nf90_err(ncret)
[70ecaa0]614            ncret = nf90_put_var(ncid, ncvarid, &
615&                                cloudsh(0:nxmax-1, 0:nymax-1, cm_index))
[8413bc9]616            call handle_nf90_err(ncret)
[70ecaa0]617
618
619
[4f17d14]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))
[929ae37]622
[70ecaa0]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
[929ae37]627
[496c607]628            ! 2d fields
[d2d8a96]629            dim2dids = (/nxmax_dimid, nymax_dimid/)
630
631            ncret = nf90_def_var(ncid, 'ps', NF90_FLOAT, &
632&                                       dim2dids, ncvarid)
[8413bc9]633            call handle_nf90_err(ncret)
[d2d8a96]634            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
635&                                        shuffle=0,     &
636&                                        deflate=1,     &
637&                                        deflate_level=DEF_LEVEL)
[8413bc9]638            call handle_nf90_err(ncret)
[d2d8a96]639            ncret = nf90_put_var(ncid, ncvarid, &
640&                                ps(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]641            call handle_nf90_err(ncret)
[d2d8a96]642
643            ncret = nf90_def_var(ncid, 'sd', NF90_FLOAT, &
644&                                       dim2dids, ncvarid)
[8413bc9]645            call handle_nf90_err(ncret)
[d2d8a96]646            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
647&                                        shuffle=0,     &
648&                                        deflate=1,     &
649&                                        deflate_level=DEF_LEVEL)
[8413bc9]650            call handle_nf90_err(ncret)
[d2d8a96]651            ncret = nf90_put_var(ncid, ncvarid, &
652&                                sd(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]653            call handle_nf90_err(ncret)
[d2d8a96]654
655            ncret = nf90_def_var(ncid, 'msl', NF90_FLOAT, &
656&                                       dim2dids, ncvarid)
[8413bc9]657            call handle_nf90_err(ncret)
[d2d8a96]658            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
659&                                        shuffle=0,     &
660&                                        deflate=1,     &
661&                                        deflate_level=DEF_LEVEL)
[8413bc9]662            call handle_nf90_err(ncret)
[d2d8a96]663            ncret = nf90_put_var(ncid, ncvarid, &
664&                                msl(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]665            call handle_nf90_err(ncret)
[d2d8a96]666
667            ncret = nf90_def_var(ncid, 'tcc', NF90_FLOAT, &
668&                                       dim2dids, ncvarid)
[8413bc9]669            call handle_nf90_err(ncret)
[d2d8a96]670            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
671&                                        shuffle=0,     &
672&                                        deflate=1,     &
673&                                        deflate_level=DEF_LEVEL)
[8413bc9]674            call handle_nf90_err(ncret)
[d2d8a96]675            ncret = nf90_put_var(ncid, ncvarid, &
676&                                tcc(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]677            call handle_nf90_err(ncret)
[d2d8a96]678
679            ncret = nf90_def_var(ncid, 'u10', NF90_FLOAT, &
680&                                       dim2dids, ncvarid)
[8413bc9]681            call handle_nf90_err(ncret)
[d2d8a96]682            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
683&                                        shuffle=0,     &
684&                                        deflate=1,     &
685&                                        deflate_level=DEF_LEVEL)
[8413bc9]686            call handle_nf90_err(ncret)
[d2d8a96]687            ncret = nf90_put_var(ncid, ncvarid, &
688&                                u10(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]689            call handle_nf90_err(ncret)
[d2d8a96]690
691            ncret = nf90_def_var(ncid, 'v10', NF90_FLOAT, &
692&                                       dim2dids, ncvarid)
[8413bc9]693            call handle_nf90_err(ncret)
[d2d8a96]694            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
695&                                        shuffle=0,     &
696&                                        deflate=1,     &
697&                                        deflate_level=DEF_LEVEL)
[8413bc9]698            call handle_nf90_err(ncret)
[d2d8a96]699            ncret = nf90_put_var(ncid, ncvarid, &
700&                                v10(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]701            call handle_nf90_err(ncret)
[d2d8a96]702
703            ncret = nf90_def_var(ncid, 'tt2', NF90_FLOAT, &
704&                                       dim2dids, ncvarid)
[8413bc9]705            call handle_nf90_err(ncret)
[d2d8a96]706            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
707&                                        shuffle=0,     &
708&                                        deflate=1,     &
709&                                        deflate_level=DEF_LEVEL)
[8413bc9]710            call handle_nf90_err(ncret)
[d2d8a96]711            ncret = nf90_put_var(ncid, ncvarid, &
712&                                tt2(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]713            call handle_nf90_err(ncret)
[d2d8a96]714
715            ncret = nf90_def_var(ncid, 'td2', NF90_FLOAT, &
716&                                       dim2dids, ncvarid)
[8413bc9]717            call handle_nf90_err(ncret)
[d2d8a96]718            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
719&                                        shuffle=0,     &
720&                                        deflate=1,     &
721&                                        deflate_level=DEF_LEVEL)
[8413bc9]722            call handle_nf90_err(ncret)
[d2d8a96]723            ncret = nf90_put_var(ncid, ncvarid, &
724&                                td2(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]725            call handle_nf90_err(ncret)
[d2d8a96]726
727            ncret = nf90_def_var(ncid, 'lsprec', NF90_FLOAT, &
728&                                       dim2dids, ncvarid)
[8413bc9]729            call handle_nf90_err(ncret)
[d2d8a96]730            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
731&                                        shuffle=0,     &
732&                                        deflate=1,     &
733&                                        deflate_level=DEF_LEVEL)
[8413bc9]734            call handle_nf90_err(ncret)
[d2d8a96]735            ncret = nf90_put_var(ncid, ncvarid, &
736&                                lsprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]737            call handle_nf90_err(ncret)
[d2d8a96]738
739            ncret = nf90_def_var(ncid, 'convprec', NF90_FLOAT, &
740&                                       dim2dids, ncvarid)
[8413bc9]741            call handle_nf90_err(ncret)
[d2d8a96]742            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
743&                                        shuffle=0,     &
744&                                        deflate=1,     &
745&                                        deflate_level=DEF_LEVEL)
[8413bc9]746            call handle_nf90_err(ncret)
[d2d8a96]747            ncret = nf90_put_var(ncid, ncvarid, &
748&                                convprec(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]749            call handle_nf90_err(ncret)
[d2d8a96]750
751            ncret = nf90_def_var(ncid, 'sshf', NF90_FLOAT, &
752&                                       dim2dids, ncvarid)
[8413bc9]753            call handle_nf90_err(ncret)
[d2d8a96]754            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
755&                                        shuffle=0,     &
756&                                        deflate=1,     &
757&                                        deflate_level=DEF_LEVEL)
[8413bc9]758            call handle_nf90_err(ncret)
[d2d8a96]759            ncret = nf90_put_var(ncid, ncvarid, &
760&                                sshf(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]761            call handle_nf90_err(ncret)
[d2d8a96]762
763            ncret = nf90_def_var(ncid, 'ssr', NF90_FLOAT, &
764&                                       dim2dids, ncvarid)
[8413bc9]765            call handle_nf90_err(ncret)
[d2d8a96]766            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
767&                                        shuffle=0,     &
768&                                        deflate=1,     &
769&                                        deflate_level=DEF_LEVEL)
[8413bc9]770            call handle_nf90_err(ncret)
[d2d8a96]771            ncret = nf90_put_var(ncid, ncvarid, &
772&                                ssr(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]773            call handle_nf90_err(ncret)
[d2d8a96]774
775            ncret = nf90_def_var(ncid, 'surfstr', NF90_FLOAT, &
776&                                       dim2dids, ncvarid)
[8413bc9]777            call handle_nf90_err(ncret)
[d2d8a96]778            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
779&                                        shuffle=0,     &
780&                                        deflate=1,     &
781&                                        deflate_level=DEF_LEVEL)
[8413bc9]782            call handle_nf90_err(ncret)
[d2d8a96]783            ncret = nf90_put_var(ncid, ncvarid, &
784&                                surfstr(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]785            call handle_nf90_err(ncret)
[d2d8a96]786
787            ncret = nf90_def_var(ncid, 'ustar', NF90_FLOAT, &
788&                                       dim2dids, ncvarid)
[8413bc9]789            call handle_nf90_err(ncret)
[d2d8a96]790            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
791&                                        shuffle=0,     &
792&                                        deflate=1,     &
793&                                        deflate_level=DEF_LEVEL)
[8413bc9]794            call handle_nf90_err(ncret)
[d2d8a96]795            ncret = nf90_put_var(ncid, ncvarid, &
796&                                ustar(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]797            call handle_nf90_err(ncret)
[d2d8a96]798
799            ncret = nf90_def_var(ncid, 'wstar', NF90_FLOAT, &
800&                                       dim2dids, ncvarid)
[8413bc9]801            call handle_nf90_err(ncret)
[d2d8a96]802            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
803&                                        shuffle=0,     &
804&                                        deflate=1,     &
805&                                        deflate_level=DEF_LEVEL)
[8413bc9]806            call handle_nf90_err(ncret)
[d2d8a96]807            ncret = nf90_put_var(ncid, ncvarid, &
808&                                wstar(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]809            call handle_nf90_err(ncret)
[d2d8a96]810
811            ncret = nf90_def_var(ncid, 'hmix', NF90_FLOAT, &
812&                                       dim2dids, ncvarid)
[8413bc9]813            call handle_nf90_err(ncret)
[d2d8a96]814            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
815&                                        shuffle=0,     &
816&                                        deflate=1,     &
817&                                        deflate_level=DEF_LEVEL)
[8413bc9]818            call handle_nf90_err(ncret)
[d2d8a96]819            ncret = nf90_put_var(ncid, ncvarid, &
820&                                hmix(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]821            call handle_nf90_err(ncret)
[d2d8a96]822
823            ncret = nf90_def_var(ncid, 'tropopause', NF90_FLOAT, &
824&                                       dim2dids, ncvarid)
[8413bc9]825            call handle_nf90_err(ncret)
[d2d8a96]826            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
827&                                        shuffle=0,     &
828&                                        deflate=1,     &
829&                                        deflate_level=DEF_LEVEL)
[8413bc9]830            call handle_nf90_err(ncret)
[d2d8a96]831            ncret = nf90_put_var(ncid, ncvarid, &
832&                                tropopause(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]833            call handle_nf90_err(ncret)
[d2d8a96]834
835            ncret = nf90_def_var(ncid, 'oli', NF90_FLOAT, &
836&                                       dim2dids, ncvarid)
[8413bc9]837            call handle_nf90_err(ncret)
[d2d8a96]838            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
839&                                        shuffle=0,     &
840&                                        deflate=1,     &
841&                                        deflate_level=DEF_LEVEL)
[8413bc9]842            call handle_nf90_err(ncret)
[d2d8a96]843            ncret = nf90_put_var(ncid, ncvarid, &
844&                                oli(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]845            call handle_nf90_err(ncret)
[d2d8a96]846
847            ncret = nf90_def_var(ncid, 'diffk', NF90_FLOAT, &
848&                                       dim2dids, ncvarid)
[8413bc9]849            call handle_nf90_err(ncret)
[d2d8a96]850            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
851&                                        shuffle=0,     &
852&                                        deflate=1,     &
853&                                        deflate_level=DEF_LEVEL)
[8413bc9]854            call handle_nf90_err(ncret)
[d2d8a96]855            ncret = nf90_put_var(ncid, ncvarid, &
856&                                diffk(0:nxmax-1, 0:nymax-1, 1, cm_index))
[8413bc9]857            call handle_nf90_err(ncret)
[d2d8a96]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
[8651603]868            dim3dids = (/nxmax_dimid, nymax_dimid, maxspec_dimid/)
[1d9681b]869
870            ncret = nf90_def_var(ncid, 'vdep', NF90_FLOAT, &
871&                                       dim3dids, ncvarid)
[8413bc9]872            call handle_nf90_err(ncret)
[1d9681b]873            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
874&                                        shuffle=0,     &
875&                                        deflate=1,     &
876&                                        deflate_level=DEF_LEVEL)
[8413bc9]877            call handle_nf90_err(ncret)
[1d9681b]878            ncret = nf90_put_var(ncid, ncvarid, &
879&                                vdep(0:nxmax-1, 0:nymax-1, 1:maxspec, cm_index))
[8413bc9]880            call handle_nf90_err(ncret)
[d2d8a96]881
882
883
[496c607]884            ! 1d fields
[8651603]885            dim1dids = (/numclass_dimid/)
[1d9681b]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
[8651603]897            dim1dids = (/nwzmax_dimid/)
[1d9681b]898
899            ncret = nf90_def_var(ncid, 'akm', NF90_FLOAT, &
900&                                       dim1dids, ncvarid)
[8413bc9]901            call handle_nf90_err(ncret)
[1d9681b]902            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
903&                                        shuffle=0,     &
904&                                        deflate=1,     &
905&                                        deflate_level=DEF_LEVEL)
[8413bc9]906            call handle_nf90_err(ncret)
[1d9681b]907            ncret = nf90_put_var(ncid, ncvarid, &
908&                                akm(1:nwzmax))
[8413bc9]909            call handle_nf90_err(ncret)
[1d9681b]910
911            ncret = nf90_def_var(ncid, 'bkm', NF90_FLOAT, &
912&                                       dim1dids, ncvarid)
[8413bc9]913            call handle_nf90_err(ncret)
[1d9681b]914            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
915&                                        shuffle=0,     &
916&                                        deflate=1,     &
917&                                        deflate_level=DEF_LEVEL)
[8413bc9]918            call handle_nf90_err(ncret)
[1d9681b]919            ncret = nf90_put_var(ncid, ncvarid, &
920&                                bkm(1:nwzmax))
[8413bc9]921            call handle_nf90_err(ncret)
[1d9681b]922
923
[8651603]924            dim1dids = (/nuvzmax_dimid/)
[1d9681b]925
926            ncret = nf90_def_var(ncid, 'akz', NF90_FLOAT, &
927&                                       dim1dids, ncvarid)
[8413bc9]928            call handle_nf90_err(ncret)
[1d9681b]929            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
930&                                        shuffle=0,     &
931&                                        deflate=1,     &
932&                                        deflate_level=DEF_LEVEL)
[8413bc9]933            call handle_nf90_err(ncret)
[1d9681b]934            ncret = nf90_put_var(ncid, ncvarid, &
935&                                akz(1:nuvzmax))
[8413bc9]936            call handle_nf90_err(ncret)
[1d9681b]937
938            ncret = nf90_def_var(ncid, 'bkz', NF90_FLOAT, &
939&                                       dim1dids, ncvarid)
[8413bc9]940            call handle_nf90_err(ncret)
[1d9681b]941            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
942&                                        shuffle=0,     &
943&                                        deflate=1,     &
944&                                        deflate_level=DEF_LEVEL)
[8413bc9]945            call handle_nf90_err(ncret)
[1d9681b]946            ncret = nf90_put_var(ncid, ncvarid, &
947&                                bkz(1:nuvzmax))
[8413bc9]948            call handle_nf90_err(ncret)
[1d9681b]949
950
[8651603]951            dim1dids = (/nzmax_dimid/)
[1d9681b]952
953            ncret = nf90_def_var(ncid, 'aknew', NF90_FLOAT, &
954&                                       dim1dids, ncvarid)
[8413bc9]955            call handle_nf90_err(ncret)
[1d9681b]956            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
957&                                        shuffle=0,     &
958&                                        deflate=1,     &
959&                                        deflate_level=DEF_LEVEL)
[8413bc9]960            call handle_nf90_err(ncret)
[1d9681b]961            ncret = nf90_put_var(ncid, ncvarid, &
962&                                aknew(1:nzmax))
[8413bc9]963            call handle_nf90_err(ncret)
[1d9681b]964
965            ncret = nf90_def_var(ncid, 'bknew', NF90_FLOAT, &
966&                                       dim1dids, ncvarid)
[8413bc9]967            call handle_nf90_err(ncret)
[1d9681b]968            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
969&                                        shuffle=0,     &
970&                                        deflate=1,     &
971&                                        deflate_level=DEF_LEVEL)
[8413bc9]972            call handle_nf90_err(ncret)
[1d9681b]973            ncret = nf90_put_var(ncid, ncvarid, &
974&                                bknew(1:nzmax))
[8413bc9]975            call handle_nf90_err(ncret)
[1d9681b]976
977
978            PRINT *, 'SUM(bknew(1:nzmax)): ', &
979&                                        SUM(bknew(1:nzmax))
980
981
982
[7e5f1dc]983            ! Getting ready to add in nested code
[1d9681b]984
[41a2981]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)
[8413bc9]989            call handle_nf90_err(ncret)
[41a2981]990            ncret = nf90_def_dim(ncid, 'nxmaxn', nxmaxn, nxmaxn_dimid)
[8413bc9]991            call handle_nf90_err(ncret)
[41a2981]992            ncret = nf90_def_dim(ncid, 'nymaxn', nymaxn, nymaxn_dimid)
[8413bc9]993            call handle_nf90_err(ncret)
[41a2981]994
[5f50284]995
[8651603]996            ! Nested, scalar values (for each nest)
997            dim1dids = (/maxnests_dimid/)
998
999            ncret = nf90_def_var(ncid, 'nxn', NF90_INT, &
1000&                                       dim1dids, ncvarid)
[8413bc9]1001            call handle_nf90_err(ncret)
[8651603]1002            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1003&                                        shuffle=0,     &
1004&                                        deflate=1,     &
1005&                                        deflate_level=DEF_LEVEL)
[8413bc9]1006            call handle_nf90_err(ncret)
[8651603]1007            ncret = nf90_put_var(ncid, ncvarid, &
1008&                                nxn(1:maxnests))
[8413bc9]1009            call handle_nf90_err(ncret)
[8651603]1010
1011            ncret = nf90_def_var(ncid, 'nyn', NF90_INT, &
1012&                                       dim1dids, ncvarid)
[8413bc9]1013            call handle_nf90_err(ncret)
[8651603]1014            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1015&                                        shuffle=0,     &
1016&                                        deflate=1,     &
1017&                                        deflate_level=DEF_LEVEL)
[8413bc9]1018            call handle_nf90_err(ncret)
[8651603]1019            ncret = nf90_put_var(ncid, ncvarid, &
1020&                                nyn(1:maxnests))
[8413bc9]1021            call handle_nf90_err(ncret)
[8651603]1022
1023            ncret = nf90_def_var(ncid, 'dxn', NF90_FLOAT, &
1024&                                       dim1dids, ncvarid)
[8413bc9]1025            call handle_nf90_err(ncret)
[8651603]1026            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1027&                                        shuffle=0,     &
1028&                                        deflate=1,     &
1029&                                        deflate_level=DEF_LEVEL)
[8413bc9]1030            call handle_nf90_err(ncret)
[8651603]1031            ncret = nf90_put_var(ncid, ncvarid, &
1032&                                dxn(1:maxnests))
[8413bc9]1033            call handle_nf90_err(ncret)
[8651603]1034
1035            ncret = nf90_def_var(ncid, 'dyn', NF90_FLOAT, &
1036&                                       dim1dids, ncvarid)
[8413bc9]1037            call handle_nf90_err(ncret)
[8651603]1038            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1039&                                        shuffle=0,     &
1040&                                        deflate=1,     &
1041&                                        deflate_level=DEF_LEVEL)
[8413bc9]1042            call handle_nf90_err(ncret)
[8651603]1043            ncret = nf90_put_var(ncid, ncvarid, &
1044&                                dyn(1:maxnests))
[8413bc9]1045            call handle_nf90_err(ncret)
[8651603]1046
1047            ncret = nf90_def_var(ncid, 'xlon0n', NF90_FLOAT, &
1048&                                       dim1dids, ncvarid)
[8413bc9]1049            call handle_nf90_err(ncret)
[8651603]1050            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1051&                                        shuffle=0,     &
1052&                                        deflate=1,     &
1053&                                        deflate_level=DEF_LEVEL)
[8413bc9]1054            call handle_nf90_err(ncret)
[8651603]1055            ncret = nf90_put_var(ncid, ncvarid, &
1056&                                xlon0n(1:maxnests))
[8413bc9]1057            call handle_nf90_err(ncret)
[8651603]1058
1059            ncret = nf90_def_var(ncid, 'ylat0n', NF90_FLOAT, &
1060&                                       dim1dids, ncvarid)
[8413bc9]1061            call handle_nf90_err(ncret)
[8651603]1062            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1063&                                        shuffle=0,     &
1064&                                        deflate=1,     &
1065&                                        deflate_level=DEF_LEVEL)
[8413bc9]1066            call handle_nf90_err(ncret)
[8651603]1067            ncret = nf90_put_var(ncid, ncvarid, &
1068&                                ylat0n(1:maxnests))
[8413bc9]1069            call handle_nf90_err(ncret)
[8651603]1070
1071
1072
1073
[496c607]1074            ! Nested fields, static over time
[8651603]1075            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
1076
1077            ncret = nf90_def_var(ncid, 'oron', NF90_FLOAT, &
1078&                                       dim3dids, ncvarid)
[8413bc9]1079            call handle_nf90_err(ncret)
[8651603]1080            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1081&                                        shuffle=0,     &
1082&                                        deflate=1,     &
1083&                                        deflate_level=DEF_LEVEL)
[8413bc9]1084            call handle_nf90_err(ncret)
[8651603]1085            ncret = nf90_put_var(ncid, ncvarid, &
1086&                                oron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
[8413bc9]1087            call handle_nf90_err(ncret)
[8651603]1088
1089            ncret = nf90_def_var(ncid, 'excessoron', NF90_FLOAT, &
1090&                                       dim3dids, ncvarid)
[8413bc9]1091            call handle_nf90_err(ncret)
[8651603]1092            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1093&                                        shuffle=0,     &
1094&                                        deflate=1,     &
1095&                                        deflate_level=DEF_LEVEL)
[8413bc9]1096            call handle_nf90_err(ncret)
[8651603]1097            ncret = nf90_put_var(ncid, ncvarid, &
1098&                                excessoron(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
[8413bc9]1099            call handle_nf90_err(ncret)
[8651603]1100
1101            ncret = nf90_def_var(ncid, 'lsmn', NF90_FLOAT, &
1102&                                       dim3dids, ncvarid)
[8413bc9]1103            call handle_nf90_err(ncret)
[8651603]1104            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1105&                                        shuffle=0,     &
1106&                                        deflate=1,     &
1107&                                        deflate_level=DEF_LEVEL)
[8413bc9]1108            call handle_nf90_err(ncret)
[8651603]1109            ncret = nf90_put_var(ncid, ncvarid, &
1110&                                lsmn(0:nxmaxn-1, 0:nymaxn-1, 1:maxnests))
[8413bc9]1111            call handle_nf90_err(ncret)
[8651603]1112
1113            dim4dids = (/nxmaxn_dimid, nymaxn_dimid, numclass_dimid, maxnests_dimid/)
1114
1115            ncret = nf90_def_var(ncid, 'xlandusen', NF90_FLOAT, &
1116&                                       dim4dids, ncvarid)
[8413bc9]1117            call handle_nf90_err(ncret)
[8651603]1118            ncret = nf90_def_var_deflate(ncid, ncvarid,   &
1119&                                        shuffle=0,     &
1120&                                        deflate=1,     &
1121&                                        deflate_level=DEF_LEVEL)
[8413bc9]1122            call handle_nf90_err(ncret)
[8651603]1123            ncret = nf90_put_var(ncid, ncvarid, &
1124&                                xlandusen(0:nxmaxn-1, 0:nymaxn-1, 1:numclass, 1:maxnests))
[8413bc9]1125            call handle_nf90_err(ncret)
[8651603]1126
[8413bc9]1127            PRINT *, 'SUM(oron): ', SUM(oron)
[8651603]1128
1129
1130
[496c607]1131            ! 3d nested fields
[8413bc9]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
[496c607]1295            ! 2d nested fields
[ee13a7b]1296            dim3dids = (/nxmaxn_dimid, nymaxn_dimid, maxnests_dimid/)
[8413bc9]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
[ee13a7b]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)
[8413bc9]1321
[ee13a7b]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)
[8413bc9]1333
[ee13a7b]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)
[8413bc9]1345
[ee13a7b]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)
[8413bc9]1357
[ee13a7b]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)
[8413bc9]1369
[ee13a7b]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)
[8413bc9]1501
[ee13a7b]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)
[8413bc9]1513
[ee13a7b]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,:))
[8413bc9]1546
1547
1548
[496c607]1549            ! Auxiliary variables for nests
[ee13a7b]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
[496c607]1631            ! Variables for polar stereographic projection
[ee13a7b]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
[030e3c1]1654            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
1655            ! to INTEGER for NetCDF storage
[ee13a7b]1656            ncret = nf90_def_var(ncid, 'xglobal', NF90_INT, ncvarid)
1657            call handle_nf90_err(ncret)
[030e3c1]1658            ncret = nf90_put_var(ncid, ncvarid, logical2integer(xglobal))
[ee13a7b]1659            call handle_nf90_err(ncret)
1660
1661            ncret = nf90_def_var(ncid, 'sglobal', NF90_INT, ncvarid)
1662            call handle_nf90_err(ncret)
[030e3c1]1663            ncret = nf90_put_var(ncid, ncvarid, logical2integer(sglobal))
[ee13a7b]1664            call handle_nf90_err(ncret)
1665
1666            ncret = nf90_def_var(ncid, 'nglobal', NF90_INT, ncvarid)
1667            call handle_nf90_err(ncret)
[030e3c1]1668            ncret = nf90_put_var(ncid, ncvarid, logical2integer(nglobal))
[ee13a7b]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
[496c607]1689            ! Variables declared in conv_mod (convection)
[030e3c1]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
[496c607]1875        ELSE IF (op == 'LOAD') THEN
1876
[5cef1eb]1877            ! Read the preprocessed format version string and insure it
1878            ! matches this version
[515b21c]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
[5cef1eb]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
[64c820a]1898                ! PRINT *, ''  GK: causes relocation truncated to fit: R_X86_64_32
[5cef1eb]1899                PRINT *, 'Inconsistent preprocessing format version'
1900                PRINT *, 'Expected Version: ', PREPROC_FORMAT_VERSION_STR
1901                PRINT *, 'Detected Version: ', temp_preproc_format_version_str
[64c820a]1902                ! PRINT *, ''
[5cef1eb]1903                STOP
1904            END IF
[515b21c]1905
[5f50284]1906
1907
1908
[5cef1eb]1909
[9cdf8bd]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.
[5f50284]1914
[b9970e3]1915            ! Get dimensions
1916            ncret = nf90_inq_dimid(ncid, 'nxmax', nxmax_dimid)
[515b21c]1917            call handle_nf90_err(ncret)           
[b9970e3]1918            ncret = nf90_inquire_dimension(ncid, nxmax_dimid, nxmax_dimname, &
1919&                                                temp_nxmax)
[8413bc9]1920            call handle_nf90_err(ncret)
[b9970e3]1921            PRINT *, 'temp_nxmax: ', temp_nxmax
1922
[5f50284]1923
[b9970e3]1924            ncret = nf90_inq_dimid(ncid, 'nymax', nymax_dimid)
[8413bc9]1925            call handle_nf90_err(ncret)
[b9970e3]1926            ncret = nf90_inquire_dimension(ncid, nymax_dimid, nymax_dimname, &
1927&                                                temp_nymax)
[8413bc9]1928            call handle_nf90_err(ncret)
[b9970e3]1929            PRINT *, 'temp_nymax: ', temp_nymax
1930
1931            ncret = nf90_inq_dimid(ncid, 'nzmax', nzmax_dimid)
[8413bc9]1932            call handle_nf90_err(ncret)
[b9970e3]1933            ncret = nf90_inquire_dimension(ncid, nzmax_dimid, nzmax_dimname, &
1934&                                                temp_nzmax)
[8413bc9]1935            call handle_nf90_err(ncret)
[b9970e3]1936            PRINT *, 'temp_nzmax: ', temp_nzmax
1937
1938            ncret = nf90_inq_dimid(ncid, 'nuvzmax', nuvzmax_dimid)
[8413bc9]1939            call handle_nf90_err(ncret)
[b9970e3]1940            ncret = nf90_inquire_dimension(ncid, nuvzmax_dimid, nuvzmax_dimname, &
1941&                                                temp_nuvzmax)
[8413bc9]1942            call handle_nf90_err(ncret)
[b9970e3]1943            PRINT *, 'temp_nuvzmax: ', temp_nuvzmax
1944
1945            ncret = nf90_inq_dimid(ncid, 'nwzmax', nwzmax_dimid)
[8413bc9]1946            call handle_nf90_err(ncret)
[b9970e3]1947            ncret = nf90_inquire_dimension(ncid, nwzmax_dimid, nwzmax_dimname, &
1948&                                                temp_nwzmax)
[8413bc9]1949            call handle_nf90_err(ncret)
[b9970e3]1950            PRINT *, 'temp_nwzmax: ', temp_nwzmax
1951
[8651603]1952            ncret = nf90_inq_dimid(ncid, 'numclass', numclass_dimid)
[8413bc9]1953            call handle_nf90_err(ncret)
[8651603]1954            ncret = nf90_inquire_dimension(ncid, numclass_dimid, numclass_dimname, &
1955&                                                temp_numclass)
[8413bc9]1956            call handle_nf90_err(ncret)
[8651603]1957            PRINT *, 'temp_numclass: ', temp_numclass
1958
1959            ncret = nf90_inq_dimid(ncid, 'maxspec', maxspec_dimid)
[8413bc9]1960            call handle_nf90_err(ncret)
[8651603]1961            ncret = nf90_inquire_dimension(ncid, maxspec_dimid, maxspec_dimname, &
1962&                                                temp_maxspec)
[8413bc9]1963            call handle_nf90_err(ncret)
[8651603]1964            PRINT *, 'temp_maxspec: ', temp_maxspec
1965
[b9970e3]1966
[9cdf8bd]1967
1968            IF ( (temp_nxmax == nxmax) .AND. (temp_nymax == nymax) .AND. &
1969&                   (temp_nzmax == nzmax) .AND. &
1970&                   (temp_nuvzmax == nuvzmax) .AND. &
[8651603]1971&                   (temp_nwzmax == nwzmax) .AND. &
1972&                   (temp_numclass == numclass) .AND. &
1973&                   (temp_maxspec == maxspec) ) THEN
[9cdf8bd]1974                CONTINUE
1975            ELSE
1976                PRINT *, 'Incompatible dimensions between fp file and current FLEXPART!'
[64c820a]1977                ! PRINT *, ''
[9cdf8bd]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
[8651603]1983                PRINT *, 'nwzmax:     ', temp_nwzmax, '    ', nwzmax
1984                PRINT *, 'numclass:     ', temp_numclass, '    ', numclass
1985                PRINT *, 'maxspec:     ', temp_maxspec, '    ', maxspec
[64c820a]1986                ! PRINT *, ''
[9cdf8bd]1987                STOP
1988            END IF
1989
1990
[41a2981]1991
1992
[496c607]1993            ! Scalar values
[5f50284]1994
1995
[929ae37]1996            ! Get the varid , then read into scalar variable
1997            ncret = nf90_inq_varid(ncid, 'nx', ncvarid)
[8413bc9]1998            call handle_nf90_err(ncret)
[929ae37]1999            ncret = nf90_get_var(ncid, ncvarid, nx)
[8413bc9]2000            call handle_nf90_err(ncret)
[929ae37]2001
2002            ncret = nf90_inq_varid(ncid, 'ny', ncvarid)
[8413bc9]2003            call handle_nf90_err(ncret)
[929ae37]2004            ncret = nf90_get_var(ncid, ncvarid, ny)
[8413bc9]2005            call handle_nf90_err(ncret)
[929ae37]2006
2007            ncret = nf90_inq_varid(ncid, 'nxmin1', ncvarid)
[8413bc9]2008            call handle_nf90_err(ncret)
[929ae37]2009            ncret = nf90_get_var(ncid, ncvarid, nxmin1)
[8413bc9]2010            call handle_nf90_err(ncret)
[929ae37]2011
2012            ncret = nf90_inq_varid(ncid, 'nymin1', ncvarid)
[8413bc9]2013            call handle_nf90_err(ncret)
[929ae37]2014            ncret = nf90_get_var(ncid, ncvarid, nymin1)
[8413bc9]2015            call handle_nf90_err(ncret)
[929ae37]2016
2017            ncret = nf90_inq_varid(ncid, 'nxfield', ncvarid)
[8413bc9]2018            call handle_nf90_err(ncret)
[929ae37]2019            ncret = nf90_get_var(ncid, ncvarid, nxfield)
[8413bc9]2020            call handle_nf90_err(ncret)
[929ae37]2021
2022            ncret = nf90_inq_varid(ncid, 'nuvz', ncvarid)
[8413bc9]2023            call handle_nf90_err(ncret)
[929ae37]2024            ncret = nf90_get_var(ncid, ncvarid, nuvz)
[8413bc9]2025            call handle_nf90_err(ncret)
[929ae37]2026
2027            ncret = nf90_inq_varid(ncid, 'nwz', ncvarid)
[8413bc9]2028            call handle_nf90_err(ncret)
[929ae37]2029            ncret = nf90_get_var(ncid, ncvarid, nwz)
[8413bc9]2030            call handle_nf90_err(ncret)
[929ae37]2031
2032            ncret = nf90_inq_varid(ncid, 'nz', ncvarid)
[8413bc9]2033            call handle_nf90_err(ncret)
[929ae37]2034            ncret = nf90_get_var(ncid, ncvarid, nz)
[8413bc9]2035            call handle_nf90_err(ncret)
[929ae37]2036
2037            ncret = nf90_inq_varid(ncid, 'nmixz', ncvarid)
[8413bc9]2038            call handle_nf90_err(ncret)
[929ae37]2039            ncret = nf90_get_var(ncid, ncvarid, nmixz)
[8413bc9]2040            call handle_nf90_err(ncret)
[929ae37]2041
2042            ncret = nf90_inq_varid(ncid, 'nlev_ec', ncvarid)
[8413bc9]2043            call handle_nf90_err(ncret)
[929ae37]2044            ncret = nf90_get_var(ncid, ncvarid, nlev_ec)
[8413bc9]2045            call handle_nf90_err(ncret)
[929ae37]2046
2047            ncret = nf90_inq_varid(ncid, 'dx', ncvarid)
[8413bc9]2048            call handle_nf90_err(ncret)
[929ae37]2049            ncret = nf90_get_var(ncid, ncvarid, dx)
[8413bc9]2050            call handle_nf90_err(ncret)
[929ae37]2051
2052            ncret = nf90_inq_varid(ncid, 'dy', ncvarid)
[8413bc9]2053            call handle_nf90_err(ncret)
[929ae37]2054            ncret = nf90_get_var(ncid, ncvarid, dy)
[8413bc9]2055            call handle_nf90_err(ncret)
[929ae37]2056
2057            ncret = nf90_inq_varid(ncid, 'xlon0', ncvarid)
[8413bc9]2058            call handle_nf90_err(ncret)
[929ae37]2059            ncret = nf90_get_var(ncid, ncvarid, xlon0)
[8413bc9]2060            call handle_nf90_err(ncret)
[929ae37]2061
2062            ncret = nf90_inq_varid(ncid, 'ylat0', ncvarid)
[8413bc9]2063            call handle_nf90_err(ncret)
[929ae37]2064            ncret = nf90_get_var(ncid, ncvarid, ylat0)
[8413bc9]2065            call handle_nf90_err(ncret)
[929ae37]2066
2067            ncret = nf90_inq_varid(ncid, 'dxconst', ncvarid)
[8413bc9]2068            call handle_nf90_err(ncret)
[929ae37]2069            ncret = nf90_get_var(ncid, ncvarid, dxconst)
[8413bc9]2070            call handle_nf90_err(ncret)
[929ae37]2071
2072            ncret = nf90_inq_varid(ncid, 'dyconst', ncvarid)
[8413bc9]2073            call handle_nf90_err(ncret)
[929ae37]2074            ncret = nf90_get_var(ncid, ncvarid, dyconst)
[8413bc9]2075            call handle_nf90_err(ncret)
[929ae37]2076
2077
2078
2079
2080
2081
[496c607]2082            ! Fixed fields, static in time
[70ecaa0]2083            ncret = nf90_inq_varid(ncid, 'oro', ncvarid)
[8413bc9]2084            call handle_nf90_err(ncret)
[70ecaa0]2085            ncret = nf90_get_var(ncid, ncvarid, oro(0:nxmax-1,0:nymax-1))
[8413bc9]2086            call handle_nf90_err(ncret)
[70ecaa0]2087
2088            ncret = nf90_inq_varid(ncid, 'excessoro', ncvarid)
[8413bc9]2089            call handle_nf90_err(ncret)
[70ecaa0]2090            ncret = nf90_get_var(ncid, ncvarid, excessoro(0:nxmax-1,0:nymax-1))
[8413bc9]2091            call handle_nf90_err(ncret)
[70ecaa0]2092
2093            ncret = nf90_inq_varid(ncid, 'lsm', ncvarid)
[8413bc9]2094            call handle_nf90_err(ncret)
[70ecaa0]2095            ncret = nf90_get_var(ncid, ncvarid, lsm(0:nxmax-1,0:nymax-1))
[8413bc9]2096            call handle_nf90_err(ncret)
[70ecaa0]2097
2098            ncret = nf90_inq_varid(ncid, 'xlanduse', ncvarid)
[8413bc9]2099            call handle_nf90_err(ncret)
[70ecaa0]2100            ncret = nf90_get_var(ncid, ncvarid, xlanduse(0:nxmax-1,0:nymax-1, 1:numclass))
[8413bc9]2101            call handle_nf90_err(ncret)
[70ecaa0]2102
2103            ncret = nf90_inq_varid(ncid, 'height', ncvarid)
[8413bc9]2104            call handle_nf90_err(ncret)
[70ecaa0]2105            ncret = nf90_get_var(ncid, ncvarid, height(1:nzmax))
[8413bc9]2106            call handle_nf90_err(ncret)
[70ecaa0]2107
2108
2109
2110
[496c607]2111            ! 3d fields
[5f50284]2112
[929ae37]2113            ! Get the varid and read the variable into the array
2114            ncret = nf90_inq_varid(ncid, 'uu', ncvarid)
[8413bc9]2115            call handle_nf90_err(ncret)
[70ecaa0]2116            ncret = nf90_get_var(ncid, ncvarid, uu(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2117            call handle_nf90_err(ncret)
[929ae37]2118
2119            ncret = nf90_inq_varid(ncid, 'vv', ncvarid)
[8413bc9]2120            call handle_nf90_err(ncret)
[70ecaa0]2121            ncret = nf90_get_var(ncid, ncvarid, vv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2122            call handle_nf90_err(ncret)
[929ae37]2123
2124            ncret = nf90_inq_varid(ncid, 'uupol', ncvarid)
[8413bc9]2125            call handle_nf90_err(ncret)
[70ecaa0]2126            ncret = nf90_get_var(ncid, ncvarid, uupol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2127            call handle_nf90_err(ncret)
[929ae37]2128
2129            ncret = nf90_inq_varid(ncid, 'vvpol', ncvarid)
[8413bc9]2130            call handle_nf90_err(ncret)
[70ecaa0]2131            ncret = nf90_get_var(ncid, ncvarid, vvpol(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2132            call handle_nf90_err(ncret)
[929ae37]2133
2134            ncret = nf90_inq_varid(ncid, 'ww', ncvarid)
[8413bc9]2135            call handle_nf90_err(ncret)
[70ecaa0]2136            ncret = nf90_get_var(ncid, ncvarid, ww(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2137            call handle_nf90_err(ncret)
[929ae37]2138
2139            ncret = nf90_inq_varid(ncid, 'tt', ncvarid)
[8413bc9]2140            call handle_nf90_err(ncret)
[70ecaa0]2141            ncret = nf90_get_var(ncid, ncvarid, tt(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2142            call handle_nf90_err(ncret)
[929ae37]2143
2144            ncret = nf90_inq_varid(ncid, 'qv', ncvarid)
[8413bc9]2145            call handle_nf90_err(ncret)
[70ecaa0]2146            ncret = nf90_get_var(ncid, ncvarid, qv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2147            call handle_nf90_err(ncret)
[929ae37]2148
2149            ncret = nf90_inq_varid(ncid, 'pv', ncvarid)
[8413bc9]2150            call handle_nf90_err(ncret)
[70ecaa0]2151            ncret = nf90_get_var(ncid, ncvarid, pv(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2152            call handle_nf90_err(ncret)
[929ae37]2153
2154            ncret = nf90_inq_varid(ncid, 'rho', ncvarid)
[8413bc9]2155            call handle_nf90_err(ncret)
[70ecaa0]2156            ncret = nf90_get_var(ncid, ncvarid, rho(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2157            call handle_nf90_err(ncret)
[929ae37]2158
2159            ncret = nf90_inq_varid(ncid, 'drhodz', ncvarid)
[8413bc9]2160            call handle_nf90_err(ncret)
[70ecaa0]2161            ncret = nf90_get_var(ncid, ncvarid, drhodz(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2162            call handle_nf90_err(ncret)
[70ecaa0]2163
2164            ncret = nf90_inq_varid(ncid, 'clouds', ncvarid)
[8413bc9]2165            call handle_nf90_err(ncret)
[5f50284]2166            ncret = nf90_get_var(ncid, ncvarid, clouds(0:nxmax-1,0:nymax-1,1:nzmax,cm_index))
[8413bc9]2167            call handle_nf90_err(ncret)
[929ae37]2168
2169            ncret = nf90_inq_varid(ncid, 'tth', ncvarid)
[8413bc9]2170            call handle_nf90_err(ncret)
[70ecaa0]2171            ncret = nf90_get_var(ncid, ncvarid, tth(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
[8413bc9]2172            call handle_nf90_err(ncret)
[929ae37]2173
2174            ncret = nf90_inq_varid(ncid, 'qvh', ncvarid)
[8413bc9]2175            call handle_nf90_err(ncret)
[70ecaa0]2176            ncret = nf90_get_var(ncid, ncvarid, qvh(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
[8413bc9]2177            call handle_nf90_err(ncret)
[929ae37]2178
2179            ncret = nf90_inq_varid(ncid, 'pplev', ncvarid)
[8413bc9]2180            call handle_nf90_err(ncret)
[70ecaa0]2181            ncret = nf90_get_var(ncid, ncvarid, pplev(0:nxmax-1,0:nymax-1,1:nuvzmax,cm_index))
[8413bc9]2182            call handle_nf90_err(ncret)
[70ecaa0]2183
2184            ncret = nf90_inq_varid(ncid, 'cloudsh', ncvarid)
[8413bc9]2185            call handle_nf90_err(ncret)
[70ecaa0]2186            ncret = nf90_get_var(ncid, ncvarid, cloudsh(0:nxmax-1,0:nymax-1,cm_index))
[8413bc9]2187            call handle_nf90_err(ncret)
[70ecaa0]2188
2189
2190
[929ae37]2191
[4f17d14]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))
[929ae37]2194
2195
[70ecaa0]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
[929ae37]2199
2200
[496c607]2201            ! 2d fields
[5f50284]2202
[d2d8a96]2203            ! Get the varid and read the variable into the array
2204            ncret = nf90_inq_varid(ncid, 'ps', ncvarid)
[8413bc9]2205            call handle_nf90_err(ncret)
[d2d8a96]2206            ncret = nf90_get_var(ncid, ncvarid, ps(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2207            call handle_nf90_err(ncret)
[d2d8a96]2208
2209            ncret = nf90_inq_varid(ncid, 'sd', ncvarid)
[8413bc9]2210            call handle_nf90_err(ncret)
[d2d8a96]2211            ncret = nf90_get_var(ncid, ncvarid, sd(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2212            call handle_nf90_err(ncret)
[d2d8a96]2213
2214            ncret = nf90_inq_varid(ncid, 'msl', ncvarid)
[8413bc9]2215            call handle_nf90_err(ncret)
[d2d8a96]2216            ncret = nf90_get_var(ncid, ncvarid, msl(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2217            call handle_nf90_err(ncret)
[d2d8a96]2218
2219            ncret = nf90_inq_varid(ncid, 'tcc', ncvarid)
[8413bc9]2220            call handle_nf90_err(ncret)
[d2d8a96]2221            ncret = nf90_get_var(ncid, ncvarid, tcc(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2222            call handle_nf90_err(ncret)
[d2d8a96]2223
2224            ncret = nf90_inq_varid(ncid, 'u10', ncvarid)
[8413bc9]2225            call handle_nf90_err(ncret)
[d2d8a96]2226            ncret = nf90_get_var(ncid, ncvarid, u10(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2227            call handle_nf90_err(ncret)
[d2d8a96]2228
2229            ncret = nf90_inq_varid(ncid, 'v10', ncvarid)
[8413bc9]2230            call handle_nf90_err(ncret)
[d2d8a96]2231            ncret = nf90_get_var(ncid, ncvarid, v10(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2232            call handle_nf90_err(ncret)
[d2d8a96]2233
2234            ncret = nf90_inq_varid(ncid, 'tt2', ncvarid)
[8413bc9]2235            call handle_nf90_err(ncret)
[d2d8a96]2236            ncret = nf90_get_var(ncid, ncvarid, tt2(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2237            call handle_nf90_err(ncret)
[d2d8a96]2238
2239            ncret = nf90_inq_varid(ncid, 'td2', ncvarid)
[8413bc9]2240            call handle_nf90_err(ncret)
[d2d8a96]2241            ncret = nf90_get_var(ncid, ncvarid, td2(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2242            call handle_nf90_err(ncret)
[d2d8a96]2243
2244            ncret = nf90_inq_varid(ncid, 'lsprec', ncvarid)
[8413bc9]2245            call handle_nf90_err(ncret)
[d2d8a96]2246            ncret = nf90_get_var(ncid, ncvarid, lsprec(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2247            call handle_nf90_err(ncret)
[d2d8a96]2248
2249            ncret = nf90_inq_varid(ncid, 'convprec', ncvarid)
[8413bc9]2250            call handle_nf90_err(ncret)
[d2d8a96]2251            ncret = nf90_get_var(ncid, ncvarid, convprec(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2252            call handle_nf90_err(ncret)
[d2d8a96]2253
2254            ncret = nf90_inq_varid(ncid, 'sshf', ncvarid)
[8413bc9]2255            call handle_nf90_err(ncret)
[d2d8a96]2256            ncret = nf90_get_var(ncid, ncvarid, sshf(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2257            call handle_nf90_err(ncret)
[d2d8a96]2258
2259            ncret = nf90_inq_varid(ncid, 'ssr', ncvarid)
[8413bc9]2260            call handle_nf90_err(ncret)
[d2d8a96]2261            ncret = nf90_get_var(ncid, ncvarid, ssr(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2262            call handle_nf90_err(ncret)
[d2d8a96]2263
2264            ncret = nf90_inq_varid(ncid, 'surfstr', ncvarid)
[8413bc9]2265            call handle_nf90_err(ncret)
[d2d8a96]2266            ncret = nf90_get_var(ncid, ncvarid, surfstr(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2267            call handle_nf90_err(ncret)
[d2d8a96]2268
2269            ncret = nf90_inq_varid(ncid, 'ustar', ncvarid)
[8413bc9]2270            call handle_nf90_err(ncret)
[d2d8a96]2271            ncret = nf90_get_var(ncid, ncvarid, ustar(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2272            call handle_nf90_err(ncret)
[d2d8a96]2273
2274            ncret = nf90_inq_varid(ncid, 'wstar', ncvarid)
[8413bc9]2275            call handle_nf90_err(ncret)
[d2d8a96]2276            ncret = nf90_get_var(ncid, ncvarid, wstar(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2277            call handle_nf90_err(ncret)
[d2d8a96]2278
2279            ncret = nf90_inq_varid(ncid, 'hmix', ncvarid)
[8413bc9]2280            call handle_nf90_err(ncret)
[d2d8a96]2281            ncret = nf90_get_var(ncid, ncvarid, hmix(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2282            call handle_nf90_err(ncret)
[d2d8a96]2283
2284            ncret = nf90_inq_varid(ncid, 'tropopause', ncvarid)
[8413bc9]2285            call handle_nf90_err(ncret)
[d2d8a96]2286            ncret = nf90_get_var(ncid, ncvarid, tropopause(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2287            call handle_nf90_err(ncret)
[d2d8a96]2288
2289            ncret = nf90_inq_varid(ncid, 'oli', ncvarid)
[8413bc9]2290            call handle_nf90_err(ncret)
[d2d8a96]2291            ncret = nf90_get_var(ncid, ncvarid, oli(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2292            call handle_nf90_err(ncret)
[d2d8a96]2293
2294            ncret = nf90_inq_varid(ncid, 'diffk', ncvarid)
[8413bc9]2295            call handle_nf90_err(ncret)
[d2d8a96]2296            ncret = nf90_get_var(ncid, ncvarid, diffk(0:nxmax-1,0:nymax-1,1,cm_index))
[8413bc9]2297            call handle_nf90_err(ncret)
[d2d8a96]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
[1d9681b]2309            ncret = nf90_inq_varid(ncid, 'vdep', ncvarid)
[8413bc9]2310            call handle_nf90_err(ncret)
[1d9681b]2311            ncret = nf90_get_var(ncid, ncvarid, vdep(0:nxmax-1,0:nymax-1,1:maxspec, cm_index))
[8413bc9]2312            call handle_nf90_err(ncret)
[1d9681b]2313
[d2d8a96]2314
2315
2316
2317
[496c607]2318            ! 1d fields
[5f50284]2319
[1d9681b]2320            ncret = nf90_inq_varid(ncid, 'z0', ncvarid)
[8413bc9]2321            call handle_nf90_err(ncret)
[1d9681b]2322            ncret = nf90_get_var(ncid, ncvarid, z0(1:numclass))
[8413bc9]2323            call handle_nf90_err(ncret)
[1d9681b]2324
2325            ncret = nf90_inq_varid(ncid, 'akm', ncvarid)
[8413bc9]2326            call handle_nf90_err(ncret)
[1d9681b]2327            ncret = nf90_get_var(ncid, ncvarid, akm(1:nwzmax))
[8413bc9]2328            call handle_nf90_err(ncret)
[1d9681b]2329
2330            ncret = nf90_inq_varid(ncid, 'bkm', ncvarid)
[8413bc9]2331            call handle_nf90_err(ncret)
[1d9681b]2332            ncret = nf90_get_var(ncid, ncvarid, bkm(1:nwzmax))
[8413bc9]2333            call handle_nf90_err(ncret)
[1d9681b]2334
2335            ncret = nf90_inq_varid(ncid, 'akz', ncvarid)
[8413bc9]2336            call handle_nf90_err(ncret)
[1d9681b]2337            ncret = nf90_get_var(ncid, ncvarid, akz(1:nuvzmax))
[8413bc9]2338            call handle_nf90_err(ncret)
[1d9681b]2339
2340            ncret = nf90_inq_varid(ncid, 'bkz', ncvarid)
[8413bc9]2341            call handle_nf90_err(ncret)
[1d9681b]2342            ncret = nf90_get_var(ncid, ncvarid, bkz(1:nuvzmax))
[8413bc9]2343            call handle_nf90_err(ncret)
[1d9681b]2344
2345            ncret = nf90_inq_varid(ncid, 'aknew', ncvarid)
[8413bc9]2346            call handle_nf90_err(ncret)
[1d9681b]2347            ncret = nf90_get_var(ncid, ncvarid, aknew(1:nzmax))
[8413bc9]2348            call handle_nf90_err(ncret)
[1d9681b]2349
2350            ncret = nf90_inq_varid(ncid, 'bknew', ncvarid)
[8413bc9]2351            call handle_nf90_err(ncret)
[1d9681b]2352            ncret = nf90_get_var(ncid, ncvarid, bknew(1:nzmax))
[8413bc9]2353            call handle_nf90_err(ncret)
[1d9681b]2354
2355
2356
2357            PRINT *, 'SUM(bknew(1:nzmax)): ', &
2358&                                        SUM(bknew(1:nzmax))
2359
2360
2361
2362
[41a2981]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)
[8413bc9]2368            call handle_nf90_err(ncret)
[41a2981]2369            ncret = nf90_inquire_dimension(ncid, maxnests_dimid, maxnests_dimname, &
2370&                                                temp_maxnests)
[8413bc9]2371            call handle_nf90_err(ncret)
[41a2981]2372            PRINT *, 'temp_maxnests: ', temp_maxnests
2373
2374            ncret = nf90_inq_dimid(ncid, 'nxmaxn', nxmaxn_dimid)
[8413bc9]2375            call handle_nf90_err(ncret)
[41a2981]2376            ncret = nf90_inquire_dimension(ncid, nxmaxn_dimid, nxmaxn_dimname, &
2377&                                                temp_nxmaxn)
[8413bc9]2378            call handle_nf90_err(ncret)
[41a2981]2379            PRINT *, 'temp_nxmaxn: ', temp_nxmaxn
2380
2381            ncret = nf90_inq_dimid(ncid, 'nymaxn', nymaxn_dimid)
[8413bc9]2382            call handle_nf90_err(ncret)
[41a2981]2383            ncret = nf90_inquire_dimension(ncid, nymaxn_dimid, nymaxn_dimname, &
2384&                                                temp_nymaxn)
[8413bc9]2385            call handle_nf90_err(ncret)
[41a2981]2386            PRINT *, 'temp_nymaxn: ', temp_nymaxn
2387
[8651603]2388            ! Note that maxspec_dimid and numclass_dimid were checked above
2389
2390
2391
[41a2981]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
[1d9681b]2407
[496c607]2408            ! Nested, scalar values (for each nest)
[8651603]2409            ncret = nf90_inq_varid(ncid, 'nxn', ncvarid)
[8413bc9]2410            call handle_nf90_err(ncret)
[8651603]2411            ncret = nf90_get_var(ncid, ncvarid, nxn(1:maxnests))
[8413bc9]2412            call handle_nf90_err(ncret)
[8651603]2413
2414            ncret = nf90_inq_varid(ncid, 'nyn', ncvarid)
[8413bc9]2415            call handle_nf90_err(ncret)
[8651603]2416            ncret = nf90_get_var(ncid, ncvarid, nyn(1:maxnests))
[8413bc9]2417            call handle_nf90_err(ncret)
[8651603]2418
2419            ncret = nf90_inq_varid(ncid, 'dxn', ncvarid)
[8413bc9]2420            call handle_nf90_err(ncret)
[8651603]2421            ncret = nf90_get_var(ncid, ncvarid, dxn(1:maxnests))
[8413bc9]2422            call handle_nf90_err(ncret)
[8651603]2423
2424            ncret = nf90_inq_varid(ncid, 'dyn', ncvarid)
[8413bc9]2425            call handle_nf90_err(ncret)
[8651603]2426            ncret = nf90_get_var(ncid, ncvarid, dyn(1:maxnests))
[8413bc9]2427            call handle_nf90_err(ncret)
[8651603]2428
2429            ncret = nf90_inq_varid(ncid, 'xlon0n', ncvarid)
[8413bc9]2430            call handle_nf90_err(ncret)
[8651603]2431            ncret = nf90_get_var(ncid, ncvarid, xlon0n(1:maxnests))
[8413bc9]2432            call handle_nf90_err(ncret)
[8651603]2433
2434            ncret = nf90_inq_varid(ncid, 'ylat0n', ncvarid)
[8413bc9]2435            call handle_nf90_err(ncret)
[8651603]2436            ncret = nf90_get_var(ncid, ncvarid, ylat0n(1:maxnests))
[8413bc9]2437            call handle_nf90_err(ncret)
[8651603]2438
2439
2440
[496c607]2441            ! Nested fields, static over time
[8651603]2442            ncret = nf90_inq_varid(ncid, 'oron', ncvarid)
[8413bc9]2443            call handle_nf90_err(ncret)
[8651603]2444            ncret = nf90_get_var(ncid, ncvarid, oron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
[8413bc9]2445            call handle_nf90_err(ncret)
[8651603]2446
2447            ncret = nf90_inq_varid(ncid, 'excessoron', ncvarid)
[8413bc9]2448            call handle_nf90_err(ncret)
[8651603]2449            ncret = nf90_get_var(ncid, ncvarid, excessoron(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
[8413bc9]2450            call handle_nf90_err(ncret)
[8651603]2451
2452            ncret = nf90_inq_varid(ncid, 'lsmn', ncvarid)
[8413bc9]2453            call handle_nf90_err(ncret)
[8651603]2454            ncret = nf90_get_var(ncid, ncvarid, lsmn(0:nxmaxn-1,0:nymaxn-1,1:maxnests))
[8413bc9]2455            call handle_nf90_err(ncret)
[8651603]2456
2457            ncret = nf90_inq_varid(ncid, 'xlandusen', ncvarid)
[8413bc9]2458            call handle_nf90_err(ncret)
[8651603]2459            ncret = nf90_get_var(ncid, ncvarid, xlandusen(0:nxmaxn-1,0:nymaxn-1,1:numclass,1:maxnests))
[8413bc9]2460            call handle_nf90_err(ncret)
[8651603]2461
2462
[8413bc9]2463            PRINT *, 'SUM(oron): ', SUM(oron)
[8651603]2464
2465
2466
2467
[496c607]2468            ! 3d nested fields
[5f50284]2469
[8413bc9]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
[496c607]2540            ! 2d nested fields
[8413bc9]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
[ee13a7b]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
[8413bc9]2642
2643
2644            PRINT *, 'SUM(psn): ', SUM(psn(:,:,:,cm_index,:))
[ee13a7b]2645            PRINT *, 'SUM(surfstrn): ', SUM(surfstrn(:,:,:,cm_index,:))
2646            PRINT *, 'SUM(vdepn): ', SUM(vdepn(:,:,:,cm_index,:))
[8413bc9]2647
2648
2649
[496c607]2650            ! Auxiliary variables for nests
[ee13a7b]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
[496c607]2688            ! Variables for polar stereographic projection
[ee13a7b]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
[030e3c1]2699            ! xglobal, sglobal, nglobal are LOGICAL vars, and need to be converted
2700            ! to INTEGER for NetCDF storage
[ee13a7b]2701            ncret = nf90_inq_varid(ncid, 'xglobal', ncvarid)
2702            call handle_nf90_err(ncret)
[030e3c1]2703            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
[ee13a7b]2704            call handle_nf90_err(ncret)
[030e3c1]2705            xglobal = integer2logical(temp_integer)
[ee13a7b]2706
2707            ncret = nf90_inq_varid(ncid, 'sglobal', ncvarid)
2708            call handle_nf90_err(ncret)
[030e3c1]2709            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
[ee13a7b]2710            call handle_nf90_err(ncret)
[030e3c1]2711            sglobal = integer2logical(temp_integer)
[ee13a7b]2712
2713            ncret = nf90_inq_varid(ncid, 'nglobal', ncvarid)
2714            call handle_nf90_err(ncret)
[030e3c1]2715            ncret = nf90_get_var(ncid, ncvarid, temp_integer)
[ee13a7b]2716            call handle_nf90_err(ncret)
[030e3c1]2717            nglobal = integer2logical(temp_integer)
[ee13a7b]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
[496c607]2739            ! Variables declared in conv_mod (convection)
[030e3c1]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
[496c607]2852        ELSE
2853            STOP 'fpio(): Illegal operation'
2854           
2855        ENDIF
2856    END SUBROUTINE fpio
2857
2858
[b398fb6]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
[496c607]2866        INTEGER, INTENT(IN) :: cm_index           ! Index of last dimension in
2867                                                  ! most com_mod variables.
2868                                                  ! Should be 1 or 2
2869
[b398fb6]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
[496c607]3412
[8413bc9]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
[030e3c1]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
[8413bc9]3466
[496c607]3467
3468END MODULE fpmetbinary_mod
Note: See TracBrowser for help on using the repository browser.
hosted by ZAMG