chgres_cube  1.12.0
 All Data Structures Files Functions Variables
write_data.F90
Go to the documentation of this file.
1  module write_data
2 
4 
5  private
6 
11 
12  contains
13 
23 
28  subroutine write_fv3_atm_header_netcdf(localpet)
29 
30  use esmf
31 
32  use netcdf
33 
34  use atmosphere_target_data, only : nvcoord_target, &
35  vcoord_target, &
36  levp1_target
37 
38  use program_setup, only : num_tracers, use_thomp_mp_climo
39 
40  implicit none
41 
42  integer, intent(in) :: localpet
43 
44  character(len=13) :: outfile
45 
46  integer :: header_buffer_val = 16384
47  integer :: error, ncid, dim_nvcoord
48  integer :: dim_levp1, id_ntrac, id_vcoord
49  integer :: num_tracers_output
50 
51  real(kind=esmf_kind_r8), allocatable :: tmp(:,:)
52 
53  if (localpet /= 0) return
54 
55  outfile="./gfs_ctrl.nc"
56 
57  print*,"- WRITE ATMOSPHERIC HEADER FILE: ", trim(outfile)
58 
59  error = nf90_create(outfile, nf90_netcdf4, ncid)
60  call netcdf_err(error, 'CREATING FILE='//trim(outfile) )
61 
62  error = nf90_def_dim(ncid, 'nvcoord', nvcoord_target, dim_nvcoord)
63  call netcdf_err(error, 'define dimension nvcoord for file='//trim(outfile) )
64 
65  error = nf90_def_dim(ncid, 'levsp', levp1_target, dim_levp1)
66  call netcdf_err(error, 'define dimension levsp for file='//trim(outfile) )
67 
68  error = nf90_def_var(ncid, 'ntrac', nf90_int, id_ntrac)
69  call netcdf_err(error, 'define var ntrac for file='//trim(outfile) )
70 
71  error = nf90_def_var(ncid, 'vcoord', nf90_double, (/dim_levp1, dim_nvcoord/), id_vcoord)
72  call netcdf_err(error, 'define var vcoord for file='//trim(outfile) )
73 
74  error = nf90_enddef(ncid, header_buffer_val,4,0,4)
75  call netcdf_err(error, 'end meta define for file='//trim(outfile) )
76 
77  num_tracers_output = num_tracers
78  if (use_thomp_mp_climo) num_tracers_output = num_tracers + 2
79  error = nf90_put_var( ncid, id_ntrac, num_tracers_output)
80  call netcdf_err(error, 'write var ntrac for file='//trim(outfile) )
81 
82  allocate(tmp(levp1_target, nvcoord_target))
83  tmp(1:levp1_target,:) = vcoord_target(levp1_target:1:-1,:)
84 
85  error = nf90_put_var( ncid, id_vcoord, tmp)
86  call netcdf_err(error, 'write var vcoord for file='//trim(outfile) )
87 
88  deallocate(tmp)
89 
90  error = nf90_close(ncid)
91 
92  end subroutine write_fv3_atm_header_netcdf
93 
99  subroutine write_fv3_atm_bndy_data_netcdf(localpet)
100 
101 !---------------------------------------------------------------------------
102 !
103 ! Output data along the four halo boundaries. The naming convention
104 ! assumes point (1,1) is the lower left corner of the grid:
105 !
106 ! --------------- TOP ---------------
107 ! | |
108 ! | |
109 ! LEFT | | RIGHT
110 ! | |
111 ! |PT(1,1) |
112 ! ------------- BOTTOM --------------
113 !
114 !---------------------------------------------------------------------------
115 
116  use esmf
117  use netcdf
118 
119  use atmosphere_target_data, only : lev_target, levp1_target, &
120  ps_target_grid, zh_target_grid, &
121  tracers_target_grid, dzdt_target_grid, &
122  temp_target_grid, qnifa_climo_target_grid, &
123  qnwfa_climo_target_grid, u_s_target_grid, &
124  v_s_target_grid, u_w_target_grid, v_w_target_grid
125 
126  use model_grid, only : i_target, ip1_target, j_target, jp1_target
127 
128  use program_setup, only : halo_bndy, halo_blend, &
129  input_type, tracers, num_tracers, &
130  use_thomp_mp_climo
131 
132  implicit none
133 
134  integer, intent(in) :: localpet
135 
136  character(len=50) :: name
137 
138  integer :: header_buffer_val = 16384
139  integer :: ncid, error, tile, i, n
140  integer :: dim_lon, dim_lat
141  integer :: dim_lonp, dim_halo
142  integer :: dim_halop, dim_latm
143  integer :: dim_lev, dim_levp1
144  integer :: j_target2, halo, halo_p1
145  integer :: id_i_bottom, id_j_bottom
146  integer :: id_i_top, id_j_top
147  integer :: id_i_right, id_j_right
148  integer :: id_i_left, id_j_left
149  integer :: id_qnifa_bottom, id_qnifa_top
150  integer :: id_qnifa_right, id_qnifa_left
151  integer :: id_qnwfa_bottom, id_qnwfa_top
152  integer :: id_qnwfa_right, id_qnwfa_left
153  integer :: id_ps_bottom, id_ps_top
154  integer :: id_ps_right, id_ps_left
155  integer :: id_t_bottom, id_t_top
156  integer :: id_t_right, id_t_left
157  integer :: id_w_bottom, id_w_top
158  integer :: id_w_right, id_w_left
159  integer :: id_zh_bottom, id_zh_top
160  integer :: id_zh_right, id_zh_left
161  integer, allocatable :: id_tracer_bottom(:), id_tracer_top(:)
162  integer, allocatable :: id_tracer_right(:), id_tracer_left(:)
163  integer :: id_i_w_bottom, id_j_w_bottom
164  integer :: id_i_w_top, id_j_w_top
165  integer :: id_j_w_right, id_i_w_left
166  integer :: id_j_w_left, id_i_w_right
167  integer :: id_u_w_bottom, id_u_w_top
168  integer :: id_u_w_right, id_u_w_left
169  integer :: id_v_w_bottom, id_v_w_top
170  integer :: id_v_w_right, id_v_w_left
171  integer :: id_i_s_bottom, id_j_s_bottom
172  integer :: id_i_s_top, id_j_s_top
173  integer :: id_i_s_right, id_j_s_right
174  integer :: id_i_s_left, id_j_s_left
175  integer :: id_u_s_bottom, id_u_s_top
176  integer :: id_u_s_right, id_u_s_left
177  integer :: id_v_s_bottom, id_v_s_top
178  integer :: id_v_s_right, id_v_s_left
179  integer :: i_start_top, i_end_top
180  integer :: j_start_top, j_end_top
181  integer :: i_start_bottom, i_end_bottom
182  integer :: j_start_bottom, j_end_bottom
183  integer :: i_start_left, i_end_left
184  integer :: j_start_left, j_end_left
185  integer :: i_start_right, i_end_right
186  integer :: j_start_right, j_end_right
187  integer(kind=4), allocatable :: idum(:)
188 
189  real(kind=4), allocatable :: dum2d_top(:,:), dum2d_bottom(:,:)
190  real(kind=4), allocatable :: dum2d_left(:,:), dum2d_right(:,:)
191  real(kind=4), allocatable :: dum3d_top(:,:,:), dum3d_bottom(:,:,:)
192  real(kind=4), allocatable :: dum3d_left(:,:,:), dum3d_right(:,:,:)
193  real(esmf_kind_r8), allocatable :: data_one_tile(:,:)
194  real(esmf_kind_r8), allocatable :: data_one_tile_3d(:,:,:)
195 
196  print*,"- OUTPUT LATERAL BOUNDARY DATA."
197 
198  halo = halo_bndy + halo_blend
199  halo_p1 = halo + 1
200 
201  allocate(id_tracer_bottom(num_tracers))
202  allocate(id_tracer_top(num_tracers))
203  allocate(id_tracer_left(num_tracers))
204  allocate(id_tracer_right(num_tracers))
205 
206  if (localpet == 0) then
207 
208 !--- open the file
209  error = nf90_create("./gfs.bndy.nc", nf90_netcdf4, ncid)
210  call netcdf_err(error, 'CREATING BNDY FILE' )
211 
212  error = nf90_def_dim(ncid, 'lon', i_target, dim_lon)
213  call netcdf_err(error, 'defining lon dimension')
214 
215  j_target2 = j_target - (2*halo_bndy)
216  error = nf90_def_dim(ncid, 'lat', j_target2, dim_lat)
217  call netcdf_err(error, 'DEFINING LAT DIMENSION')
218 
219  error = nf90_def_dim(ncid, 'lonp', ip1_target, dim_lonp)
220  call netcdf_err(error, 'DEFINING LONP DIMENSION')
221 
222  j_target2 = j_target - (2*halo_bndy) - 1
223  error = nf90_def_dim(ncid, 'latm', j_target2, dim_latm)
224  call netcdf_err(error, 'DEFINING LATM DIMENSION')
225 
226  error = nf90_def_dim(ncid, 'halo', halo, dim_halo)
227  call netcdf_err(error, 'DEFINING HALO DIMENSION')
228 
229  error = nf90_def_dim(ncid, 'halop', halo_p1, dim_halop)
230  call netcdf_err(error, 'DEFINING HALOP DIMENSION')
231 
232  error = nf90_def_dim(ncid, 'lev', lev_target, dim_lev)
233  call netcdf_err(error, 'DEFINING LEV DIMENSION')
234 
235  error = nf90_def_dim(ncid, 'levp', levp1_target, dim_levp1)
236  call netcdf_err(error, 'DEFINING LEVP DIMENSION')
237 
238  error = nf90_def_var(ncid, 'i_bottom', nf90_int, &
239  (/dim_lon/), id_i_bottom)
240  call netcdf_err(error, 'DEFINING I_BOTTOM')
241 
242  error = nf90_def_var(ncid, 'j_bottom', nf90_int, &
243  (/dim_halo/), id_j_bottom)
244  call netcdf_err(error, 'DEFINING J_BOTTOM')
245 
246  error = nf90_def_var(ncid, 'i_top', nf90_int, &
247  (/dim_lon/), id_i_top)
248  call netcdf_err(error, 'DEFINING I_TOP')
249 
250  error = nf90_def_var(ncid, 'j_top', nf90_int, &
251  (/dim_halo/), id_j_top)
252  call netcdf_err(error, 'DEFINING J_TOP')
253 
254  error = nf90_def_var(ncid, 'i_right', nf90_int, &
255  (/dim_halo/), id_i_right)
256  call netcdf_err(error, 'DEFINING I_RIGHT')
257 
258  error = nf90_def_var(ncid, 'j_right', nf90_int, &
259  (/dim_lat/), id_j_right)
260  call netcdf_err(error, 'DEFINING J_RIGHT')
261 
262  error = nf90_def_var(ncid, 'i_left', nf90_int, &
263  (/dim_halo/), id_i_left)
264  call netcdf_err(error, 'DEFINING I_LEFT')
265 
266  error = nf90_def_var(ncid, 'j_left', nf90_int, &
267  (/dim_lat/), id_j_left)
268  call netcdf_err(error, 'DEFINING J_LEFT')
269 
270  error = nf90_def_var(ncid, 'ps_bottom', nf90_float, &
271  (/dim_lon, dim_halo/), id_ps_bottom)
272  call netcdf_err(error, 'DEFINING PS_BOTTOM')
273 
274  error = nf90_def_var(ncid, 'ps_top', nf90_float, &
275  (/dim_lon, dim_halo/), id_ps_top)
276  call netcdf_err(error, 'DEFINING PS_TOP')
277 
278  error = nf90_def_var(ncid, 'ps_right', nf90_float, &
279  (/dim_halo, dim_lat/), id_ps_right)
280  call netcdf_err(error, 'DEFINING PS_RIGHT')
281 
282  error = nf90_def_var(ncid, 'ps_left', nf90_float, &
283  (/dim_halo, dim_lat/), id_ps_left)
284  call netcdf_err(error, 'DEFINING PS_LEFT')
285 
286  error = nf90_def_var(ncid, 't_bottom', nf90_float, &
287  (/dim_lon, dim_halo, dim_lev/), id_t_bottom)
288  call netcdf_err(error, 'DEFINING T_BOTTOM')
289 
290  error = nf90_def_var(ncid, 't_top', nf90_float, &
291  (/dim_lon, dim_halo, dim_lev/), id_t_top)
292  call netcdf_err(error, 'DEFINING T_TOP')
293 
294  error = nf90_def_var(ncid, 't_right', nf90_float, &
295  (/dim_halo, dim_lat, dim_lev/), id_t_right)
296  call netcdf_err(error, 'DEFINING T_RIGHT')
297 
298  error = nf90_def_var(ncid, 't_left', nf90_float, &
299  (/dim_halo, dim_lat, dim_lev/), id_t_left)
300  call netcdf_err(error, 'DEFINING T_LEFT')
301 
302  error = nf90_def_var(ncid, 'w_bottom', nf90_float, &
303  (/dim_lon, dim_halo, dim_lev/), id_w_bottom)
304  call netcdf_err(error, 'DEFINING W_BOTTOM')
305 
306  error = nf90_def_var(ncid, 'w_top', nf90_float, &
307  (/dim_lon, dim_halo, dim_lev/), id_w_top)
308  call netcdf_err(error, 'DEFINING W_TOP')
309 
310  error = nf90_def_var(ncid, 'w_right', nf90_float, &
311  (/dim_halo, dim_lat, dim_lev/), id_w_right)
312  call netcdf_err(error, 'DEFINING W_RIGHT')
313 
314  error = nf90_def_var(ncid, 'w_left', nf90_float, &
315  (/dim_halo, dim_lat, dim_lev/), id_w_left)
316  call netcdf_err(error, 'DEFINING W_LEFT')
317 
318  error = nf90_def_var(ncid, 'zh_bottom', nf90_float, &
319  (/dim_lon, dim_halo, dim_levp1/), id_zh_bottom)
320  call netcdf_err(error, 'DEFINING ZH_BOTTOM')
321 
322  error = nf90_def_var(ncid, 'zh_top', nf90_float, &
323  (/dim_lon, dim_halo, dim_levp1/), id_zh_top)
324  call netcdf_err(error, 'DEFINING ZH_TOP')
325 
326  error = nf90_def_var(ncid, 'zh_right', nf90_float, &
327  (/dim_halo, dim_lat, dim_levp1/), id_zh_right)
328  call netcdf_err(error, 'DEFINING ZH_RIGHT')
329 
330  error = nf90_def_var(ncid, 'zh_left', nf90_float, &
331  (/dim_halo, dim_lat, dim_levp1/), id_zh_left)
332  call netcdf_err(error, 'DEFINING ZH_LEFT')
333 
334  do n = 1, num_tracers
335 
336  name = trim(tracers(n)) // "_bottom"
337  error = nf90_def_var(ncid, name, nf90_float, &
338  (/dim_lon, dim_halo, dim_lev/), id_tracer_bottom(n))
339  call netcdf_err(error, 'DEFINING TRACER_BOTTOM')
340 
341  name = trim(tracers(n)) // "_top"
342  error = nf90_def_var(ncid, name, nf90_float, &
343  (/dim_lon, dim_halo, dim_lev/), id_tracer_top(n))
344  call netcdf_err(error, 'DEFINING TRACER_TOP')
345 
346  name = trim(tracers(n)) // "_right"
347  error = nf90_def_var(ncid, name, nf90_float, &
348  (/dim_halo, dim_lat, dim_lev/), id_tracer_right(n))
349  call netcdf_err(error, 'DEFINING TRACER_RIGHT')
350 
351  name = trim(tracers(n)) // "_left"
352  error = nf90_def_var(ncid, name, nf90_float, &
353  (/dim_halo, dim_lat, dim_lev/), id_tracer_left(n))
354  call netcdf_err(error, 'DEFINING TRACER_LEFT')
355 
356  enddo
357 
358  if (use_thomp_mp_climo) then
359 
360  name = "ice_aero_bottom"
361  error = nf90_def_var(ncid, name, nf90_float, &
362  (/dim_lon, dim_halo, dim_lev/), id_qnifa_bottom)
363  call netcdf_err(error, 'DEFINING QNIFA_BOTTOM')
364 
365  name = "ice_aero_top"
366  error = nf90_def_var(ncid, name, nf90_float, &
367  (/dim_lon, dim_halo, dim_lev/), id_qnifa_top)
368  call netcdf_err(error, 'DEFINING QNIFA_TOP')
369 
370  name = "ice_aero_right"
371  error = nf90_def_var(ncid, name, nf90_float, &
372  (/dim_halo, dim_lat, dim_lev/), id_qnifa_right)
373  call netcdf_err(error, 'DEFINING QNIFA_RIGHT')
374 
375  name = "ice_aero_left"
376  error = nf90_def_var(ncid, name, nf90_float, &
377  (/dim_halo, dim_lat, dim_lev/), id_qnifa_left)
378  call netcdf_err(error, 'DEFINING QNIFA_LEFT')
379 
380  name = "liq_aero_bottom"
381  error = nf90_def_var(ncid, name, nf90_float, &
382  (/dim_lon, dim_halo, dim_lev/), id_qnwfa_bottom)
383  call netcdf_err(error, 'DEFINING QNWFA_BOTTOM')
384 
385  name = "liq_aero_top"
386  error = nf90_def_var(ncid, name, nf90_float, &
387  (/dim_lon, dim_halo, dim_lev/), id_qnwfa_top)
388  call netcdf_err(error, 'DEFINING QNWFA_TOP')
389 
390  name = "liq_aero_right"
391  error = nf90_def_var(ncid, name, nf90_float, &
392  (/dim_halo, dim_lat, dim_lev/), id_qnwfa_right)
393  call netcdf_err(error, 'DEFINING QNWFA_RIGHT')
394 
395  name = "liq_aero_left"
396  error = nf90_def_var(ncid, name, nf90_float, &
397  (/dim_halo, dim_lat, dim_lev/), id_qnwfa_left)
398  call netcdf_err(error, 'DEFINING QNWFA_LEFT')
399 
400  endif
401 
402  error = nf90_def_var(ncid, 'i_w_bottom', nf90_int, &
403  (/dim_lonp/), id_i_w_bottom)
404  call netcdf_err(error, 'DEFINING I_W_BOTTOM')
405 
406  error = nf90_def_var(ncid, 'j_w_bottom', nf90_int, &
407  (/dim_halo/), id_j_w_bottom)
408  call netcdf_err(error, 'DEFINING J_W_BOTTOM')
409 
410  error = nf90_def_var(ncid, 'i_w_top', nf90_int, &
411  (/dim_lonp/), id_i_w_top)
412  call netcdf_err(error, 'DEFINING I_W_TOP')
413 
414  error = nf90_def_var(ncid, 'j_w_top', nf90_int, &
415  (/dim_halo/), id_j_w_top)
416  call netcdf_err(error, 'DEFINING J_W_TOP')
417 
418  error = nf90_def_var(ncid, 'i_w_right', nf90_int, &
419  (/dim_halop/), id_i_w_right)
420  call netcdf_err(error, 'DEFINING I_W_RIGHT')
421 
422  error = nf90_def_var(ncid, 'j_w_right', nf90_int, &
423  (/dim_lat/), id_j_w_right)
424  call netcdf_err(error, 'DEFINING J_W_RIGHT')
425 
426  error = nf90_def_var(ncid, 'i_w_left', nf90_int, &
427  (/dim_halop/), id_i_w_left)
428  call netcdf_err(error, 'DEFINING I_W_LEFT')
429 
430  error = nf90_def_var(ncid, 'j_w_left', nf90_int, &
431  (/dim_lat/), id_j_w_left)
432  call netcdf_err(error, 'DEFINING J_W_LEFT')
433 
434  error = nf90_def_var(ncid, 'u_w_bottom', nf90_float, &
435  (/dim_lonp, dim_halo, dim_lev/), id_u_w_bottom)
436  call netcdf_err(error, 'DEFINING U_W_BOTTOM')
437 
438  error = nf90_def_var(ncid, 'u_w_top', nf90_float, &
439  (/dim_lonp, dim_halo, dim_lev/), id_u_w_top)
440  call netcdf_err(error, 'DEFINING U_W_TOP')
441 
442  error = nf90_def_var(ncid, 'u_w_right', nf90_float, &
443  (/dim_halop, dim_lat, dim_lev/), id_u_w_right)
444  call netcdf_err(error, 'DEFINING U_W_RIGHT')
445 
446  error = nf90_def_var(ncid, 'u_w_left', nf90_float, &
447  (/dim_halop, dim_lat, dim_lev/), id_u_w_left)
448  call netcdf_err(error, 'DEFINING U_W_LEFT')
449 
450  error = nf90_def_var(ncid, 'v_w_bottom', nf90_float, &
451  (/dim_lonp, dim_halo, dim_lev/), id_v_w_bottom)
452  call netcdf_err(error, 'DEFINING V_W_BOTTOM')
453 
454  error = nf90_def_var(ncid, 'v_w_top', nf90_float, &
455  (/dim_lonp, dim_halo, dim_lev/), id_v_w_top)
456  call netcdf_err(error, 'DEFINING V_W_TOP')
457 
458  error = nf90_def_var(ncid, 'v_w_right', nf90_float, &
459  (/dim_halop, dim_lat, dim_lev/), id_v_w_right)
460  call netcdf_err(error, 'DEFINING V_W_RIGHT')
461 
462  error = nf90_def_var(ncid, 'v_w_left', nf90_float, &
463  (/dim_halop, dim_lat, dim_lev/), id_v_w_left)
464  call netcdf_err(error, 'DEFINING V_W_LEFT')
465 
466  error = nf90_def_var(ncid, 'i_s_bottom', nf90_int, &
467  (/dim_lon/), id_i_s_bottom)
468  call netcdf_err(error, 'DEFINING I_S_BOTTOM')
469 
470  error = nf90_def_var(ncid, 'j_s_bottom', nf90_int, &
471  (/dim_halop/), id_j_s_bottom)
472  call netcdf_err(error, 'DEFINING J_S_BOTTOM')
473 
474  error = nf90_def_var(ncid, 'i_s_top', nf90_int, &
475  (/dim_lon/), id_i_s_top)
476  call netcdf_err(error, 'DEFINING I_S_TOP')
477 
478  error = nf90_def_var(ncid, 'j_s_top', nf90_int, &
479  (/dim_halop/), id_j_s_top)
480  call netcdf_err(error, 'DEFINING J_S_TOP')
481 
482  error = nf90_def_var(ncid, 'i_s_right', nf90_int, &
483  (/dim_halo/), id_i_s_right)
484  call netcdf_err(error, 'DEFINING I_S_RIGHT')
485 
486  error = nf90_def_var(ncid, 'j_s_right', nf90_int, &
487  (/dim_latm/), id_j_s_right)
488  call netcdf_err(error, 'DEFINING J_S_RIGHT')
489 
490  error = nf90_def_var(ncid, 'i_s_left', nf90_int, &
491  (/dim_halo/), id_i_s_left)
492  call netcdf_err(error, 'DEFINING I_S_LEFT')
493 
494  error = nf90_def_var(ncid, 'j_s_left', nf90_int, &
495  (/dim_latm/), id_j_s_left)
496  call netcdf_err(error, 'DEFINING J_S_LEFT')
497 
498  error = nf90_def_var(ncid, 'u_s_bottom', nf90_float, &
499  (/dim_lon, dim_halop, dim_lev/), id_u_s_bottom)
500  call netcdf_err(error, 'DEFINING U_S_BOTTOM')
501 
502  error = nf90_def_var(ncid, 'u_s_top', nf90_float, &
503  (/dim_lon, dim_halop, dim_lev/), id_u_s_top)
504  call netcdf_err(error, 'DEFINING U_S_TOP')
505 
506  error = nf90_def_var(ncid, 'u_s_right', nf90_float, &
507  (/dim_halo, dim_latm, dim_lev/), id_u_s_right)
508  call netcdf_err(error, 'DEFINING U_S_RIGHT')
509 
510  error = nf90_def_var(ncid, 'u_s_left', nf90_float, &
511  (/dim_halo, dim_latm, dim_lev/), id_u_s_left)
512  call netcdf_err(error, 'DEFINING U_S_LEFT')
513 
514  error = nf90_def_var(ncid, 'v_s_bottom', nf90_float, &
515  (/dim_lon, dim_halop, dim_lev/), id_v_s_bottom)
516  call netcdf_err(error, 'DEFINING V_S_BOTTOM')
517 
518  error = nf90_def_var(ncid, 'v_s_top', nf90_float, &
519  (/dim_lon, dim_halop, dim_lev/), id_v_s_top)
520  call netcdf_err(error, 'DEFINING V_S_TOP')
521 
522  error = nf90_def_var(ncid, 'v_s_right', nf90_float, &
523  (/dim_halo, dim_latm, dim_lev/), id_v_s_right)
524  call netcdf_err(error, 'DEFINING V_S_RIGHT')
525 
526  error = nf90_def_var(ncid, 'v_s_left', nf90_float, &
527  (/dim_halo, dim_latm, dim_lev/), id_v_s_left)
528  call netcdf_err(error, 'DEFINING V_S_LEFT')
529 
530 !--- define global attributes
531  if (trim(input_type) == "gaussian_nemsio") then
532  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GAUSSIAN NEMSIO FILE')
533  elseif (trim(input_type) == "gfs_gaussian_nemsio") then
534  error = nf90_put_att(ncid, nf90_global, 'source', 'SPECTRAL GFS GAUSSIAN NEMSIO FILE')
535  elseif (trim(input_type) == "gfs_sigio") then
536  error = nf90_put_att(ncid, nf90_global, 'source', 'SPECTRAL GFS SIGIO FILE')
537  elseif (trim(input_type) == "history") then
538  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS TILED HISTORY FILE')
539  elseif (trim(input_type) == "restart") then
540  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS TILED RESTART FILE')
541  elseif (trim(input_type) == "gaussian_netcdf") then
542  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GAUSSIAN NETCDF FILE')
543  elseif (trim(input_type) == "grib2") then
544  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GRIB2 FILE')
545  endif
546 
547  error = nf90_enddef(ncid, header_buffer_val,4,0,4)
548  call netcdf_err(error, 'DEFINING END OF HEADER')
549 
550  endif
551 
552 !---------------------------------------------------------------------------
553 ! Set up bounds for mass points. Indices are with respect to the whole
554 ! grid - including total halo (boundary plus blending halo).
555 !---------------------------------------------------------------------------
556 
557  i_start_top = 1
558  i_end_top = i_target
559  j_start_top = j_target - halo + 1
560  j_end_top = j_target
561 
562  i_start_bottom = 1
563  i_end_bottom = i_target
564  j_start_bottom = 1
565  j_end_bottom = halo
566 
567  i_start_left = 1
568  i_end_left = halo
569  j_start_left = halo_bndy + 1
570  j_end_left = j_target - halo_bndy
571 
572  i_start_right = i_target - halo + 1
573  i_end_right = i_target
574  j_start_right = halo_bndy + 1
575  j_end_right = j_target - halo_bndy
576 
577  if (localpet == 0) then
578 
579 ! Indices here are with respect to the computational grid -
580 ! without lateral boundary halo but including blending halo.
581 
582  allocate(idum(i_start_top:i_end_top))
583  do i = i_start_top, i_end_top
584  idum(i) = i - halo_bndy
585  enddo
586  error = nf90_put_var(ncid, id_i_top, idum)
587  call netcdf_err(error, "WRITING I_TOP")
588  deallocate(idum)
589  allocate(idum(i_start_bottom:i_end_bottom))
590  do i = i_start_bottom, i_end_bottom
591  idum(i) = i - halo_bndy
592  enddo
593  error = nf90_put_var(ncid, id_i_bottom, idum)
594  call netcdf_err(error, "WRITING I_BOTTOM")
595  deallocate(idum)
596  allocate(idum(i_start_left:i_end_left))
597  do i = i_start_left, i_end_left
598  idum(i) = i - halo_bndy
599  enddo
600  error = nf90_put_var(ncid, id_i_left, idum)
601  call netcdf_err(error, "WRITING I_LEFT")
602  deallocate(idum)
603  allocate(idum(i_start_right:i_end_right))
604  do i = i_start_right, i_end_right
605  idum(i) = i - halo_bndy
606  enddo
607  error = nf90_put_var(ncid, id_i_right, idum)
608  call netcdf_err(error, "WRITING I_RIGHT")
609  deallocate(idum)
610  allocate(idum(j_start_top:j_end_top))
611  do i = j_start_top, j_end_top
612  idum(i) = i - halo_bndy
613  enddo
614  error = nf90_put_var(ncid, id_j_top, idum)
615  call netcdf_err(error, "WRITING J_TOP")
616  deallocate(idum)
617  allocate(idum(j_start_bottom:j_end_bottom))
618  do i = j_start_bottom, j_end_bottom
619  idum(i) = i - halo_bndy
620  enddo
621  error = nf90_put_var(ncid, id_j_bottom, idum)
622  call netcdf_err(error, "WRITING J_BOTTOM")
623  deallocate(idum)
624  allocate(idum(j_start_left:j_end_left))
625  do i = j_start_left, j_end_left
626  idum(i) = i - halo_bndy
627  enddo
628  error = nf90_put_var(ncid, id_j_left, idum)
629  call netcdf_err(error, "WRITING J_LEFT")
630  deallocate(idum)
631  allocate(idum(j_start_right:j_end_right))
632  do i = j_start_right, j_end_right
633  idum(i) = i - halo_bndy
634  enddo
635  error = nf90_put_var(ncid, id_j_right, idum)
636  call netcdf_err(error, "WRITING J_RIGHT")
637  deallocate(idum)
638  endif
639 
640 ! surface pressure
641 
642  if (localpet == 0) then
643  allocate(data_one_tile(i_target,j_target))
644  allocate(dum2d_top(i_start_top:i_end_top, j_start_top:j_end_top))
645  allocate(dum2d_bottom(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom))
646  allocate(dum2d_left(i_start_left:i_end_left, j_start_left:j_end_left))
647  allocate(dum2d_right(i_start_right:i_end_right, j_start_right:j_end_right))
648  else
649  allocate(data_one_tile(0,0))
650  allocate(dum2d_top(0,0))
651  allocate(dum2d_bottom(0,0))
652  allocate(dum2d_left(0,0))
653  allocate(dum2d_right(0,0))
654  endif
655 
656  tile = 1
657 
658  print*,"- CALL FieldGather FOR TARGET GRID SURFACE PRESSURE"
659  call esmf_fieldgather(ps_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
660  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
661  call error_handler("IN FieldGather", error)
662 
663  if (localpet == 0) then
664  dum2d_top(:,:) = real(data_one_tile(i_start_top:i_end_top, j_start_top:j_end_top),kind=4)
665  error = nf90_put_var( ncid, id_ps_top, dum2d_top)
666  call netcdf_err(error, 'WRITING PS TOP' )
667  dum2d_bottom(:,:) = real(data_one_tile(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom),kind=4)
668  error = nf90_put_var( ncid, id_ps_bottom, dum2d_bottom)
669  call netcdf_err(error, 'WRITING PS BOTTOM' )
670  dum2d_left(:,:) = real(data_one_tile(i_start_left:i_end_left, j_start_left:j_end_left),kind=4)
671  error = nf90_put_var( ncid, id_ps_left, dum2d_left)
672  call netcdf_err(error, 'WRITING PS LEFT' )
673  dum2d_right(:,:) = real(data_one_tile(i_start_right:i_end_right, j_start_right:j_end_right),kind=4)
674  error = nf90_put_var( ncid, id_ps_right, dum2d_right)
675  call netcdf_err(error, 'WRITING PS RIGHT' )
676  endif
677 
678  deallocate(dum2d_top, dum2d_bottom, dum2d_left, dum2d_right, data_one_tile)
679 
680 ! height
681 
682  if (localpet == 0) then
683  allocate(data_one_tile_3d(i_target,j_target,levp1_target))
684  allocate(dum3d_top(i_start_top:i_end_top, j_start_top:j_end_top, levp1_target))
685  allocate(dum3d_bottom(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom, levp1_target))
686  allocate(dum3d_left(i_start_left:i_end_left, j_start_left:j_end_left, levp1_target))
687  allocate(dum3d_right(i_start_right:i_end_right, j_start_right:j_end_right, levp1_target))
688  else
689  allocate(data_one_tile_3d(0,0,0))
690  allocate(dum3d_top(0,0,0))
691  allocate(dum3d_bottom(0,0,0))
692  allocate(dum3d_left(0,0,0))
693  allocate(dum3d_right(0,0,0))
694  endif
695 
696  print*,"- CALL FieldGather FOR TARGET GRID HEIGHT FOR TILE: ", tile
697  call esmf_fieldgather(zh_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
698  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
699  call error_handler("IN FieldGather", error)
700 
701  if (localpet == 0) then
702  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
703  dum3d_top(:,:,1:levp1_target) = dum3d_top(:,:,levp1_target:1:-1)
704  error = nf90_put_var( ncid, id_zh_top, dum3d_top)
705  call netcdf_err(error, 'WRITING ZH TOP' )
706  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
707  dum3d_bottom(:,:,1:levp1_target) = dum3d_bottom(:,:,levp1_target:1:-1)
708  error = nf90_put_var( ncid, id_zh_bottom, dum3d_bottom)
709  call netcdf_err(error, 'WRITING ZH BOTTOM' )
710  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
711  dum3d_left(:,:,1:levp1_target) = dum3d_left(:,:,levp1_target:1:-1)
712  error = nf90_put_var( ncid, id_zh_left, dum3d_left)
713  call netcdf_err(error, 'WRITING ZH LEFT' )
714  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
715  dum3d_right(:,:,1:levp1_target) = dum3d_right(:,:,levp1_target:1:-1)
716  error = nf90_put_var( ncid, id_zh_right, dum3d_right)
717  call netcdf_err(error, 'WRITING ZH RIGHT' )
718  endif
719 
720  deallocate(dum3d_top, dum3d_bottom, dum3d_left, dum3d_right, data_one_tile_3d)
721 
722 ! Tracers
723 
724  if (localpet == 0) then
725  allocate(data_one_tile_3d(i_target,j_target,lev_target))
726  allocate(dum3d_top(i_start_top:i_end_top, j_start_top:j_end_top, lev_target))
727  allocate(dum3d_bottom(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom, lev_target))
728  allocate(dum3d_left(i_start_left:i_end_left, j_start_left:j_end_left, lev_target))
729  allocate(dum3d_right(i_start_right:i_end_right, j_start_right:j_end_right, lev_target))
730  else
731  allocate(data_one_tile_3d(0,0,0))
732  allocate(dum3d_top(0,0,0))
733  allocate(dum3d_bottom(0,0,0))
734  allocate(dum3d_left(0,0,0))
735  allocate(dum3d_right(0,0,0))
736  endif
737 
738  do n = 1, num_tracers
739 
740  print*,"- CALL FieldGather FOR TARGET GRID TRACER FOR TILE: ", trim(tracers(n)), tile
741  call esmf_fieldgather(tracers_target_grid(n), data_one_tile_3d, rootpet=0, tile=tile, rc=error)
742  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
743  call error_handler("IN FieldGather", error)
744 
745  if (localpet == 0) then
746  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
747  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
748  error = nf90_put_var( ncid, id_tracer_top(n), dum3d_top)
749  call netcdf_err(error, 'WRITING TRACER TOP' )
750  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
751  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
752  error = nf90_put_var( ncid, id_tracer_bottom(n), dum3d_bottom)
753  call netcdf_err(error, 'WRITING TRACER BOTTOM' )
754  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
755  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
756  error = nf90_put_var( ncid, id_tracer_left(n), dum3d_left)
757  call netcdf_err(error, 'WRITING TRACER LEFT' )
758  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
759  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
760  error = nf90_put_var( ncid, id_tracer_right(n), dum3d_right)
761  call netcdf_err(error, 'WRITING TRACER RIGHT' )
762  endif
763 
764  enddo
765 
766 ! Vertical velocity
767 
768  print*,"- CALL FieldGather FOR TARGET GRID W FOR TILE: ", tile
769  call esmf_fieldgather(dzdt_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
770  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
771  call error_handler("IN FieldGather", error)
772 
773  if (localpet == 0) then
774  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
775  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
776  error = nf90_put_var( ncid, id_w_top, dum3d_top)
777  call netcdf_err(error, 'WRITING W TOP' )
778  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
779  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
780  error = nf90_put_var( ncid, id_w_bottom, dum3d_bottom)
781  call netcdf_err(error, 'WRITING W BOTTOM' )
782  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
783  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
784  error = nf90_put_var( ncid, id_w_left, dum3d_left)
785  call netcdf_err(error, 'WRITING W LEFT' )
786  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
787  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
788  error = nf90_put_var( ncid, id_w_right, dum3d_right)
789  call netcdf_err(error, 'WRITING W RIGHT' )
790  endif
791 
792 ! Temperature
793 
794  print*,"- CALL FieldGather FOR TARGET GRID TEMPERATURE FOR TILE: ", tile
795  call esmf_fieldgather(temp_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
796  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
797  call error_handler("IN FieldGather", error)
798 
799  if (localpet == 0) then
800  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
801  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
802  error = nf90_put_var( ncid, id_t_top, dum3d_top)
803  call netcdf_err(error, 'WRITING T TOP' )
804  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
805  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
806  error = nf90_put_var( ncid, id_t_bottom, dum3d_bottom)
807  call netcdf_err(error, 'WRITING T BOTTOM' )
808  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
809  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
810  error = nf90_put_var( ncid, id_t_left, dum3d_left)
811  call netcdf_err(error, 'WRITING T LEFT' )
812  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
813  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
814  error = nf90_put_var( ncid, id_t_right, dum3d_right)
815  call netcdf_err(error, 'WRITING T RIGHT' )
816  endif
817 
818  if (use_thomp_mp_climo) then
819 
820  print*,"- CALL FieldGather FOR TARGET GRID CLIMO QNIFA FOR TILE: ", tile
821  call esmf_fieldgather(qnifa_climo_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
822  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
823  call error_handler("IN FieldGather", error)
824 
825  if (localpet == 0) then
826  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
827  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
828  error = nf90_put_var( ncid, id_qnifa_top, dum3d_top)
829  call netcdf_err(error, 'WRITING QNIFA CLIMO TOP' )
830  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
831  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
832  error = nf90_put_var( ncid, id_qnifa_bottom, dum3d_bottom)
833  call netcdf_err(error, 'WRITING QNIFA CLIMO BOTTOM' )
834  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
835  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
836  error = nf90_put_var( ncid, id_qnifa_left, dum3d_left)
837  call netcdf_err(error, 'WRITING QNIFA CLIMO LEFT' )
838  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
839  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
840  error = nf90_put_var( ncid, id_qnifa_right, dum3d_right)
841  call netcdf_err(error, 'WRITING QNIFA CLIMO RIGHT' )
842  endif
843 
844  print*,"- CALL FieldGather FOR TARGET GRID CLIMO QNWFA FOR TILE: ", tile
845  call esmf_fieldgather(qnwfa_climo_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
846  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
847  call error_handler("IN FieldGather", error)
848 
849  if (localpet == 0) then
850  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
851  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
852  error = nf90_put_var( ncid, id_qnwfa_top, dum3d_top)
853  call netcdf_err(error, 'WRITING QNWFA CLIMO TOP' )
854  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
855  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
856  error = nf90_put_var( ncid, id_qnwfa_bottom, dum3d_bottom)
857  call netcdf_err(error, 'WRITING QNWFA CLIMO BOTTOM' )
858  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
859  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
860  error = nf90_put_var( ncid, id_qnwfa_left, dum3d_left)
861  call netcdf_err(error, 'WRITING QNWFA CLIMO LEFT' )
862  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
863  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
864  error = nf90_put_var( ncid, id_qnwfa_right, dum3d_right)
865  call netcdf_err(error, 'WRITING QNWFA CLIMO RIGHT' )
866  endif
867 
868  endif
869 
870  deallocate(dum3d_top, dum3d_bottom, dum3d_left, dum3d_right, data_one_tile_3d)
871 
872 !---------------------------------------------------------------------------
873 ! Set up bounds for 's' winds. Indices are with respect to the whole
874 ! grid - including total halo (boundary plus blending halo).
875 !---------------------------------------------------------------------------
876 
877  i_start_top = 1
878  i_end_top = i_target
879  j_start_top = jp1_target - halo_p1 + 1
880  j_end_top = jp1_target
881 
882  i_start_bottom = 1
883  i_end_bottom = i_target
884  j_start_bottom = 1
885  j_end_bottom = halo_p1
886 
887  i_start_left = 1
888  i_end_left = halo
889  j_start_left = halo_bndy + 2
890  j_end_left = j_target - halo_bndy
891 
892  i_start_right = i_target - halo + 1
893  i_end_right = i_target
894  j_start_right = halo_bndy + 2
895  j_end_right = j_target - halo_bndy
896 
897  if (localpet == 0) then
898 
899 ! Indices here are with respect to the computational grid -
900 ! without lateral boundary halo but including blending halo.
901 
902  allocate(idum(i_start_top:i_end_top))
903  do i = i_start_top, i_end_top
904  idum(i) = i - halo_bndy
905  enddo
906  error = nf90_put_var(ncid, id_i_s_top, idum)
907  call netcdf_err(error, "WRITING I_S_TOP")
908  deallocate(idum)
909  allocate(idum(i_start_bottom:i_end_bottom))
910  do i = i_start_bottom, i_end_bottom
911  idum(i) = i - halo_bndy
912  enddo
913  error = nf90_put_var(ncid, id_i_s_bottom, idum)
914  call netcdf_err(error, "WRITING I_S_BOTTOM")
915  deallocate(idum)
916  allocate(idum(i_start_left:i_end_left))
917  do i = i_start_left, i_end_left
918  idum(i) = i - halo_bndy
919  enddo
920  error = nf90_put_var(ncid, id_i_s_left, idum)
921  call netcdf_err(error, "WRITING I_S_LEFT")
922  deallocate(idum)
923  allocate(idum(i_start_right:i_end_right))
924  do i = i_start_right, i_end_right
925  idum(i) = i - halo_bndy
926  enddo
927  error = nf90_put_var(ncid, id_i_s_right, idum)
928  call netcdf_err(error, "WRITING I_S_RIGHT")
929  deallocate(idum)
930  allocate(idum(j_start_top:j_end_top))
931  do i = j_start_top, j_end_top
932  idum(i) = i - halo_bndy
933  enddo
934  error = nf90_put_var(ncid, id_j_s_top, idum)
935  call netcdf_err(error, "WRITING J_S_TOP")
936  deallocate(idum)
937  allocate(idum(j_start_bottom:j_end_bottom))
938  do i = j_start_bottom, j_end_bottom
939  idum(i) = i - halo_bndy
940  enddo
941  error = nf90_put_var(ncid, id_j_s_bottom, idum)
942  call netcdf_err(error, "WRITING J_S_BOTTOM")
943  deallocate(idum)
944  allocate(idum(j_start_left:j_end_left))
945  do i = j_start_left, j_end_left
946  idum(i) = i - halo_bndy
947  enddo
948  error = nf90_put_var(ncid, id_j_s_left, idum)
949  call netcdf_err(error, "WRITING J_S_LEFT")
950  deallocate(idum)
951  allocate(idum(j_start_right:j_end_right))
952  do i = j_start_right, j_end_right
953  idum(i) = i - halo_bndy
954  enddo
955  error = nf90_put_var(ncid, id_j_s_right, idum)
956  call netcdf_err(error, "WRITING J_S_RIGHT")
957  deallocate(idum)
958  endif
959 
960 ! U-WINDS 'S'
961 
962  if (localpet == 0) then
963  allocate(data_one_tile_3d(i_target,jp1_target,lev_target))
964  allocate(dum3d_top(i_start_top:i_end_top, j_start_top:j_end_top, lev_target))
965  allocate(dum3d_bottom(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom, lev_target))
966  allocate(dum3d_left(i_start_left:i_end_left, j_start_left:j_end_left, lev_target))
967  allocate(dum3d_right(i_start_right:i_end_right, j_start_right:j_end_right, lev_target))
968  else
969  allocate(data_one_tile_3d(0,0,0))
970  allocate(dum3d_top(0,0,0))
971  allocate(dum3d_bottom(0,0,0))
972  allocate(dum3d_left(0,0,0))
973  allocate(dum3d_right(0,0,0))
974  endif
975 
976  print*,"- CALL FieldGather FOR TARGET GRID U_S FOR TILE: ", tile
977  call esmf_fieldgather(u_s_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
978  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
979  call error_handler("IN FieldGather", error)
980 
981  if (localpet == 0) then
982  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
983  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
984  error = nf90_put_var( ncid, id_u_s_top, dum3d_top)
985  call netcdf_err(error, 'WRITING U_S TOP' )
986  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
987  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
988  error = nf90_put_var( ncid, id_u_s_bottom, dum3d_bottom)
989  call netcdf_err(error, 'WRITING U_S BOTTOM' )
990  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
991  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
992  error = nf90_put_var( ncid, id_u_s_left, dum3d_left)
993  call netcdf_err(error, 'WRITING U_S LEFT' )
994  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
995  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
996  error = nf90_put_var( ncid, id_u_s_right, dum3d_right)
997  call netcdf_err(error, 'WRITING U_S RIGHT' )
998  endif
999 
1000 ! V-WINDS 'S'
1001 
1002  print*,"- CALL FieldGather FOR TARGET GRID V_S FOR TILE: ", tile
1003  call esmf_fieldgather(v_s_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
1004  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1005  call error_handler("IN FieldGather", error)
1006 
1007  if (localpet == 0) then
1008  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
1009  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
1010  error = nf90_put_var( ncid, id_v_s_top, dum3d_top)
1011  call netcdf_err(error, 'WRITING V_S TOP' )
1012  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
1013  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
1014  error = nf90_put_var( ncid, id_v_s_bottom, dum3d_bottom)
1015  call netcdf_err(error, 'WRITING V_S BOTTOM' )
1016  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
1017  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
1018  error = nf90_put_var( ncid, id_v_s_left, dum3d_left)
1019  call netcdf_err(error, 'WRITING V_S LEFT' )
1020  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
1021  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
1022  error = nf90_put_var( ncid, id_v_s_right, dum3d_right)
1023  call netcdf_err(error, 'WRITING V_S RIGHT' )
1024  endif
1025 
1026  deallocate(dum3d_top, dum3d_bottom, dum3d_left, dum3d_right, data_one_tile_3d)
1027 
1028 !---------------------------------------------------------------------------
1029 ! Set up bounds for 'w' winds. Indices are with respect to the whole
1030 ! grid - including total halo (boundary plus blending halo).
1031 !---------------------------------------------------------------------------
1032 
1033  i_start_top = 1
1034  i_end_top = ip1_target
1035  j_start_top = j_target - halo + 1
1036  j_end_top = j_target
1037 
1038  i_start_bottom = 1
1039  i_end_bottom = ip1_target
1040  j_start_bottom = 1
1041  j_end_bottom = halo
1042 
1043  i_start_left = 1
1044  i_end_left = halo_p1
1045  j_start_left = halo_bndy + 1
1046  j_end_left = j_target - halo_bndy
1047 
1048  i_start_right = ip1_target - halo_p1 + 1
1049  i_end_right = ip1_target
1050  j_start_right = halo_bndy + 1
1051  j_end_right = j_target - halo_bndy
1052 
1053  if (localpet == 0) then
1054 
1055 ! Indices here are with respect to the computational grid -
1056 ! without lateral boundary halo but including blending halo.
1057 
1058  allocate(idum(i_start_top:i_end_top))
1059  do i = i_start_top, i_end_top
1060  idum(i) = i - halo_bndy
1061  enddo
1062  error = nf90_put_var(ncid, id_i_w_top, idum)
1063  call netcdf_err(error, "WRITING I_W_TOP")
1064  deallocate(idum)
1065  allocate(idum(i_start_bottom:i_end_bottom))
1066  do i = i_start_bottom, i_end_bottom
1067  idum(i) = i - halo_bndy
1068  enddo
1069  error = nf90_put_var(ncid, id_i_w_bottom, idum)
1070  call netcdf_err(error, "WRITING I_W_BOTTOM")
1071  deallocate(idum)
1072  allocate(idum(i_start_left:i_end_left))
1073  do i = i_start_left, i_end_left
1074  idum(i) = i - halo_bndy
1075  enddo
1076  error = nf90_put_var(ncid, id_i_w_left, idum)
1077  call netcdf_err(error, "WRITING I_W_LEFT")
1078  deallocate(idum)
1079  allocate(idum(i_start_right:i_end_right))
1080  do i = i_start_right, i_end_right
1081  idum(i) = i - halo_bndy
1082  enddo
1083  error = nf90_put_var(ncid, id_i_w_right, idum)
1084  call netcdf_err(error, "WRITING I_W_RIGHT")
1085  deallocate(idum)
1086  allocate(idum(j_start_top:j_end_top))
1087  do i = j_start_top, j_end_top
1088  idum(i) = i - halo_bndy
1089  enddo
1090  error = nf90_put_var(ncid, id_j_w_top, idum)
1091  call netcdf_err(error, "WRITING J_W_TOP")
1092  deallocate(idum)
1093  allocate(idum(j_start_bottom:j_end_bottom))
1094  do i = j_start_bottom, j_end_bottom
1095  idum(i) = i - halo_bndy
1096  enddo
1097  error = nf90_put_var(ncid, id_j_w_bottom, idum)
1098  call netcdf_err(error, "WRITING J_W_BOTTOM")
1099  deallocate(idum)
1100  allocate(idum(j_start_left:j_end_left))
1101  do i = j_start_left, j_end_left
1102  idum(i) = i - halo_bndy
1103  enddo
1104  error = nf90_put_var(ncid, id_j_w_left, idum)
1105  call netcdf_err(error, "WRITING J_W_LEFT")
1106  deallocate(idum)
1107  allocate(idum(j_start_right:j_end_right))
1108  do i = j_start_right, j_end_right
1109  idum(i) = i - halo_bndy
1110  enddo
1111  error = nf90_put_var(ncid, id_j_w_right, idum)
1112  call netcdf_err(error, "WRITING J_W_RIGHT")
1113  deallocate(idum)
1114  endif
1115 
1116 ! U-WINDS 'W'
1117 
1118  if (localpet == 0) then
1119  allocate(data_one_tile_3d(ip1_target,j_target,lev_target))
1120  allocate(dum3d_top(i_start_top:i_end_top, j_start_top:j_end_top, lev_target))
1121  allocate(dum3d_bottom(i_start_bottom:i_end_bottom, j_start_bottom:j_end_bottom, lev_target))
1122  allocate(dum3d_left(i_start_left:i_end_left, j_start_left:j_end_left, lev_target))
1123  allocate(dum3d_right(i_start_right:i_end_right, j_start_right:j_end_right, lev_target))
1124  else
1125  allocate(data_one_tile_3d(0,0,0))
1126  allocate(dum3d_top(0,0,0))
1127  allocate(dum3d_bottom(0,0,0))
1128  allocate(dum3d_left(0,0,0))
1129  allocate(dum3d_right(0,0,0))
1130  endif
1131 
1132  print*,"- CALL FieldGather FOR TARGET GRID U_W FOR TILE: ", tile
1133  call esmf_fieldgather(u_w_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
1134  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1135  call error_handler("IN FieldGather", error)
1136 
1137  if (localpet == 0) then
1138  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
1139  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
1140  error = nf90_put_var( ncid, id_u_w_top, dum3d_top)
1141  call netcdf_err(error, 'WRITING U_W TOP' )
1142  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
1143  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
1144  error = nf90_put_var( ncid, id_u_w_bottom, dum3d_bottom)
1145  call netcdf_err(error, 'WRITING U_W BOTTOM' )
1146  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
1147  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
1148  error = nf90_put_var( ncid, id_u_w_left, dum3d_left)
1149  call netcdf_err(error, 'WRITING U_W LEFT' )
1150  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
1151  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
1152  error = nf90_put_var( ncid, id_u_w_right, dum3d_right)
1153  call netcdf_err(error, 'WRITING U_W RIGHT' )
1154  endif
1155 
1156 ! V-WINDS 'W'
1157 
1158  print*,"- CALL FieldGather FOR TARGET GRID V_W FOR TILE: ", tile
1159  call esmf_fieldgather(v_w_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
1160  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1161  call error_handler("IN FieldGather", error)
1162 
1163  if (localpet == 0) then
1164  dum3d_top(:,:,:) = real(data_one_tile_3d(i_start_top:i_end_top,j_start_top:j_end_top,:),kind=4)
1165  dum3d_top(:,:,1:lev_target) = dum3d_top(:,:,lev_target:1:-1)
1166  error = nf90_put_var( ncid, id_v_w_top, dum3d_top)
1167  call netcdf_err(error, 'WRITING V_W TOP' )
1168  dum3d_bottom(:,:,:) = real(data_one_tile_3d(i_start_bottom:i_end_bottom,j_start_bottom:j_end_bottom,:),kind=4)
1169  dum3d_bottom(:,:,1:lev_target) = dum3d_bottom(:,:,lev_target:1:-1)
1170  error = nf90_put_var( ncid, id_v_w_bottom, dum3d_bottom)
1171  call netcdf_err(error, 'WRITING V_W BOTTOM' )
1172  dum3d_left(:,:,:) = real(data_one_tile_3d(i_start_left:i_end_left,j_start_left:j_end_left,:),kind=4)
1173  dum3d_left(:,:,1:lev_target) = dum3d_left(:,:,lev_target:1:-1)
1174  error = nf90_put_var( ncid, id_v_w_left, dum3d_left)
1175  call netcdf_err(error, 'WRITING V_W LEFT' )
1176  dum3d_right(:,:,:) = real(data_one_tile_3d(i_start_right:i_end_right,j_start_right:j_end_right,:),kind=4)
1177  dum3d_right(:,:,1:lev_target) = dum3d_right(:,:,lev_target:1:-1)
1178  error = nf90_put_var( ncid, id_v_w_right, dum3d_right)
1179  call netcdf_err(error, 'WRITING V_W RIGHT' )
1180  endif
1181 
1182  deallocate(dum3d_top, dum3d_bottom, dum3d_left, dum3d_right, data_one_tile_3d)
1183  deallocate(id_tracer_bottom, id_tracer_top, id_tracer_left, id_tracer_right)
1184 
1185  if (localpet == 0) error = nf90_close(ncid)
1186 
1187  end subroutine write_fv3_atm_bndy_data_netcdf
1188 
1197  subroutine write_fv3_atm_data_netcdf(localpet)
1198 
1199  use esmf
1200  use netcdf
1201 
1202  use program_setup, only : halo=>halo_bndy, &
1203  input_type, tracers, num_tracers, &
1204  use_thomp_mp_climo, &
1205  regional
1206 
1207  use atmosphere_target_data, only : lev_target, levp1_target, &
1208  ps_target_grid, zh_target_grid, &
1209  dzdt_target_grid, delp_target_grid, &
1210  temp_target_grid, tracers_target_grid, &
1211  qnifa_climo_target_grid, qnwfa_climo_target_grid, &
1212  u_s_target_grid, v_s_target_grid, &
1213  u_w_target_grid, v_w_target_grid
1214 
1215  use model_grid, only : num_tiles_target_grid, &
1216  i_target, j_target, &
1217  ip1_target, jp1_target, &
1218  longitude_target_grid, &
1219  latitude_target_grid, &
1220  longitude_s_target_grid, &
1221  latitude_s_target_grid, &
1222  longitude_w_target_grid, &
1223  latitude_w_target_grid
1224 
1225  implicit none
1226 
1227  integer, intent(in) :: localpet
1228 
1229  character(len=128) :: outfile
1230 
1231  integer :: error, ncid, tile, n
1232  integer :: header_buffer_val = 16384
1233  integer :: dim_lon, dim_lat
1234  integer :: dim_lonp, dim_latp
1235  integer :: dim_lev, dim_levp1, dim_ntracer
1236  integer, allocatable :: id_tracers(:)
1237  integer :: id_lon, id_lat, id_ps
1238  integer :: id_lat_s, id_lon_s
1239  integer :: id_lat_w, id_lon_w
1240  integer :: id_w, id_zh, id_u_w
1241  integer :: id_v_w, id_u_s, id_v_s
1242  integer :: id_t, id_delp, id_qnifa, id_qnwfa
1243  integer :: i_start, i_end, j_start, j_end
1244  integer :: i_target_out, j_target_out
1245  integer :: ip1_target_out, jp1_target_out
1246  integer :: ip1_end, jp1_end, num_tracers_output
1247 
1248  real(esmf_kind_r8), allocatable :: data_one_tile(:,:)
1249  real(esmf_kind_r8), allocatable :: data_one_tile_3d(:,:,:)
1250  real(kind=4), allocatable :: dum2d(:,:)
1251  real(kind=4), allocatable :: dum3d(:,:,:)
1252 
1253 ! Remove any halo region.
1254 
1255  i_target_out = i_target-(2*halo)
1256  j_target_out = j_target-(2*halo)
1257 
1258  i_start = halo + 1
1259  j_start = halo + 1
1260  i_end = i_target - halo
1261  j_end = j_target - halo
1262 
1263  ip1_target_out = i_target_out + 1
1264  jp1_target_out = j_target_out + 1
1265 
1266  ip1_end = i_end + 1
1267  jp1_end = j_end + 1
1268 
1269  if (localpet < num_tiles_target_grid) then
1270  allocate(data_one_tile(i_target,j_target))
1271  allocate(dum2d(i_target_out,j_target_out))
1272  else
1273  allocate(data_one_tile(0,0))
1274  allocate(dum2d(0,0))
1275  endif
1276 
1277  allocate(id_tracers(num_tracers))
1278 
1279  header : if (localpet < num_tiles_target_grid) then
1280 
1281  tile = localpet + 1
1282  if (regional > 0) then
1283  outfile = "out.atm.tile7.nc"
1284  else
1285  WRITE(outfile, '(A, I1, A)') 'out.atm.tile', tile, '.nc'
1286  endif
1287 
1288 !--- open the file
1289  error = nf90_create(outfile, nf90_netcdf4, ncid)
1290  call netcdf_err(error, 'CREATING FILE='//trim(outfile) )
1291 
1292 !--- define dimension
1293  error = nf90_def_dim(ncid, 'lon', i_target_out, dim_lon)
1294  call netcdf_err(error, 'DEFINING LON DIMENSION' )
1295  error = nf90_def_dim(ncid, 'lat', j_target_out, dim_lat)
1296  call netcdf_err(error, 'DEFINING LAT DIMENSION' )
1297  error = nf90_def_dim(ncid, 'lonp', ip1_target_out, dim_lonp)
1298  call netcdf_err(error, 'DEFINING LONP DIMENSION' )
1299  error = nf90_def_dim(ncid, 'latp', jp1_target_out, dim_latp)
1300  call netcdf_err(error, 'DEFINING LATP DIMENSION' )
1301  error = nf90_def_dim(ncid, 'lev', lev_target, dim_lev)
1302  call netcdf_err(error, 'DEFINING LEV DIMENSION' )
1303  error = nf90_def_dim(ncid, 'levp', levp1_target, dim_levp1)
1304  call netcdf_err(error, 'DEFINING LEVP DIMENSION' )
1305  num_tracers_output = num_tracers
1306  if (use_thomp_mp_climo) num_tracers_output = num_tracers + 2
1307  error = nf90_def_dim(ncid, 'ntracer', num_tracers_output, dim_ntracer)
1308  call netcdf_err(error, 'DEFINING NTRACER DIMENSION' )
1309 
1310 !--- define global attributes
1311  if (trim(input_type) == "gaussian_nemsio") then
1312  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GAUSSIAN NEMSIO FILE')
1313  elseif (trim(input_type) == "gaussian_netcdf") then
1314  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GAUSSIAN NETCDF FILE')
1315  elseif (trim(input_type) == "gfs_gaussian_nemsio") then
1316  error = nf90_put_att(ncid, nf90_global, 'source', 'SPECTRAL GFS GAUSSIAN NEMSIO FILE')
1317  elseif (trim(input_type) == "gfs_sigio") then
1318  error = nf90_put_att(ncid, nf90_global, 'source', 'SPECTRAL GFS SIGIO FILE')
1319  elseif (trim(input_type) == "history") then
1320  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS TILED HISTORY FILE')
1321  elseif (trim(input_type) == "restart") then
1322  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS TILED RESTART FILE')
1323  elseif (trim(input_type) == "grib2") then
1324  error = nf90_put_att(ncid, nf90_global, 'source', 'FV3GFS GRIB2 FILE')
1325  endif
1326 
1327 !--- define field
1328  error = nf90_def_var(ncid, 'geolon', nf90_float, (/dim_lon,dim_lat/), id_lon)
1329  call netcdf_err(error, 'DEFINING GEOLON FIELD' )
1330  error = nf90_put_att(ncid, id_lon, "long_name", "Longitude")
1331  call netcdf_err(error, 'DEFINING GEOLON NAME' )
1332  error = nf90_put_att(ncid, id_lon, "units", "degrees_east")
1333  call netcdf_err(error, 'DEFINING GEOLON UNITS' )
1334 
1335  error = nf90_def_var(ncid, 'geolat', nf90_float, (/dim_lon,dim_lat/), id_lat)
1336  call netcdf_err(error, 'DEFINING GEOLAT FIELD' )
1337  error = nf90_put_att(ncid, id_lat, "long_name", "Latitude")
1338  call netcdf_err(error, 'DEFINING GEOLAT NAME' )
1339  error = nf90_put_att(ncid, id_lat, "units", "degrees_north")
1340  call netcdf_err(error, 'DEFINING GEOLAT UNITS' )
1341 
1342  error = nf90_def_var(ncid, 'geolon_s', nf90_float, (/dim_lon,dim_latp/), id_lon_s)
1343  call netcdf_err(error, 'DEFINING GEOLON_S FIELD' )
1344  error = nf90_put_att(ncid, id_lon_s, "long_name", "Longitude_s")
1345  call netcdf_err(error, 'DEFINING GEOLON_S NAME' )
1346  error = nf90_put_att(ncid, id_lon_s, "units", "degrees_east")
1347  call netcdf_err(error, 'DEFINING GEOLON_S UNITS' )
1348 
1349  error = nf90_def_var(ncid, 'geolat_s', nf90_float, (/dim_lon,dim_latp/), id_lat_s)
1350  call netcdf_err(error, 'DEFINING GEOLAT_S FIELD' )
1351  error = nf90_put_att(ncid, id_lat_s, "long_name", "Latitude_s")
1352  call netcdf_err(error, 'DEFINING GEOLAT_S NAME' )
1353  error = nf90_put_att(ncid, id_lat_s, "units", "degrees_north")
1354  call netcdf_err(error, 'DEFINING GEOLAT_S UNITS' )
1355 
1356  error = nf90_def_var(ncid, 'geolon_w', nf90_float, (/dim_lonp,dim_lat/), id_lon_w)
1357  call netcdf_err(error, 'DEFINING GEOLON_W FIELD' )
1358  error = nf90_put_att(ncid, id_lon_w, "long_name", "Longitude_w")
1359  call netcdf_err(error, 'DEFINING GEOLON_W NAME' )
1360  error = nf90_put_att(ncid, id_lon_w, "units", "degrees_east")
1361  call netcdf_err(error, 'DEFINING GEOLON_W UNITS' )
1362 
1363  error = nf90_def_var(ncid, 'geolat_w', nf90_float, (/dim_lonp,dim_lat/), id_lat_w)
1364  call netcdf_err(error, 'DEFINING GEOLAT_W FIELD' )
1365  error = nf90_put_att(ncid, id_lat_w, "long_name", "Latitude_w")
1366  call netcdf_err(error, 'DEFINING GEOLAT_W NAME' )
1367  error = nf90_put_att(ncid, id_lat_w, "units", "degrees_north")
1368  call netcdf_err(error, 'DEFINING GEOLAT_W UNITS' )
1369 
1370  error = nf90_def_var(ncid, 'ps', nf90_float, (/dim_lon,dim_lat/), id_ps)
1371  call netcdf_err(error, 'DEFINING PS' )
1372  error = nf90_put_att(ncid, id_ps, "coordinates", "geolon geolat")
1373  call netcdf_err(error, 'DEFINING PS COORD' )
1374 
1375  error = nf90_def_var(ncid, 'w', nf90_float, (/dim_lon,dim_lat,dim_lev/), id_w)
1376  call netcdf_err(error, 'DEFINING W' )
1377  error = nf90_put_att(ncid, id_w, "coordinates", "geolon geolat")
1378  call netcdf_err(error, 'DEFINING W COORD' )
1379 
1380  error = nf90_def_var(ncid, 'zh', nf90_float, (/dim_lon,dim_lat,dim_levp1/), id_zh)
1381  call netcdf_err(error, 'DEFINING ZH' )
1382  error = nf90_put_att(ncid, id_zh, "coordinates", "geolon geolat")
1383  call netcdf_err(error, 'DEFINING ZH COORD' )
1384 
1385  error = nf90_def_var(ncid, 't', nf90_float, (/dim_lon,dim_lat,dim_lev/), id_t)
1386  call netcdf_err(error, 'DEFINING T' )
1387  error = nf90_put_att(ncid, id_t, "coordinates", "geolon geolat")
1388  call netcdf_err(error, 'DEFINING T COORD' )
1389 
1390  error = nf90_def_var(ncid, 'delp', nf90_float, (/dim_lon,dim_lat,dim_lev/), id_delp)
1391  call netcdf_err(error, 'DEFINING DELP' )
1392  error = nf90_put_att(ncid, id_delp, "coordinates", "geolon geolat")
1393  call netcdf_err(error, 'DEFINING DELP COORD' )
1394 
1395  do n = 1, num_tracers
1396  if (localpet==0) print*, "write to file tracer ", trim(tracers(n))
1397  error = nf90_def_var(ncid, tracers(n), nf90_float, (/dim_lon,dim_lat,dim_lev/), id_tracers(n))
1398  call netcdf_err(error, 'DEFINING TRACERS' )
1399  error = nf90_put_att(ncid, id_tracers(n), "coordinates", "geolon geolat")
1400  call netcdf_err(error, 'DEFINING TRACERS COORD' )
1401  enddo
1402 
1403  if (use_thomp_mp_climo) then
1404  error = nf90_def_var(ncid, 'ice_aero', nf90_float, (/dim_lon,dim_lat,dim_lev/), id_qnifa)
1405  call netcdf_err(error, 'DEFINING QNIFA' )
1406  error = nf90_put_att(ncid, id_qnifa, "coordinates", "geolon geolat")
1407  call netcdf_err(error, 'DEFINING QNIFA COORD' )
1408 
1409  error = nf90_def_var(ncid, 'liq_aero', nf90_float, (/dim_lon,dim_lat,dim_lev/), id_qnwfa)
1410  call netcdf_err(error, 'DEFINING QNWFA' )
1411  error = nf90_put_att(ncid, id_qnwfa, "coordinates", "geolon geolat")
1412  call netcdf_err(error, 'DEFINING QNWFA COORD' )
1413  endif
1414 
1415  error = nf90_def_var(ncid, 'u_w', nf90_float, (/dim_lonp,dim_lat,dim_lev/), id_u_w)
1416  call netcdf_err(error, 'DEFINING U_W' )
1417  error = nf90_put_att(ncid, id_u_w, "coordinates", "geolon_w geolat_w")
1418  call netcdf_err(error, 'DEFINING U_W COORD' )
1419 
1420  error = nf90_def_var(ncid, 'v_w', nf90_float, (/dim_lonp,dim_lat,dim_lev/), id_v_w)
1421  call netcdf_err(error, 'DEFINING V_W' )
1422  error = nf90_put_att(ncid, id_v_w, "coordinates", "geolon_w geolat_w")
1423  call netcdf_err(error, 'DEFINING V_W COORD' )
1424 
1425  error = nf90_def_var(ncid, 'u_s', nf90_float, (/dim_lon,dim_latp,dim_lev/), id_u_s)
1426  call netcdf_err(error, 'DEFINING U_S' )
1427  error = nf90_put_att(ncid, id_u_s, "coordinates", "geolon_s geolat_s")
1428  call netcdf_err(error, 'DEFINING U_S COORD' )
1429 
1430  error = nf90_def_var(ncid, 'v_s', nf90_float, (/dim_lon,dim_latp,dim_lev/), id_v_s)
1431  call netcdf_err(error, 'DEFINING V_S' )
1432  error = nf90_put_att(ncid, id_v_s, "coordinates", "geolon_s geolat_s")
1433  call netcdf_err(error, 'DEFINING V_S COORD' )
1434 
1435  error = nf90_enddef(ncid, header_buffer_val,4,0,4)
1436  call netcdf_err(error, 'DEFINING HEADER' )
1437 
1438  endif header
1439 
1440 ! longitude
1441 
1442  do tile = 1, num_tiles_target_grid
1443  print*,"- CALL FieldGather FOR TARGET GRID LONGITUDE FOR TILE: ", tile
1444  call esmf_fieldgather(longitude_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1445  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1446  call error_handler("IN FieldGather", error)
1447  enddo
1448 
1449  if (localpet < num_tiles_target_grid) then
1450  dum2d(:,:) = real(data_one_tile(i_start:i_end, j_start:j_end),kind=4)
1451  error = nf90_put_var( ncid, id_lon, dum2d)
1452  call netcdf_err(error, 'WRITING LONGITUDE RECORD' )
1453  endif
1454 
1455 ! latitude
1456 
1457  do tile = 1, num_tiles_target_grid
1458  print*,"- CALL FieldGather FOR TARGET GRID LATITUDE FOR TILE: ", tile
1459  call esmf_fieldgather(latitude_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1460  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1461  call error_handler("IN FieldGather", error)
1462  enddo
1463 
1464  if (localpet < num_tiles_target_grid) then
1465  dum2d(:,:) = real(data_one_tile(i_start:i_end, j_start:j_end),kind=4)
1466  error = nf90_put_var( ncid, id_lat, dum2d)
1467  call netcdf_err(error, 'WRITING LATITUDE RECORD' )
1468  endif
1469 
1470 ! surface pressure
1471 
1472  do tile = 1, num_tiles_target_grid
1473  print*,"- CALL FieldGather FOR TARGET GRID SURFACE PRESSURE FOR TILE: ", tile
1474  call esmf_fieldgather(ps_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1475  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1476  call error_handler("IN FieldGather", error)
1477  enddo
1478 
1479  if (localpet < num_tiles_target_grid) then
1480  dum2d(:,:) = real(data_one_tile(i_start:i_end, j_start:j_end),kind=4)
1481  error = nf90_put_var( ncid, id_ps, dum2d)
1482  call netcdf_err(error, 'WRITING SURFACE PRESSURE RECORD' )
1483  endif
1484 
1485  deallocate(dum2d, data_one_tile)
1486 
1487 ! height
1488 
1489  if (localpet < num_tiles_target_grid) then
1490  allocate(dum3d(i_target_out,j_target_out,levp1_target))
1491  allocate(data_one_tile_3d(i_target,j_target,levp1_target))
1492  else
1493  allocate(dum3d(0,0,0))
1494  allocate(data_one_tile_3d(0,0,0))
1495  endif
1496 
1497  do tile = 1, num_tiles_target_grid
1498  print*,"- CALL FieldGather FOR TARGET GRID HEIGHT FOR TILE: ", tile
1499  call esmf_fieldgather(zh_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1500  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1501  call error_handler("IN FieldGather", error)
1502  enddo
1503 
1504  if (localpet < num_tiles_target_grid) then
1505  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1506  dum3d(:,:,1:levp1_target) = dum3d(:,:,levp1_target:1:-1)
1507  error = nf90_put_var( ncid, id_zh, dum3d)
1508  call netcdf_err(error, 'WRITING HEIGHT RECORD' )
1509  endif
1510 
1511  deallocate(dum3d, data_one_tile_3d)
1512 
1513 ! vertical velocity
1514 
1515  if (localpet < num_tiles_target_grid) then
1516  allocate(dum3d(i_target_out,j_target_out,lev_target))
1517  allocate(data_one_tile_3d(i_target,j_target,lev_target))
1518  else
1519  allocate(dum3d(0,0,0))
1520  allocate(data_one_tile_3d(0,0,0))
1521  endif
1522 
1523  do tile = 1, num_tiles_target_grid
1524  print*,"- CALL FieldGather FOR TARGET GRID VERTICAL VELOCITY FOR TILE: ", tile
1525  call esmf_fieldgather(dzdt_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1526  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1527  call error_handler("IN FieldGather", error)
1528  enddo
1529 
1530  if (localpet < num_tiles_target_grid) then
1531  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1532  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1533  print*,"MIN MAX W AT WRITE = ", minval(dum3d(:,:,:)), maxval(dum3d(:,:,:))
1534  error = nf90_put_var( ncid, id_w, dum3d)
1535  call netcdf_err(error, 'WRITING VERTICAL VELOCITY RECORD' )
1536  endif
1537 
1538 ! delp
1539 
1540  do tile = 1, num_tiles_target_grid
1541  print*,"- CALL FieldGather FOR TARGET GRID DELP FOR TILE: ", tile
1542  call esmf_fieldgather(delp_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1543  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1544  call error_handler("IN FieldGather", error)
1545  enddo
1546 
1547  if (localpet < num_tiles_target_grid) then
1548  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1549  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1550  error = nf90_put_var( ncid, id_delp, dum3d)
1551  call netcdf_err(error, 'WRITING DELP RECORD' )
1552  endif
1553 
1554 ! temperature
1555 
1556  do tile = 1, num_tiles_target_grid
1557  print*,"- CALL FieldGather FOR TARGET GRID TEMPERATURE FOR TILE: ", tile
1558  call esmf_fieldgather(temp_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1559  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1560  call error_handler("IN FieldGather", error)
1561  enddo
1562 
1563  if (localpet < num_tiles_target_grid) then
1564  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1565  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1566  error = nf90_put_var( ncid, id_t, dum3d)
1567  call netcdf_err(error, 'WRITING TEMPERTAURE RECORD' )
1568  endif
1569 
1570 ! tracers
1571 
1572  do n = 1, num_tracers
1573 
1574  do tile = 1, num_tiles_target_grid
1575  print*,"- CALL FieldGather FOR TARGET GRID TRACER ", trim(tracers(n)), " TILE: ", tile
1576  call esmf_fieldgather(tracers_target_grid(n), data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1577  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1578  call error_handler("IN FieldGather", error)
1579  enddo
1580 
1581  if (localpet < num_tiles_target_grid) then
1582  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1583  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1584  error = nf90_put_var( ncid, id_tracers(n), dum3d)
1585  call netcdf_err(error, 'WRITING TRACER RECORD' )
1586  endif
1587 
1588  enddo
1589 
1590 ! qnifa
1591 
1592  if (use_thomp_mp_climo) then
1593  do tile = 1, num_tiles_target_grid
1594  print*,"- CALL FieldGather FOR TARGET GRID QNIFA FOR TILE: ", tile
1595  call esmf_fieldgather(qnifa_climo_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1596  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1597  call error_handler("IN FieldGather", error)
1598  enddo
1599 
1600  if (localpet < num_tiles_target_grid) then
1601  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1602  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1603  error = nf90_put_var( ncid, id_qnifa, dum3d)
1604  call netcdf_err(error, 'WRITING QNIFA RECORD' )
1605  endif
1606 
1607 ! qnwfa
1608 
1609  do tile = 1, num_tiles_target_grid
1610  print*,"- CALL FieldGather FOR TARGET GRID QNWFA FOR TILE: ", tile
1611  call esmf_fieldgather(qnwfa_climo_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1612  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1613  call error_handler("IN FieldGather", error)
1614  enddo
1615 
1616  if (localpet < num_tiles_target_grid) then
1617  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:j_end,:),kind=4)
1618  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1619  error = nf90_put_var( ncid, id_qnwfa, dum3d)
1620  call netcdf_err(error, 'WRITING QNWFA RECORD' )
1621  endif
1622  endif
1623 
1624  deallocate(dum3d, data_one_tile_3d)
1625 
1626 ! lat/lon_s
1627 
1628  if (localpet < num_tiles_target_grid) then
1629  allocate(dum2d(i_target_out,jp1_target_out))
1630  allocate(data_one_tile(i_target,jp1_target))
1631  else
1632  allocate(dum2d(0,0))
1633  allocate(data_one_tile(0,0))
1634  endif
1635 
1636  do tile = 1, num_tiles_target_grid
1637  print*,"- CALL FieldGather FOR TARGET GRID LON_S FOR TILE: ", tile
1638  call esmf_fieldgather(longitude_s_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1639  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1640  call error_handler("IN FieldGather", error)
1641  enddo
1642 
1643  if (localpet < num_tiles_target_grid) then
1644  dum2d(:,:) = real(data_one_tile(i_start:i_end,j_start:jp1_end),kind=4)
1645  error = nf90_put_var( ncid, id_lon_s, dum2d)
1646  call netcdf_err(error, 'WRITING LON_S RECORD' )
1647  endif
1648 
1649  do tile = 1, num_tiles_target_grid
1650  print*,"- CALL FieldGather FOR TARGET GRID LAT_S FOR TILE: ", tile
1651  call esmf_fieldgather(latitude_s_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1652  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1653  call error_handler("IN FieldGather", error)
1654  enddo
1655 
1656  if (localpet < num_tiles_target_grid) then
1657  dum2d(:,:) = real(data_one_tile(i_start:i_end,j_start:jp1_end),kind=4)
1658  error = nf90_put_var( ncid, id_lat_s, dum2d)
1659  call netcdf_err(error, 'WRITING LAT_S RECORD' )
1660  endif
1661 
1662  deallocate(dum2d, data_one_tile)
1663 
1664 ! uwinds s
1665 
1666  if (localpet < num_tiles_target_grid) then
1667  allocate(dum3d(i_target_out,jp1_target_out,lev_target))
1668  allocate(data_one_tile_3d(i_target,jp1_target,lev_target))
1669  else
1670  allocate(dum3d(0,0,0))
1671  allocate(data_one_tile_3d(0,0,0))
1672  endif
1673 
1674  do tile = 1, num_tiles_target_grid
1675  print*,"- CALL FieldGather FOR TARGET GRID U_S FOR TILE: ", tile
1676  call esmf_fieldgather(u_s_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1677  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1678  call error_handler("IN FieldGather", error)
1679  enddo
1680 
1681  if (localpet < num_tiles_target_grid) then
1682  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:jp1_end,:),kind=4)
1683  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1684  print*,"MIN MAX US AT WRITE = ", minval(dum3d(:,:,:)), maxval(dum3d(:,:,:))
1685  error = nf90_put_var( ncid, id_u_s, dum3d)
1686  call netcdf_err(error, 'WRITING U_S RECORD' )
1687  endif
1688 
1689 ! vwinds s
1690 
1691  do tile = 1, num_tiles_target_grid
1692  print*,"- CALL FieldGather FOR TARGET GRID V_S FOR TILE: ", tile
1693  call esmf_fieldgather(v_s_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1694  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1695  call error_handler("IN FieldGather", error)
1696  enddo
1697 
1698  if (localpet < num_tiles_target_grid) then
1699  dum3d(:,:,:) = real(data_one_tile_3d(i_start:i_end,j_start:jp1_end,:),kind=4)
1700  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1701  print*,"MIN MAX VS AT WRITE = ", minval(dum3d(:,:,:)), maxval(dum3d(:,:,:))
1702  error = nf90_put_var( ncid, id_v_s, dum3d)
1703  call netcdf_err(error, 'WRITING V_S RECORD' )
1704  endif
1705 
1706  deallocate(dum3d, data_one_tile_3d)
1707 
1708 ! lat/lon_w
1709 
1710  if (localpet < num_tiles_target_grid) then
1711  allocate(dum2d(ip1_target_out,j_target_out))
1712  allocate(data_one_tile(ip1_target,j_target))
1713  else
1714  allocate(dum2d(0,0))
1715  allocate(data_one_tile(0,0))
1716  endif
1717 
1718  do tile = 1, num_tiles_target_grid
1719  print*,"- CALL FieldGather FOR TARGET GRID LON_W FOR TILE: ", tile
1720  call esmf_fieldgather(longitude_w_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1721  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1722  call error_handler("IN FieldGather", error)
1723  enddo
1724 
1725  if (localpet < num_tiles_target_grid) then
1726  dum2d(:,:) = real(data_one_tile(i_start:ip1_end,j_start:j_end),kind=4)
1727  error = nf90_put_var( ncid, id_lon_w, dum2d)
1728  call netcdf_err(error, 'WRITING LON_W RECORD' )
1729  endif
1730 
1731  do tile = 1, num_tiles_target_grid
1732  print*,"- CALL FieldGather FOR TARGET GRID LAT_W FOR TILE: ", tile
1733  call esmf_fieldgather(latitude_w_target_grid, data_one_tile, rootpet=tile-1, tile=tile, rc=error)
1734  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1735  call error_handler("IN FieldGather", error)
1736  enddo
1737 
1738  if (localpet < num_tiles_target_grid) then
1739  dum2d(:,:) = real(data_one_tile(i_start:ip1_end,j_start:j_end),kind=4)
1740  error = nf90_put_var( ncid, id_lat_w, dum2d)
1741  call netcdf_err(error, 'WRITING LAT_W RECORD' )
1742  endif
1743 
1744  deallocate(dum2d, data_one_tile)
1745 
1746 ! uwinds w
1747 
1748  if (localpet < num_tiles_target_grid) then
1749  allocate(dum3d(ip1_target_out,j_target_out,lev_target))
1750  allocate(data_one_tile_3d(ip1_target,j_target,lev_target))
1751  else
1752  allocate(dum3d(0,0,0))
1753  allocate(data_one_tile_3d(0,0,0))
1754  endif
1755 
1756  do tile = 1, num_tiles_target_grid
1757  print*,"- CALL FieldGather FOR TARGET GRID U_W FOR TILE: ", tile
1758  call esmf_fieldgather(u_w_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1759  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1760  call error_handler("IN FieldGather", error)
1761  enddo
1762 
1763  if (localpet < num_tiles_target_grid) then
1764  dum3d(:,:,:) = real(data_one_tile_3d(i_start:ip1_end,j_start:j_end,:),kind=4)
1765  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1766  print*,"MIN MAX UW AT WRITE = ", minval(dum3d(:,:,:)), maxval(dum3d(:,:,:))
1767  error = nf90_put_var( ncid, id_u_w, dum3d)
1768  call netcdf_err(error, 'WRITING U_W RECORD' )
1769  endif
1770 
1771 ! vwinds w
1772 
1773  do tile = 1, num_tiles_target_grid
1774  print*,"- CALL FieldGather FOR TARGET GRID V_W FOR TILE: ", tile
1775  call esmf_fieldgather(v_w_target_grid, data_one_tile_3d, rootpet=tile-1, tile=tile, rc=error)
1776  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1777  call error_handler("IN FieldGather", error)
1778  enddo
1779 
1780  if (localpet < num_tiles_target_grid) then
1781  dum3d(:,:,:) = real(data_one_tile_3d(i_start:ip1_end,j_start:j_end,:),kind=4)
1782  dum3d(:,:,1:lev_target) = dum3d(:,:,lev_target:1:-1)
1783  print*,"MIN MAX VW AT WRITE = ", minval(dum3d(:,:,:)), maxval(dum3d(:,:,:))
1784  error = nf90_put_var( ncid, id_v_w, dum3d)
1785  call netcdf_err(error, 'WRITING V_W RECORD' )
1786  endif
1787 
1788  deallocate(dum3d, data_one_tile_3d, id_tracers)
1789 
1790 !-------------------------------------------------------------------------------
1791 ! close file
1792 !-------------------------------------------------------------------------------
1793 
1794  if (localpet < num_tiles_target_grid) error = nf90_close(ncid)
1795 
1796  end subroutine write_fv3_atm_data_netcdf
1797 
1802  subroutine write_fv3_sfc_data_netcdf(localpet)
1803 
1804  use esmf
1805  use netcdf
1806 
1807  use model_grid, only : num_tiles_target_grid, &
1808  landmask_target_grid, &
1809  latitude_target_grid, &
1810  longitude_target_grid, &
1811  i_target, j_target, lsoil_target
1812 
1813  use program_setup, only : convert_nst, halo=>halo_bndy, &
1814  regional, lai_from_climo
1815 
1816  use surface_target_data, only : canopy_mc_target_grid, &
1817  f10m_target_grid, &
1818  ffmm_target_grid, &
1819  q2m_target_grid, &
1820  seaice_depth_target_grid, &
1821  seaice_fract_target_grid, &
1822  seaice_skin_temp_target_grid, &
1823  skin_temp_target_grid, &
1824  soil_temp_target_grid, &
1825  soilm_liq_target_grid, &
1826  soilm_tot_target_grid, &
1827  srflag_target_grid, &
1828  snow_liq_equiv_target_grid, &
1829  snow_depth_target_grid, &
1830  t2m_target_grid, &
1831  tprcp_target_grid, &
1832  ustar_target_grid, &
1833  z0_target_grid, &
1834  lai_target_grid, &
1835  c_d_target_grid, &
1836  c_0_target_grid, &
1837  d_conv_target_grid, &
1838  dt_cool_target_grid, &
1839  ifd_target_grid, &
1840  qrain_target_grid, &
1841  tref_target_grid, &
1842  w_d_target_grid, &
1843  w_0_target_grid, &
1844  xs_target_grid, &
1845  xt_target_grid, &
1846  xu_target_grid, &
1847  xv_target_grid, &
1848  xz_target_grid, &
1849  xtts_target_grid, &
1850  xzts_target_grid, &
1851  z_c_target_grid, &
1852  zm_target_grid
1853 
1854  use static_data, only : alvsf_target_grid, &
1855  alnsf_target_grid, &
1856  alvwf_target_grid, &
1857  alnwf_target_grid, &
1858  facsf_target_grid, &
1859  facwf_target_grid, &
1860  max_veg_greenness_target_grid, &
1861  min_veg_greenness_target_grid, &
1862  mxsno_albedo_target_grid, &
1863  slope_type_target_grid, &
1864  soil_type_target_grid, &
1865  substrate_temp_target_grid, &
1866  veg_greenness_target_grid, &
1867  veg_type_target_grid
1868 
1869  implicit none
1870 
1871  integer, intent(in) :: localpet
1872  character(len=128) :: outfile
1873 
1874  integer :: header_buffer_val = 16384
1875  integer :: dim_x, dim_y, dim_lsoil, dim_time
1876  integer :: error, i, ncid, tile
1877  integer :: id_x, id_y, id_lsoil
1878  integer :: id_slmsk, id_time
1879  integer :: id_lat, id_lon
1880  integer :: id_tsea, id_sheleg, id_tg3
1881  integer :: id_zorl, id_alvsf, id_alvwf
1882  integer :: id_alnsf, id_alnwf, id_vfrac
1883  integer :: id_canopy, id_f10m, id_t2m
1884  integer :: id_q2m, id_vtype, id_stype
1885  integer :: id_facsf, id_facwf, id_uustar
1886  integer :: id_ffmm, id_ffhh, id_hice
1887  integer :: id_fice, id_tisfc, id_tprcp
1888  integer :: id_srflag, id_snwdph, id_shdmin
1889  integer :: id_shdmax, id_slope, id_snoalb
1890  integer :: id_lai
1891  integer :: id_stc, id_smc, id_slc
1892  integer :: id_tref, id_z_c, id_c_0
1893  integer :: id_c_d, id_w_0, id_w_d
1894  integer :: id_xt, id_xs, id_xu, id_xv
1895  integer :: id_xz, id_zm, id_xtts, id_xzts
1896  integer :: id_d_conv, id_ifd, id_dt_cool
1897  integer :: id_qrain
1898  integer :: i_target_out, j_target_out
1899  integer :: istart, iend, jstart, jend
1900 
1901  integer(esmf_kind_i8), allocatable :: idata_one_tile(:,:)
1902 
1903  real(kind=4), allocatable :: lsoil_data(:), x_data(:), y_data(:)
1904  real(kind=8), allocatable :: dum2d(:,:), dum3d(:,:,:)
1905  real(kind=4) :: times
1906  real(esmf_kind_r8), allocatable :: data_one_tile(:,:)
1907  real(esmf_kind_r8), allocatable :: data_one_tile_3d(:,:,:)
1908 
1909 ! Remove any halo region.
1910 
1911  i_target_out = i_target-(2*halo)
1912  j_target_out = j_target-(2*halo)
1913 
1914  istart = halo + 1
1915  jstart = halo + 1
1916  iend = i_target - halo
1917  jend = j_target - halo
1918 
1919  allocate(lsoil_data(lsoil_target))
1920  do i = 1, lsoil_target
1921  lsoil_data(i) = real(float(i),kind=4)
1922  enddo
1923 
1924  allocate(x_data(i_target_out))
1925  do i = 1, i_target_out
1926  x_data(i) = real(float(i),kind=4)
1927  enddo
1928 
1929  allocate(y_data(j_target_out))
1930  do i = 1, j_target_out
1931  y_data(i) = real(float(i),kind=4)
1932  enddo
1933 
1934  if (convert_nst) then
1935  print*,'- WRITE FV3 SURFACE AND NST DATA TO NETCDF FILE'
1936  else
1937  print*,'- WRITE FV3 SURFACE DATA TO NETCDF FILE'
1938  endif
1939 
1940  if (localpet == 0) then
1941  allocate(data_one_tile(i_target,j_target))
1942  allocate(data_one_tile_3d(i_target,j_target,lsoil_target))
1943  allocate(idata_one_tile(i_target,j_target))
1944  allocate(dum2d(i_target_out,j_target_out))
1945  allocate(dum3d(i_target_out,j_target_out,lsoil_target))
1946  else
1947  allocate(data_one_tile(0,0))
1948  allocate(data_one_tile_3d(0,0,0))
1949  allocate(idata_one_tile(0,0))
1950  allocate(dum2d(0,0))
1951  allocate(dum3d(0,0,0))
1952  endif
1953 
1954  tile_loop : do tile = 1, num_tiles_target_grid
1955 
1956  local_pet : if (localpet == 0) then
1957 
1958  if (regional > 0) then
1959  outfile = "out.sfc.tile7.nc"
1960  else
1961  WRITE(outfile, '(A, I1, A)') 'out.sfc.tile', tile, '.nc'
1962  endif
1963 
1964 !--- open the file
1965  error = nf90_create(outfile, nf90_netcdf4, ncid)
1966  call netcdf_err(error, 'CREATING FILE='//trim(outfile) )
1967 
1968 !--- define dimensions
1969  error = nf90_def_dim(ncid, 'xaxis_1', i_target_out, dim_x)
1970  call netcdf_err(error, 'DEFINING XAXIS DIMENSION' )
1971  error = nf90_def_dim(ncid, 'yaxis_1', j_target_out, dim_y)
1972  call netcdf_err(error, 'DEFINING YAXIS DIMENSION' )
1973  error = nf90_def_dim(ncid, 'zaxis_1', lsoil_target, dim_lsoil)
1974  call netcdf_err(error, 'DEFINING ZAXIS DIMENSION' )
1975  error = nf90_def_dim(ncid, 'Time', 1, dim_time)
1976  call netcdf_err(error, 'DEFINING TIME DIMENSION' )
1977 
1978  !--- define fields
1979  error = nf90_def_var(ncid, 'xaxis_1', nf90_float, (/dim_x/), id_x)
1980  call netcdf_err(error, 'DEFINING XAXIS_1 FIELD' )
1981  error = nf90_put_att(ncid, id_x, "long_name", "xaxis_1")
1982  call netcdf_err(error, 'DEFINING XAXIS_1 LONG NAME' )
1983  error = nf90_put_att(ncid, id_x, "units", "none")
1984  call netcdf_err(error, 'DEFINING XAXIS_1 UNITS' )
1985  error = nf90_put_att(ncid, id_x, "cartesian_axis", "X")
1986  call netcdf_err(error, 'WRITING XAXIS_1 FIELD' )
1987 
1988  error = nf90_def_var(ncid, 'yaxis_1', nf90_float, (/dim_y/), id_y)
1989  call netcdf_err(error, 'DEFINING YAXIS_1 FIELD' )
1990  error = nf90_put_att(ncid, id_y, "long_name", "yaxis_1")
1991  call netcdf_err(error, 'DEFINING YAXIS_1 LONG NAME' )
1992  error = nf90_put_att(ncid, id_y, "units", "none")
1993  call netcdf_err(error, 'DEFINING YAXIS_1 UNITS' )
1994  error = nf90_put_att(ncid, id_y, "cartesian_axis", "Y")
1995  call netcdf_err(error, 'WRITING YAXIS_1 FIELD' )
1996 
1997  error = nf90_def_var(ncid, 'zaxis_1', nf90_float, (/dim_lsoil/), id_lsoil)
1998  call netcdf_err(error, 'DEFINING ZAXIS_1 FIELD' )
1999  error = nf90_put_att(ncid, id_lsoil, "long_name", "zaxis_1")
2000  call netcdf_err(error, 'DEFINING ZAXIS_1 LONG NAME' )
2001  error = nf90_put_att(ncid, id_lsoil, "units", "none")
2002  call netcdf_err(error, 'DEFINING ZAXIS_1 UNITS' )
2003  error = nf90_put_att(ncid, id_lsoil, "cartesian_axis", "Z")
2004  call netcdf_err(error, 'WRITING ZAXIS_1 FIELD' )
2005 
2006  error = nf90_def_var(ncid, 'Time', nf90_float, dim_time, id_time)
2007  call netcdf_err(error, 'DEFINING TIME FIELD' )
2008  error = nf90_put_att(ncid, id_time, "long_name", "Time")
2009  call netcdf_err(error, 'DEFINING TIME LONG NAME' )
2010  error = nf90_put_att(ncid, id_time, "units", "time level")
2011  call netcdf_err(error, 'DEFINING TIME UNITS' )
2012  error = nf90_put_att(ncid, id_time, "cartesian_axis", "T")
2013  call netcdf_err(error, 'WRITING TIME FIELD' )
2014 
2015  error = nf90_def_var(ncid, 'geolon', nf90_double, (/dim_x,dim_y/), id_lon)
2016  call netcdf_err(error, 'DEFINING GEOLON' )
2017  error = nf90_put_att(ncid, id_lon, "long_name", "Longitude")
2018  call netcdf_err(error, 'DEFINING GEOLON LONG NAME' )
2019  error = nf90_put_att(ncid, id_lon, "units", "degrees_east")
2020  call netcdf_err(error, 'DEFINING GEOLON UNITS' )
2021 
2022  error = nf90_def_var(ncid, 'geolat', nf90_double, (/dim_x,dim_y/), id_lat)
2023  call netcdf_err(error, 'DEFINING GEOLAT' )
2024  error = nf90_put_att(ncid, id_lat, "long_name", "Latitude")
2025  call netcdf_err(error, 'DEFINING GEOLAT LONG NAME' )
2026  error = nf90_put_att(ncid, id_lat, "units", "degrees_north")
2027  call netcdf_err(error, 'DEFINING GEOLAT UNITS' )
2028 
2029  error = nf90_def_var(ncid, 'slmsk', nf90_double, (/dim_x,dim_y,dim_time/), id_slmsk)
2030  call netcdf_err(error, 'DEFINING SLMSK' )
2031  error = nf90_put_att(ncid, id_slmsk, "long_name", "slmsk")
2032  call netcdf_err(error, 'DEFINING SLMSK LONG NAME' )
2033  error = nf90_put_att(ncid, id_slmsk, "units", "none")
2034  call netcdf_err(error, 'DEFINING SLMSK UNITS' )
2035  error = nf90_put_att(ncid, id_slmsk, "coordinates", "geolon geolat")
2036  call netcdf_err(error, 'DEFINING SLMSK COORD' )
2037 
2038  error = nf90_def_var(ncid, 'tsea', nf90_double, (/dim_x,dim_y,dim_time/), id_tsea)
2039  call netcdf_err(error, 'DEFINING TSEA' )
2040  error = nf90_put_att(ncid, id_tsea, "long_name", "tsea")
2041  call netcdf_err(error, 'DEFINING TSEA LONG NAME' )
2042  error = nf90_put_att(ncid, id_tsea, "units", "none")
2043  call netcdf_err(error, 'DEFINING TSEA UNITS' )
2044  error = nf90_put_att(ncid, id_tsea, "coordinates", "geolon geolat")
2045  call netcdf_err(error, 'DEFINING TSEA COORD' )
2046 
2047  error = nf90_def_var(ncid, 'sheleg', nf90_double, (/dim_x,dim_y,dim_time/), id_sheleg)
2048  call netcdf_err(error, 'DEFINING SHELEG' )
2049  error = nf90_put_att(ncid, id_sheleg, "long_name", "sheleg")
2050  call netcdf_err(error, 'DEFINING SHELEG LONG NAME' )
2051  error = nf90_put_att(ncid, id_sheleg, "units", "none")
2052  call netcdf_err(error, 'DEFINING SHELEG UNITS' )
2053  error = nf90_put_att(ncid, id_sheleg, "coordinates", "geolon geolat")
2054  call netcdf_err(error, 'DEFINING SHELEG COORD' )
2055 
2056  error = nf90_def_var(ncid, 'tg3', nf90_double, (/dim_x,dim_y,dim_time/), id_tg3)
2057  call netcdf_err(error, 'DEFINING TG3' )
2058  error = nf90_put_att(ncid, id_tg3, "long_name", "tg3")
2059  call netcdf_err(error, 'DEFINING TG3 LONG NAME' )
2060  error = nf90_put_att(ncid, id_tg3, "units", "none")
2061  call netcdf_err(error, 'DEFINING TG3 UNITS' )
2062  error = nf90_put_att(ncid, id_tg3, "coordinates", "geolon geolat")
2063  call netcdf_err(error, 'DEFINING TG3 COORD' )
2064 
2065  error = nf90_def_var(ncid, 'zorl', nf90_double, (/dim_x,dim_y,dim_time/), id_zorl)
2066  call netcdf_err(error, 'DEFINING ZORL' )
2067  error = nf90_put_att(ncid, id_zorl, "long_name", "zorl")
2068  call netcdf_err(error, 'DEFINING ZORL LONG NAME' )
2069  error = nf90_put_att(ncid, id_zorl, "units", "none")
2070  call netcdf_err(error, 'DEFINING ZORL UNITS' )
2071  error = nf90_put_att(ncid, id_zorl, "coordinates", "geolon geolat")
2072  call netcdf_err(error, 'DEFINING ZORL COORD' )
2073 
2074  error = nf90_def_var(ncid, 'alvsf', nf90_double, (/dim_x,dim_y,dim_time/), id_alvsf)
2075  call netcdf_err(error, 'DEFINING ALVSF' )
2076  error = nf90_put_att(ncid, id_alvsf, "long_name", "alvsf")
2077  call netcdf_err(error, 'DEFINING ALVSF LONG NAME' )
2078  error = nf90_put_att(ncid, id_alvsf, "units", "none")
2079  call netcdf_err(error, 'DEFINING ALVSF UNITS' )
2080  error = nf90_put_att(ncid, id_alvsf, "coordinates", "geolon geolat")
2081  call netcdf_err(error, 'DEFINING ALVSF COORD' )
2082 
2083  error = nf90_def_var(ncid, 'alvwf', nf90_double, (/dim_x,dim_y,dim_time/), id_alvwf)
2084  call netcdf_err(error, 'DEFINING ALVWF' )
2085  error = nf90_put_att(ncid, id_alvwf, "long_name", "alvwf")
2086  call netcdf_err(error, 'DEFINING ALVWF LONG NAME' )
2087  error = nf90_put_att(ncid, id_alvwf, "units", "none")
2088  call netcdf_err(error, 'DEFINING ALVWF UNITS' )
2089  error = nf90_put_att(ncid, id_alvwf, "coordinates", "geolon geolat")
2090  call netcdf_err(error, 'DEFINING ALVWF COORD' )
2091 
2092  error = nf90_def_var(ncid, 'alnsf', nf90_double, (/dim_x,dim_y,dim_time/), id_alnsf)
2093  call netcdf_err(error, 'DEFINING ALNSF' )
2094  error = nf90_put_att(ncid, id_alnsf, "long_name", "alnsf")
2095  call netcdf_err(error, 'DEFINING ALNSF LONG NAME' )
2096  error = nf90_put_att(ncid, id_alnsf, "units", "none")
2097  call netcdf_err(error, 'DEFINING ALNSF UNITS' )
2098  error = nf90_put_att(ncid, id_alnsf, "coordinates", "geolon geolat")
2099  call netcdf_err(error, 'DEFINING ALNSF COORD' )
2100 
2101  error = nf90_def_var(ncid, 'alnwf', nf90_double, (/dim_x,dim_y,dim_time/), id_alnwf)
2102  call netcdf_err(error, 'DEFINING ALNWF' )
2103  error = nf90_put_att(ncid, id_alnwf, "long_name", "alnwf")
2104  call netcdf_err(error, 'DEFINING ALNWF LONG NAME' )
2105  error = nf90_put_att(ncid, id_alnwf, "units", "none")
2106  call netcdf_err(error, 'DEFINING ALNWF UNITS' )
2107  error = nf90_put_att(ncid, id_alnwf, "coordinates", "geolon geolat")
2108  call netcdf_err(error, 'DEFINING ALNWF COORD' )
2109 
2110  error = nf90_def_var(ncid, 'facsf', nf90_double, (/dim_x,dim_y,dim_time/), id_facsf)
2111  call netcdf_err(error, 'DEFINING FACSF' )
2112  error = nf90_put_att(ncid, id_facsf, "long_name", "facsf")
2113  call netcdf_err(error, 'DEFINING FACSF LONG NAME' )
2114  error = nf90_put_att(ncid, id_facsf, "units", "none")
2115  call netcdf_err(error, 'DEFINING FACSF UNITS' )
2116  error = nf90_put_att(ncid, id_facsf, "coordinates", "geolon geolat")
2117  call netcdf_err(error, 'DEFINING FACSF COORD' )
2118 
2119  error = nf90_def_var(ncid, 'facwf', nf90_double, (/dim_x,dim_y,dim_time/), id_facwf)
2120  call netcdf_err(error, 'DEFINING FACWF' )
2121  error = nf90_put_att(ncid, id_facwf, "long_name", "facwf")
2122  call netcdf_err(error, 'DEFINING FACWF LONG NAME' )
2123  error = nf90_put_att(ncid, id_facwf, "units", "none")
2124  call netcdf_err(error, 'DEFINING FACWF UNITS' )
2125  error = nf90_put_att(ncid, id_facwf, "coordinates", "geolon geolat")
2126  call netcdf_err(error, 'DEFINING FACWF COORD' )
2127 
2128  error = nf90_def_var(ncid, 'vfrac', nf90_double, (/dim_x,dim_y,dim_time/), id_vfrac)
2129  call netcdf_err(error, 'DEFINING VFRAC' )
2130  error = nf90_put_att(ncid, id_vfrac, "long_name", "vfrac")
2131  call netcdf_err(error, 'DEFINING VFRAC LONG NAME' )
2132  error = nf90_put_att(ncid, id_vfrac, "units", "none")
2133  call netcdf_err(error, 'DEFINING VFRAC UNITS' )
2134  error = nf90_put_att(ncid, id_vfrac, "coordinates", "geolon geolat")
2135  call netcdf_err(error, 'DEFINING VFRAC COORD' )
2136 
2137  error = nf90_def_var(ncid, 'canopy', nf90_double, (/dim_x,dim_y,dim_time/), id_canopy)
2138  call netcdf_err(error, 'DEFINING CANOPY' )
2139  error = nf90_put_att(ncid, id_canopy, "long_name", "canopy")
2140  call netcdf_err(error, 'DEFINING CANOPY LONG NAME' )
2141  error = nf90_put_att(ncid, id_canopy, "units", "none")
2142  call netcdf_err(error, 'DEFINING CANOPY UNITS' )
2143  error = nf90_put_att(ncid, id_canopy, "coordinates", "geolon geolat")
2144  call netcdf_err(error, 'DEFINING CANOPY COORD' )
2145 
2146  error = nf90_def_var(ncid, 'f10m', nf90_double, (/dim_x,dim_y,dim_time/), id_f10m)
2147  call netcdf_err(error, 'DEFINING F10M' )
2148  error = nf90_put_att(ncid, id_f10m, "long_name", "f10m")
2149  call netcdf_err(error, 'DEFINING F10M LONG NAME' )
2150  error = nf90_put_att(ncid, id_f10m, "units", "none")
2151  call netcdf_err(error, 'DEFINING F10M UNITS' )
2152  error = nf90_put_att(ncid, id_f10m, "coordinates", "geolon geolat")
2153  call netcdf_err(error, 'DEFINING F10M COORD' )
2154 
2155  error = nf90_def_var(ncid, 't2m', nf90_double, (/dim_x,dim_y,dim_time/), id_t2m)
2156  call netcdf_err(error, 'DEFINING T2M' )
2157  error = nf90_put_att(ncid, id_t2m, "long_name", "t2m")
2158  call netcdf_err(error, 'DEFINING T2M LONG NAME' )
2159  error = nf90_put_att(ncid, id_t2m, "units", "none")
2160  call netcdf_err(error, 'DEFINING T2M UNITS' )
2161  error = nf90_put_att(ncid, id_t2m, "coordinates", "geolon geolat")
2162  call netcdf_err(error, 'DEFINING T2M COORD' )
2163 
2164  error = nf90_def_var(ncid, 'q2m', nf90_double, (/dim_x,dim_y,dim_time/), id_q2m)
2165  call netcdf_err(error, 'DEFINING Q2M' )
2166  error = nf90_put_att(ncid, id_q2m, "long_name", "q2m")
2167  call netcdf_err(error, 'DEFINING Q2M LONG NAME' )
2168  error = nf90_put_att(ncid, id_q2m, "units", "none")
2169  call netcdf_err(error, 'DEFINING Q2M UNITS' )
2170  error = nf90_put_att(ncid, id_q2m, "coordinates", "geolon geolat")
2171  call netcdf_err(error, 'DEFINING Q2M COORD' )
2172 
2173  error = nf90_def_var(ncid, 'vtype', nf90_double, (/dim_x,dim_y,dim_time/), id_vtype)
2174  call netcdf_err(error, 'DEFINING VTYPE' )
2175  error = nf90_put_att(ncid, id_vtype, "long_name", "vtype")
2176  call netcdf_err(error, 'DEFINING VTYPE LONG NAME' )
2177  error = nf90_put_att(ncid, id_vtype, "units", "none")
2178  call netcdf_err(error, 'DEFINING VTYPE UNITS' )
2179  error = nf90_put_att(ncid, id_vtype, "coordinates", "geolon geolat")
2180  call netcdf_err(error, 'DEFINING VTYPE COORD' )
2181 
2182  error = nf90_def_var(ncid, 'stype', nf90_double, (/dim_x,dim_y,dim_time/), id_stype)
2183  call netcdf_err(error, 'DEFINING STYPE' )
2184  error = nf90_put_att(ncid, id_stype, "long_name", "stype")
2185  call netcdf_err(error, 'DEFINING STYPE LONG NAME' )
2186  error = nf90_put_att(ncid, id_stype, "units", "none")
2187  call netcdf_err(error, 'DEFINING STYPE UNITS' )
2188  error = nf90_put_att(ncid, id_stype, "coordinates", "geolon geolat")
2189  call netcdf_err(error, 'DEFINING STYPE COORD' )
2190 
2191  error = nf90_def_var(ncid, 'uustar', nf90_double, (/dim_x,dim_y,dim_time/), id_uustar)
2192  call netcdf_err(error, 'DEFINING UUSTAR' )
2193  error = nf90_put_att(ncid, id_uustar, "long_name", "uustar")
2194  call netcdf_err(error, 'DEFINING UUSTAR LONG NAME' )
2195  error = nf90_put_att(ncid, id_uustar, "units", "none")
2196  call netcdf_err(error, 'DEFINING UUSTAR UNITS' )
2197  error = nf90_put_att(ncid, id_uustar, "coordinates", "geolon geolat")
2198  call netcdf_err(error, 'DEFINING UUSTAR COORD' )
2199 
2200  error = nf90_def_var(ncid, 'ffmm', nf90_double, (/dim_x,dim_y,dim_time/), id_ffmm)
2201  call netcdf_err(error, 'DEFINING FFMM' )
2202  error = nf90_put_att(ncid, id_ffmm, "long_name", "ffmm")
2203  call netcdf_err(error, 'DEFINING FFMM LONG NAME' )
2204  error = nf90_put_att(ncid, id_ffmm, "units", "none")
2205  call netcdf_err(error, 'DEFINING FFMM UNITS' )
2206  error = nf90_put_att(ncid, id_ffmm, "coordinates", "geolon geolat")
2207  call netcdf_err(error, 'DEFINING FFMM COORD' )
2208 
2209  error = nf90_def_var(ncid, 'ffhh', nf90_double, (/dim_x,dim_y,dim_time/), id_ffhh)
2210  call netcdf_err(error, 'DEFINING FFHH' )
2211  error = nf90_put_att(ncid, id_ffhh, "long_name", "ffhh")
2212  call netcdf_err(error, 'DEFINING FFHH LONG NAME' )
2213  error = nf90_put_att(ncid, id_ffhh, "units", "none")
2214  call netcdf_err(error, 'DEFINING FFHH UNITS' )
2215  error = nf90_put_att(ncid, id_ffhh, "coordinates", "geolon geolat")
2216  call netcdf_err(error, 'DEFINING FFHH COORD' )
2217 
2218  error = nf90_def_var(ncid, 'hice', nf90_double, (/dim_x,dim_y,dim_time/), id_hice)
2219  call netcdf_err(error, 'DEFINING HICE' )
2220  error = nf90_put_att(ncid, id_hice, "long_name", "hice")
2221  call netcdf_err(error, 'DEFINING HICE LONG NAME' )
2222  error = nf90_put_att(ncid, id_hice, "units", "none")
2223  call netcdf_err(error, 'DEFINING HICE UNITS' )
2224  error = nf90_put_att(ncid, id_hice, "coordinates", "geolon geolat")
2225  call netcdf_err(error, 'DEFINING HICE COORD' )
2226 
2227  error = nf90_def_var(ncid, 'fice', nf90_double, (/dim_x,dim_y,dim_time/), id_fice)
2228  call netcdf_err(error, 'DEFINING FICE' )
2229  error = nf90_put_att(ncid, id_fice, "long_name", "fice")
2230  call netcdf_err(error, 'DEFINING FICE LONG NAME' )
2231  error = nf90_put_att(ncid, id_fice, "units", "none")
2232  call netcdf_err(error, 'DEFINING FICE UNITS' )
2233  error = nf90_put_att(ncid, id_fice, "coordinates", "geolon geolat")
2234  call netcdf_err(error, 'DEFINING FICE COORD' )
2235 
2236  error = nf90_def_var(ncid, 'tisfc', nf90_double, (/dim_x,dim_y,dim_time/), id_tisfc)
2237  call netcdf_err(error, 'DEFINING TISFC' )
2238  error = nf90_put_att(ncid, id_tisfc, "long_name", "tisfc")
2239  call netcdf_err(error, 'DEFINING TISFC LONG NAME' )
2240  error = nf90_put_att(ncid, id_tisfc, "units", "none")
2241  call netcdf_err(error, 'DEFINING TISFC UNITS' )
2242  error = nf90_put_att(ncid, id_tisfc, "coordinates", "geolon geolat")
2243  call netcdf_err(error, 'DEFINING TISFC COORD' )
2244 
2245  error = nf90_def_var(ncid, 'tprcp', nf90_double, (/dim_x,dim_y,dim_time/), id_tprcp)
2246  call netcdf_err(error, 'DEFINING TPRCP' )
2247  error = nf90_put_att(ncid, id_tprcp, "long_name", "tprcp")
2248  call netcdf_err(error, 'DEFINING TPRCP LONG NAME' )
2249  error = nf90_put_att(ncid, id_tprcp, "units", "none")
2250  call netcdf_err(error, 'DEFINING TPRCP UNITS' )
2251  error = nf90_put_att(ncid, id_tprcp, "coordinates", "geolon geolat")
2252  call netcdf_err(error, 'DEFINING TPRCP COORD' )
2253 
2254  error = nf90_def_var(ncid, 'srflag', nf90_double, (/dim_x,dim_y,dim_time/), id_srflag)
2255  call netcdf_err(error, 'DEFINING SRFLAG' )
2256  error = nf90_put_att(ncid, id_srflag, "long_name", "srflag")
2257  call netcdf_err(error, 'DEFINING SRFLAG LONG NAME' )
2258  error = nf90_put_att(ncid, id_srflag, "units", "none")
2259  call netcdf_err(error, 'DEFINING SRFLAG UNITS' )
2260  error = nf90_put_att(ncid, id_srflag, "coordinates", "geolon geolat")
2261  call netcdf_err(error, 'DEFINING SRFLAG COORD' )
2262 
2263  error = nf90_def_var(ncid, 'snwdph', nf90_double, (/dim_x,dim_y,dim_time/), id_snwdph)
2264  call netcdf_err(error, 'DEFINING SNWDPH' )
2265  error = nf90_put_att(ncid, id_snwdph, "long_name", "snwdph")
2266  call netcdf_err(error, 'DEFINING SNWDPH LONG NAME' )
2267  error = nf90_put_att(ncid, id_snwdph, "units", "none")
2268  call netcdf_err(error, 'DEFINING SNWDPH UNITS' )
2269  error = nf90_put_att(ncid, id_snwdph, "coordinates", "geolon geolat")
2270  call netcdf_err(error, 'DEFINING SNWDPH COORD' )
2271 
2272  error = nf90_def_var(ncid, 'shdmin', nf90_double, (/dim_x,dim_y,dim_time/), id_shdmin)
2273  call netcdf_err(error, 'DEFINING SHDMIN' )
2274  error = nf90_put_att(ncid, id_shdmin, "long_name", "shdmin")
2275  call netcdf_err(error, 'DEFINING SHDMIN LONG NAME' )
2276  error = nf90_put_att(ncid, id_shdmin, "units", "none")
2277  call netcdf_err(error, 'DEFINING SHDMIN UNITS' )
2278  error = nf90_put_att(ncid, id_shdmin, "coordinates", "geolon geolat")
2279  call netcdf_err(error, 'DEFINING SHDMIN COORD' )
2280 
2281  error = nf90_def_var(ncid, 'shdmax', nf90_double, (/dim_x,dim_y,dim_time/), id_shdmax)
2282  call netcdf_err(error, 'DEFINING SHDMAX' )
2283  error = nf90_put_att(ncid, id_shdmax, "long_name", "shdmax")
2284  call netcdf_err(error, 'DEFINING SHDMAX LONG NAME' )
2285  error = nf90_put_att(ncid, id_shdmax, "units", "none")
2286  call netcdf_err(error, 'DEFINING SHDMAX UNITS' )
2287  error = nf90_put_att(ncid, id_shdmax, "coordinates", "geolon geolat")
2288  call netcdf_err(error, 'DEFINING SHDMAX COORD' )
2289 
2290  error = nf90_def_var(ncid, 'slope', nf90_double, (/dim_x,dim_y,dim_time/), id_slope)
2291  call netcdf_err(error, 'DEFINING SLOPE' )
2292  error = nf90_put_att(ncid, id_slope, "long_name", "slope")
2293  call netcdf_err(error, 'DEFINING SLOPE LONG NAME' )
2294  error = nf90_put_att(ncid, id_slope, "units", "none")
2295  call netcdf_err(error, 'DEFINING SLOPE UNITS' )
2296  error = nf90_put_att(ncid, id_slope, "coordinates", "geolon geolat")
2297  call netcdf_err(error, 'DEFINING SLOPE COORD' )
2298 
2299  error = nf90_def_var(ncid, 'snoalb', nf90_double, (/dim_x,dim_y,dim_time/), id_snoalb)
2300  call netcdf_err(error, 'DEFINING SNOALB' )
2301  error = nf90_put_att(ncid, id_snoalb, "long_name", "snoalb")
2302  call netcdf_err(error, 'DEFINING SNOALB LONG NAME' )
2303  error = nf90_put_att(ncid, id_snoalb, "units", "none")
2304  call netcdf_err(error, 'DEFINING SNOALB UNITS' )
2305  error = nf90_put_att(ncid, id_snoalb, "coordinates", "geolon geolat")
2306  call netcdf_err(error, 'DEFINING SNOALB COORD' )
2307 
2308  if (.not. lai_from_climo) then
2309  error = nf90_def_var(ncid, 'lai', nf90_double, (/dim_x,dim_y,dim_time/), id_lai)
2310  call netcdf_err(error, 'DEFINING LAI' )
2311  error = nf90_put_att(ncid, id_lai, "long_name", "lai")
2312  call netcdf_err(error, 'DEFINING LAI LONG NAME' )
2313  error = nf90_put_att(ncid, id_lai, "units", "none")
2314  call netcdf_err(error, 'DEFINING LAI UNITS' )
2315  error = nf90_put_att(ncid, id_lai, "coordinates", "geolon geolat")
2316  call netcdf_err(error, 'DEFINING LAI COORD' )
2317  endif
2318 
2319  error = nf90_def_var(ncid, 'stc', nf90_double, (/dim_x,dim_y,dim_lsoil,dim_time/), id_stc)
2320  call netcdf_err(error, 'DEFINING STC' )
2321  error = nf90_put_att(ncid, id_stc, "long_name", "stc")
2322  call netcdf_err(error, 'DEFINING STC LONG NAME' )
2323  error = nf90_put_att(ncid, id_stc, "units", "none")
2324  call netcdf_err(error, 'DEFINING STC UNITS' )
2325  error = nf90_put_att(ncid, id_stc, "coordinates", "geolon geolat")
2326  call netcdf_err(error, 'DEFINING STC COORD' )
2327 
2328  error = nf90_def_var(ncid, 'smc', nf90_double, (/dim_x,dim_y,dim_lsoil,dim_time/), id_smc)
2329  call netcdf_err(error, 'DEFINING SMC' )
2330  error = nf90_put_att(ncid, id_smc, "long_name", "smc")
2331  call netcdf_err(error, 'DEFINING SMC LONG NAME' )
2332  error = nf90_put_att(ncid, id_smc, "units", "none")
2333  call netcdf_err(error, 'DEFINING SMC UNITS' )
2334  error = nf90_put_att(ncid, id_smc, "coordinates", "geolon geolat")
2335  call netcdf_err(error, 'DEFINING SMC COORD' )
2336 
2337  error = nf90_def_var(ncid, 'slc', nf90_double, (/dim_x,dim_y,dim_lsoil,dim_time/), id_slc)
2338  call netcdf_err(error, 'DEFINING SLC' )
2339  error = nf90_put_att(ncid, id_slc, "long_name", "slc")
2340  call netcdf_err(error, 'DEFINING SLC LONG NAME' )
2341  error = nf90_put_att(ncid, id_slc, "units", "none")
2342  call netcdf_err(error, 'DEFINING SLC UNITS' )
2343  error = nf90_put_att(ncid, id_slc, "coordinates", "geolon geolat")
2344  call netcdf_err(error, 'DEFINING SLC COORD' )
2345 
2346  if (convert_nst) then
2347 
2348  error = nf90_def_var(ncid, 'tref', nf90_double, (/dim_x,dim_y,dim_time/), id_tref)
2349  call netcdf_err(error, 'DEFINING TREF' )
2350  error = nf90_put_att(ncid, id_tref, "long_name", "tref")
2351  call netcdf_err(error, 'DEFINING TREF LONG NAME' )
2352  error = nf90_put_att(ncid, id_tref, "units", "none")
2353  call netcdf_err(error, 'DEFINING TREF UNITS' )
2354  error = nf90_put_att(ncid, id_tref, "coordinates", "geolon geolat")
2355  call netcdf_err(error, 'DEFINING TREF COORD' )
2356 
2357  error = nf90_def_var(ncid, 'z_c', nf90_double, (/dim_x,dim_y,dim_time/), id_z_c)
2358  call netcdf_err(error, 'DEFINING Z_C' )
2359  error = nf90_put_att(ncid, id_z_c, "long_name", "z_c")
2360  call netcdf_err(error, 'DEFINING Z_C LONG NAME' )
2361  error = nf90_put_att(ncid, id_z_c, "units", "none")
2362  call netcdf_err(error, 'DEFINING Z_C UNITS' )
2363  error = nf90_put_att(ncid, id_z_c, "coordinates", "geolon geolat")
2364  call netcdf_err(error, 'DEFINING Z_C COORD' )
2365 
2366  error = nf90_def_var(ncid, 'c_0', nf90_double, (/dim_x,dim_y,dim_time/), id_c_0)
2367  call netcdf_err(error, 'DEFINING C_0' )
2368  error = nf90_put_att(ncid, id_c_0, "long_name", "c_0")
2369  call netcdf_err(error, 'DEFINING C_0 LONG NAME' )
2370  error = nf90_put_att(ncid, id_c_0, "units", "none")
2371  call netcdf_err(error, 'DEFINING C_0 UNITS' )
2372  error = nf90_put_att(ncid, id_c_0, "coordinates", "geolon geolat")
2373  call netcdf_err(error, 'DEFINING C_0 COORD' )
2374 
2375  error = nf90_def_var(ncid, 'c_d', nf90_double, (/dim_x,dim_y,dim_time/), id_c_d)
2376  call netcdf_err(error, 'DEFINING C_D' )
2377  error = nf90_put_att(ncid, id_c_d, "long_name", "c_d")
2378  call netcdf_err(error, 'DEFINING C_D LONG NAME' )
2379  error = nf90_put_att(ncid, id_c_d, "units", "none")
2380  call netcdf_err(error, 'DEFINING C_D UNITS' )
2381  error = nf90_put_att(ncid, id_c_d, "coordinates", "geolon geolat")
2382  call netcdf_err(error, 'DEFINING C_D COORD' )
2383 
2384  error = nf90_def_var(ncid, 'w_0', nf90_double, (/dim_x,dim_y,dim_time/), id_w_0)
2385  call netcdf_err(error, 'DEFINING W_0' )
2386  error = nf90_put_att(ncid, id_w_0, "long_name", "w_0")
2387  call netcdf_err(error, 'DEFINING W_0 LONG NAME' )
2388  error = nf90_put_att(ncid, id_w_0, "units", "none")
2389  call netcdf_err(error, 'DEFINING W_0 UNITS' )
2390  error = nf90_put_att(ncid, id_w_0, "coordinates", "geolon geolat")
2391  call netcdf_err(error, 'DEFINING W_0 COORD' )
2392 
2393  error = nf90_def_var(ncid, 'w_d', nf90_double, (/dim_x,dim_y,dim_time/), id_w_d)
2394  call netcdf_err(error, 'DEFINING W_D' )
2395  error = nf90_put_att(ncid, id_w_d, "long_name", "w_d")
2396  call netcdf_err(error, 'DEFINING W_D LONG NAME' )
2397  error = nf90_put_att(ncid, id_w_d, "units", "none")
2398  call netcdf_err(error, 'DEFINING W_D UNITS' )
2399  error = nf90_put_att(ncid, id_w_d, "coordinates", "geolon geolat")
2400  call netcdf_err(error, 'DEFINING W_D COORD' )
2401 
2402  error = nf90_def_var(ncid, 'xt', nf90_double, (/dim_x,dim_y,dim_time/), id_xt)
2403  call netcdf_err(error, 'DEFINING XT' )
2404  error = nf90_put_att(ncid, id_xt, "long_name", "xt")
2405  call netcdf_err(error, 'DEFINING XT LONG NAME' )
2406  error = nf90_put_att(ncid, id_xt, "units", "none")
2407  call netcdf_err(error, 'DEFINING XT UNITS' )
2408  error = nf90_put_att(ncid, id_xt, "coordinates", "geolon geolat")
2409  call netcdf_err(error, 'DEFINING XT COORD' )
2410 
2411  error = nf90_def_var(ncid, 'xs', nf90_double, (/dim_x,dim_y,dim_time/), id_xs)
2412  call netcdf_err(error, 'DEFINING XS' )
2413  error = nf90_put_att(ncid, id_xs, "long_name", "xs")
2414  call netcdf_err(error, 'DEFINING XS LONG NAME' )
2415  error = nf90_put_att(ncid, id_xs, "units", "none")
2416  call netcdf_err(error, 'DEFINING XS UNITS' )
2417  error = nf90_put_att(ncid, id_xs, "coordinates", "geolon geolat")
2418  call netcdf_err(error, 'DEFINING XS COORD' )
2419 
2420  error = nf90_def_var(ncid, 'xu', nf90_double, (/dim_x,dim_y,dim_time/), id_xu)
2421  call netcdf_err(error, 'DEFINING XU' )
2422  error = nf90_put_att(ncid, id_xu, "long_name", "xu")
2423  call netcdf_err(error, 'DEFINING XU LONG NAME' )
2424  error = nf90_put_att(ncid, id_xu, "units", "none")
2425  call netcdf_err(error, 'DEFINING XU UNITS' )
2426  error = nf90_put_att(ncid, id_xu, "coordinates", "geolon geolat")
2427  call netcdf_err(error, 'DEFINING XU COORD' )
2428 
2429  error = nf90_def_var(ncid, 'xv', nf90_double, (/dim_x,dim_y,dim_time/), id_xv)
2430  call netcdf_err(error, 'DEFINING XV' )
2431  error = nf90_put_att(ncid, id_xv, "long_name", "xv")
2432  call netcdf_err(error, 'DEFINING XV LONG NAME' )
2433  error = nf90_put_att(ncid, id_xv, "units", "none")
2434  call netcdf_err(error, 'DEFINING XV UNITS' )
2435  error = nf90_put_att(ncid, id_xv, "coordinates", "geolon geolat")
2436  call netcdf_err(error, 'DEFINING XV COORD' )
2437 
2438  error = nf90_def_var(ncid, 'xz', nf90_double, (/dim_x,dim_y,dim_time/), id_xz)
2439  call netcdf_err(error, 'DEFINING XZ' )
2440  error = nf90_put_att(ncid, id_xz, "long_name", "xz")
2441  call netcdf_err(error, 'DEFINING XZ LONG NAME' )
2442  error = nf90_put_att(ncid, id_xz, "units", "none")
2443  call netcdf_err(error, 'DEFINING XZ UNITS' )
2444  error = nf90_put_att(ncid, id_xz, "coordinates", "geolon geolat")
2445  call netcdf_err(error, 'DEFINING XZ COORD' )
2446 
2447  error = nf90_def_var(ncid, 'zm', nf90_double, (/dim_x,dim_y,dim_time/), id_zm)
2448  call netcdf_err(error, 'DEFINING ZM' )
2449  error = nf90_put_att(ncid, id_zm, "long_name", "zm")
2450  call netcdf_err(error, 'DEFINING ZM LONG NAME' )
2451  error = nf90_put_att(ncid, id_zm, "units", "none")
2452  call netcdf_err(error, 'DEFINING ZM UNITS' )
2453  error = nf90_put_att(ncid, id_zm, "coordinates", "geolon geolat")
2454  call netcdf_err(error, 'DEFINING ZM COORD' )
2455 
2456  error = nf90_def_var(ncid, 'xtts', nf90_double, (/dim_x,dim_y,dim_time/), id_xtts)
2457  call netcdf_err(error, 'DEFINING XTTS' )
2458  error = nf90_put_att(ncid, id_xtts, "long_name", "xtts")
2459  call netcdf_err(error, 'DEFINING XTTS LONG NAME' )
2460  error = nf90_put_att(ncid, id_xtts, "units", "none")
2461  call netcdf_err(error, 'DEFINING XTTS UNITS' )
2462  error = nf90_put_att(ncid, id_xtts, "coordinates", "geolon geolat")
2463  call netcdf_err(error, 'DEFINING XTTS COORD' )
2464 
2465  error = nf90_def_var(ncid, 'xzts', nf90_double, (/dim_x,dim_y,dim_time/), id_xzts)
2466  call netcdf_err(error, 'DEFINING XZTS' )
2467  error = nf90_put_att(ncid, id_xzts, "long_name", "xzts")
2468  call netcdf_err(error, 'DEFINING XZTS LONG NAME' )
2469  error = nf90_put_att(ncid, id_xzts, "units", "none")
2470  call netcdf_err(error, 'DEFINING XZTS UNITS' )
2471  error = nf90_put_att(ncid, id_xzts, "coordinates", "geolon geolat")
2472  call netcdf_err(error, 'DEFINING XZTS COORD' )
2473 
2474  error = nf90_def_var(ncid, 'd_conv', nf90_double, (/dim_x,dim_y,dim_time/), id_d_conv)
2475  call netcdf_err(error, 'DEFINING D_CONV' )
2476  error = nf90_put_att(ncid, id_d_conv, "long_name", "d_conv")
2477  call netcdf_err(error, 'DEFINING D_CONV LONG NAME' )
2478  error = nf90_put_att(ncid, id_d_conv, "units", "none")
2479  call netcdf_err(error, 'DEFINING D_CONV UNITS' )
2480  error = nf90_put_att(ncid, id_d_conv, "coordinates", "geolon geolat")
2481  call netcdf_err(error, 'DEFINING D_CONV COORD' )
2482 
2483  error = nf90_def_var(ncid, 'ifd', nf90_double, (/dim_x,dim_y,dim_time/), id_ifd)
2484  call netcdf_err(error, 'DEFINING IFD' )
2485  error = nf90_put_att(ncid, id_ifd, "long_name", "ifd")
2486  call netcdf_err(error, 'DEFINING IFD LONG NAME' )
2487  error = nf90_put_att(ncid, id_ifd, "units", "none")
2488  call netcdf_err(error, 'DEFINING IFD UNITS' )
2489  error = nf90_put_att(ncid, id_ifd, "coordinates", "geolon geolat")
2490  call netcdf_err(error, 'DEFINING IFD COORD' )
2491 
2492  error = nf90_def_var(ncid, 'dt_cool', nf90_double, (/dim_x,dim_y,dim_time/), id_dt_cool)
2493  call netcdf_err(error, 'DEFINING DT_COOL' )
2494  error = nf90_put_att(ncid, id_dt_cool, "long_name", "dt_cool")
2495  call netcdf_err(error, 'DEFINING DT_COOL LONG NAME' )
2496  error = nf90_put_att(ncid, id_dt_cool, "units", "none")
2497  call netcdf_err(error, 'DEFINING DT_COOL UNITS' )
2498  error = nf90_put_att(ncid, id_dt_cool, "coordinates", "geolon geolat")
2499  call netcdf_err(error, 'DEFINING DT_COOL COORD' )
2500 
2501  error = nf90_def_var(ncid, 'qrain', nf90_double, (/dim_x,dim_y,dim_time/), id_qrain)
2502  call netcdf_err(error, 'DEFINING QRAIN' )
2503  error = nf90_put_att(ncid, id_qrain, "long_name", "qrain")
2504  call netcdf_err(error, 'DEFINING QRAIN LONG NAME' )
2505  error = nf90_put_att(ncid, id_qrain, "units", "none")
2506  call netcdf_err(error, 'DEFINING QRAIN UNITS' )
2507  error = nf90_put_att(ncid, id_qrain, "coordinates", "geolon geolat")
2508  call netcdf_err(error, 'DEFINING QRAIN COORD' )
2509 
2510  endif ! nsst records
2511 
2512  error = nf90_enddef(ncid, header_buffer_val,4,0,4)
2513  call netcdf_err(error, 'DEFINING HEADER' )
2514 
2515  endif local_pet ! is localpet 0?
2516 
2517  if (localpet == 0) then
2518  error = nf90_put_var( ncid, id_lsoil, lsoil_data)
2519  call netcdf_err(error, 'WRITING ZAXIS RECORD' )
2520  error = nf90_put_var( ncid, id_x, x_data)
2521  call netcdf_err(error, 'WRITING XAXIS RECORD' )
2522  error = nf90_put_var( ncid, id_y, y_data)
2523  call netcdf_err(error, 'WRITING YAXIS RECORD' )
2524  times = 1.0
2525  error = nf90_put_var( ncid, id_time, times)
2526  call netcdf_err(error, 'WRITING TIME RECORD' )
2527  endif
2528 
2529  print*,"- CALL FieldGather FOR TARGET GRID LATITUDE FOR TILE: ", tile
2530  call esmf_fieldgather(latitude_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2531  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2532  call error_handler("IN FieldGather", error)
2533 
2534  if (localpet == 0) then
2535  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2536  error = nf90_put_var( ncid, id_lat, dum2d)
2537  call netcdf_err(error, 'WRITING LATITUDE RECORD' )
2538  endif
2539 
2540  print*,"- CALL FieldGather FOR TARGET GRID LONGITUDE FOR TILE: ", tile
2541  call esmf_fieldgather(longitude_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2542  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2543  call error_handler("IN FieldGather", error)
2544 
2545  if (localpet == 0) then
2546  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2547  error = nf90_put_var( ncid, id_lon, dum2d)
2548  call netcdf_err(error, 'WRITING LONGITUDE RECORD' )
2549  endif
2550 
2551  print*,"- CALL FieldGather FOR TARGET GRID SNOW LIQ EQUIV FOR TILE: ", tile
2552  call esmf_fieldgather(snow_liq_equiv_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2553  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2554  call error_handler("IN FieldGather", error)
2555 
2556  if (localpet == 0) then
2557  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2558  error = nf90_put_var( ncid, id_sheleg, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2559  call netcdf_err(error, 'WRITING SNOW LIQ EQUIV RECORD' )
2560  endif
2561 
2562  print*,"- CALL FieldGather FOR TARGET GRID SNOW DEPTH FOR TILE: ", tile
2563  call esmf_fieldgather(snow_depth_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2564  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2565  call error_handler("IN FieldGather", error)
2566 
2567  if (localpet == 0) then
2568  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2569  error = nf90_put_var( ncid, id_snwdph, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2570  call netcdf_err(error, 'WRITING SNWDPH RECORD' )
2571  endif
2572 
2573  print*,"- CALL FieldGather FOR TARGET GRID SLOPE TYPE FOR TILE: ", tile
2574  call esmf_fieldgather(slope_type_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2575  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2576  call error_handler("IN FieldGather", error)
2577 
2578  if (localpet == 0) then
2579  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2580  error = nf90_put_var( ncid, id_slope, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2581  call netcdf_err(error, 'WRITING SLOPE RECORD' )
2582  endif
2583 
2584  print*,"- CALL FieldGather FOR TARGET GRID Z0 FOR TILE: ", tile
2585  call esmf_fieldgather(z0_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2586  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2587  call error_handler("IN FieldGather", error)
2588 
2589  if (localpet == 0) then
2590  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2591  error = nf90_put_var( ncid, id_zorl, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2592  call netcdf_err(error, 'WRITING Z0 RECORD' )
2593  endif
2594 
2595  print*,"- CALL FieldGather FOR TARGET GRID MAX SNOW ALBEDO FOR TILE: ", tile
2596  call esmf_fieldgather(mxsno_albedo_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2597  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2598  call error_handler("IN FieldGather", error)
2599 
2600  if (localpet == 0) then
2601  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2602  error = nf90_put_var( ncid, id_snoalb, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2603  call netcdf_err(error, 'WRITING MAX SNOW ALBEDO RECORD' )
2604  endif
2605 
2606  if (.not. lai_from_climo) then
2607  print*,"- CALL FieldGather FOR TARGET GRID LEAF AREA INDEX FOR TILE: ", tile
2608  call esmf_fieldgather(lai_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2609  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2610  call error_handler("IN FieldGather", error)
2611 
2612  if (localpet == 0) then
2613  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2614  error = nf90_put_var( ncid, id_lai, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2615  call netcdf_err(error, 'WRITING LEAF AREA INDEX RECORD' )
2616  endif
2617  endif
2618 
2619  print*,"- CALL FieldGather FOR TARGET GRID SOIL TYPE FOR TILE: ", tile
2620  call esmf_fieldgather(soil_type_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2621  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2622  call error_handler("IN FieldGather", error)
2623 
2624  if (localpet == 0) then
2625  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2626  error = nf90_put_var( ncid, id_stype, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2627  call netcdf_err(error, 'WRITING SOIL TYPE RECORD' )
2628  endif
2629 
2630  print*,"- CALL FieldGather FOR TARGET GRID VEGETATION TYPE FOR TILE: ", tile
2631  call esmf_fieldgather(veg_type_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2632  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2633  call error_handler("IN FieldGather", error)
2634 
2635  if (localpet == 0) then
2636  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2637  error = nf90_put_var( ncid, id_vtype, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2638  call netcdf_err(error, 'WRITING VEGETATION TYPE RECORD' )
2639  endif
2640 
2641  print*,"- CALL FieldGather FOR TARGET GRID VEGETATION GREENNESS FOR TILE: ", tile
2642  call esmf_fieldgather(veg_greenness_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2643  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2644  call error_handler("IN FieldGather", error)
2645 
2646  if (localpet == 0) then
2647  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2648  error = nf90_put_var( ncid, id_vfrac, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2649  call netcdf_err(error, 'WRITING VEGETATION GREENNESS RECORD' )
2650  endif
2651 
2652  print*,"- CALL FieldGather FOR TARGET GRID SUBSTRATE TEMPERATURE FOR TILE: ", tile
2653  call esmf_fieldgather(substrate_temp_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2654  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2655  call error_handler("IN FieldGather", error)
2656 
2657  if (localpet == 0) then
2658  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2659  error = nf90_put_var( ncid, id_tg3, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2660  call netcdf_err(error, 'WRITING SUBSTRATE TEMPERATURE RECORD' )
2661  endif
2662 
2663  print*,"- CALL FieldGather FOR TARGET GRID FACSF FOR TILE: ", tile
2664  call esmf_fieldgather(facsf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2665  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2666  call error_handler("IN FieldGather", error)
2667 
2668  if (localpet == 0) then
2669  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2670  error = nf90_put_var( ncid, id_facsf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2671  call netcdf_err(error, 'WRITING FACSF RECORD' )
2672  endif
2673 
2674  print*,"- CALL FieldGather FOR TARGET GRID FACWF FOR TILE: ", tile
2675  call esmf_fieldgather(facwf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2676  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2677  call error_handler("IN FieldGather", error)
2678 
2679  if (localpet == 0) then
2680  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2681  error = nf90_put_var( ncid, id_facwf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2682  call netcdf_err(error, 'WRITING FACWF RECORD' )
2683  endif
2684 
2685  print*,"- CALL FieldGather FOR TARGET GRID ALNSF FOR TILE: ", tile
2686  call esmf_fieldgather(alnsf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2687  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2688  call error_handler("IN FieldGather", error)
2689 
2690  if (localpet == 0) then
2691  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2692  error = nf90_put_var( ncid, id_alnsf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2693  call netcdf_err(error, 'WRITING ALNSF RECORD' )
2694  endif
2695 
2696  print*,"- CALL FieldGather FOR TARGET GRID ALNWF FOR TILE: ", tile
2697  call esmf_fieldgather(alnwf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2698  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2699  call error_handler("IN FieldGather", error)
2700 
2701  if (localpet == 0) then
2702  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2703  error = nf90_put_var( ncid, id_alnwf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2704  call netcdf_err(error, 'WRITING ALNWF RECORD' )
2705  endif
2706 
2707  print*,"- CALL FieldGather FOR TARGET GRID ALVSF FOR TILE: ", tile
2708  call esmf_fieldgather(alvsf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2709  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2710  call error_handler("IN FieldGather", error)
2711 
2712  if (localpet == 0) then
2713  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2714  error = nf90_put_var( ncid, id_alvsf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2715  call netcdf_err(error, 'WRITING ALVSF RECORD' )
2716  endif
2717 
2718  print*,"- CALL FieldGather FOR TARGET GRID ALVWF FOR TILE: ", tile
2719  call esmf_fieldgather(alvwf_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2720  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2721  call error_handler("IN FieldGather", error)
2722 
2723  if (localpet == 0) then
2724  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2725  error = nf90_put_var( ncid, id_alvwf, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2726  call netcdf_err(error, 'WRITING ALVWF RECORD' )
2727  endif
2728 
2729  print*,"- CALL FieldGather FOR TARGET GRID MAX VEGETATION GREENNESS FOR TILE: ", tile
2730  call esmf_fieldgather(max_veg_greenness_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2731  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2732  call error_handler("IN FieldGather", error)
2733 
2734  if (localpet == 0) then
2735  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2736  error = nf90_put_var( ncid, id_shdmax, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2737  call netcdf_err(error, 'WRITING MAX VEGETATION GREENNESS RECORD' )
2738  endif
2739 
2740  print*,"- CALL FieldGather FOR TARGET GRID MIN VEGETATION GREENNESS FOR TILE: ", tile
2741  call esmf_fieldgather(min_veg_greenness_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2742  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2743  call error_handler("IN FieldGather", error)
2744 
2745  if (localpet == 0) then
2746  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2747  error = nf90_put_var( ncid, id_shdmin, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2748  call netcdf_err(error, 'WRITING MIN VEGETATION GREENNESS RECORD' )
2749  endif
2750 
2751  print*,"- CALL FieldGather FOR TARGET GRID T2M FOR TILE: ", tile
2752  call esmf_fieldgather(t2m_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2753  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2754  call error_handler("IN FieldGather", error)
2755 
2756  if (localpet == 0) then
2757  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2758  error = nf90_put_var( ncid, id_t2m, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2759  call netcdf_err(error, 'WRITING T2M RECORD' )
2760  endif
2761 
2762  print*,"- CALL FieldGather FOR TARGET GRID Q2M FOR TILE: ", tile
2763  call esmf_fieldgather(q2m_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2764  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2765  call error_handler("IN FieldGather", error)
2766 
2767  if (localpet == 0) then
2768  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2769  error = nf90_put_var( ncid, id_q2m, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2770  call netcdf_err(error, 'WRITING Q2M RECORD' )
2771  endif
2772 
2773  print*,"- CALL FieldGather FOR TARGET GRID TPRCP FOR TILE: ", tile
2774  call esmf_fieldgather(tprcp_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2775  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2776  call error_handler("IN FieldGather", error)
2777 
2778  if (localpet == 0) then
2779  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2780  error = nf90_put_var( ncid, id_tprcp, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2781  call netcdf_err(error, 'WRITING TPRCP RECORD' )
2782  endif
2783 
2784  print*,"- CALL FieldGather FOR TARGET GRID F10M FOR TILE: ", tile
2785  call esmf_fieldgather(f10m_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2786  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2787  call error_handler("IN FieldGather", error)
2788 
2789  if (localpet == 0) then
2790  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2791  error = nf90_put_var( ncid, id_f10m, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2792  call netcdf_err(error, 'WRITING F10M RECORD' )
2793  endif
2794 
2795  print*,"- CALL FieldGather FOR TARGET GRID FFMM FOR TILE: ", tile
2796  call esmf_fieldgather(ffmm_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2797  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2798  call error_handler("IN FieldGather", error)
2799 
2800  if (localpet == 0) then
2801  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2802  error = nf90_put_var( ncid, id_ffmm, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2803  call netcdf_err(error, 'WRITING FFMM RECORD' )
2804  dum2d = 0.0
2805  error = nf90_put_var( ncid, id_ffhh, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2806  call netcdf_err(error, 'WRITING FFHH RECORD' )
2807  endif
2808 
2809  print*,"- CALL FieldGather FOR TARGET GRID USTAR FOR TILE: ", tile
2810  call esmf_fieldgather(ustar_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2811  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2812  call error_handler("IN FieldGather", error)
2813 
2814  if (localpet == 0) then
2815  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2816  error = nf90_put_var( ncid, id_uustar, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2817  call netcdf_err(error, 'WRITING USTAR RECORD' )
2818  endif
2819 
2820  print*,"- CALL FieldGather FOR TARGET GRID SRFLAG FOR TILE: ", tile
2821  call esmf_fieldgather(srflag_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2822  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2823  call error_handler("IN FieldGather", error)
2824 
2825  if (localpet == 0) then
2826  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2827  error = nf90_put_var( ncid, id_srflag, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2828  call netcdf_err(error, 'WRITING SRFLAG RECORD' )
2829  endif
2830 
2831  print*,"- CALL FieldGather FOR TARGET GRID SEA ICE FRACTION FOR TILE: ", tile
2832  call esmf_fieldgather(seaice_fract_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2833  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2834  call error_handler("IN FieldGather", error)
2835 
2836  if (localpet == 0) then
2837  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2838  error = nf90_put_var( ncid, id_fice, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2839  call netcdf_err(error, 'WRITING FICE RECORD' )
2840  endif
2841 
2842  print*,"- CALL FieldGather FOR TARGET GRID SEA ICE DEPTH FOR TILE: ", tile
2843  call esmf_fieldgather(seaice_depth_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2844  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2845  call error_handler("IN FieldGather", error)
2846 
2847  if (localpet == 0) then
2848  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2849  error = nf90_put_var( ncid, id_hice, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2850  call netcdf_err(error, 'WRITING HICE RECORD' )
2851  endif
2852 
2853  print*,"- CALL FieldGather FOR TARGET GRID SEA ICE SKIN TEMP FOR TILE: ", tile
2854  call esmf_fieldgather(seaice_skin_temp_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2855  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2856  call error_handler("IN FieldGather", error)
2857 
2858  if (localpet == 0) then
2859  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2860  error = nf90_put_var( ncid, id_tisfc, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2861  call netcdf_err(error, 'WRITING TISFC RECORD' )
2862  endif
2863 
2864  print*,"- CALL FieldGather FOR TARGET GRID SKIN TEMP FOR TILE: ", tile
2865  call esmf_fieldgather(skin_temp_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2866  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2867  call error_handler("IN FieldGather", error)
2868 
2869  if (localpet == 0) then
2870  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2871  error = nf90_put_var( ncid, id_tsea, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2872  call netcdf_err(error, 'WRITING TSEA RECORD' )
2873  endif
2874 
2875  print*,"- CALL FieldGather FOR TARGET GRID LANDMASK FOR TILE: ", tile
2876  call esmf_fieldgather(landmask_target_grid, idata_one_tile, rootpet=0, tile=tile, rc=error)
2877  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2878  call error_handler("IN FieldGather", error)
2879 
2880  if (localpet == 0) then
2881  dum2d(:,:) = float(idata_one_tile(istart:iend, jstart:jend))
2882  error = nf90_put_var( ncid, id_slmsk, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2883  call netcdf_err(error, 'WRITING LANDMASK RECORD' )
2884  endif
2885 
2886  print*,"- CALL FieldGather FOR TARGET GRID CANOPY MOISTURE CONTENT FOR TILE: ", tile
2887  call esmf_fieldgather(canopy_mc_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2888  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2889  call error_handler("IN FieldGather", error)
2890 
2891  if (localpet == 0) then
2892  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2893  error = nf90_put_var( ncid, id_canopy, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2894  call netcdf_err(error, 'WRITING CANOPY MC RECORD' )
2895  endif
2896 
2897 ! soil temperature
2898 
2899  print*,"- CALL FieldGather FOR TARGET GRID SOIL TEMPERATURE FOR TILE: ", tile
2900  call esmf_fieldgather(soil_temp_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
2901  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2902  call error_handler("IN FieldGather", error)
2903 
2904  if (localpet == 0) then
2905  dum3d(:,:,:) = data_one_tile_3d(istart:iend, jstart:jend,:)
2906  error = nf90_put_var( ncid, id_stc, dum3d, start=(/1,1,1,1/), count=(/i_target_out,j_target_out,lsoil_target,1/))
2907  call netcdf_err(error, 'WRITING SOIL TEMP RECORD' )
2908  endif
2909 
2910 ! soil moisture (total)
2911 
2912  print*,"- CALL FieldGather FOR TARGET GRID TOTAL SOIL MOISTURE FOR TILE: ", tile
2913  call esmf_fieldgather(soilm_tot_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
2914  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2915  call error_handler("IN FieldGather", error)
2916 
2917  if (localpet == 0) then
2918  dum3d(:,:,:) = data_one_tile_3d(istart:iend, jstart:jend,:)
2919  error = nf90_put_var( ncid, id_smc, dum3d, start=(/1,1,1,1/), count=(/i_target_out,j_target_out,lsoil_target,1/))
2920  call netcdf_err(error, 'WRITING TOTAL SOIL MOISTURE RECORD' )
2921  endif
2922 
2923 ! soil moisture (liquid)
2924 
2925  print*,"- CALL FieldGather FOR TARGET GRID LIQUID SOIL MOISTURE FOR TILE: ", tile
2926  call esmf_fieldgather(soilm_liq_target_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=error)
2927  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2928  call error_handler("IN FieldGather", error)
2929 
2930  if (localpet == 0) then
2931  dum3d(:,:,:) = data_one_tile_3d(istart:iend, jstart:jend,:)
2932  error = nf90_put_var( ncid, id_slc, dum3d, start=(/1,1,1,1/), count=(/i_target_out,j_target_out,lsoil_target,1/))
2933  call netcdf_err(error, 'WRITING LIQUID SOIL MOISTURE RECORD' )
2934  endif
2935 
2936  if (convert_nst) then
2937 
2938  print*,"- CALL FieldGather FOR TARGET C_D FOR TILE: ", tile
2939  call esmf_fieldgather(c_d_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2940  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2941  call error_handler("IN FieldGather", error)
2942 
2943  if (localpet == 0) then
2944  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2945  error = nf90_put_var( ncid, id_c_d, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2946  call netcdf_err(error, 'WRITING C_D RECORD' )
2947  endif
2948 
2949  print*,"- CALL FieldGather FOR TARGET C_0 FOR TILE: ", tile
2950  call esmf_fieldgather(c_0_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2951  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2952  call error_handler("IN FieldGather", error)
2953 
2954  if (localpet == 0) then
2955  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2956  error = nf90_put_var( ncid, id_c_0, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2957  call netcdf_err(error, 'WRITING C_0 RECORD' )
2958  endif
2959 
2960  print*,"- CALL FieldGather FOR TARGET D_CONV FOR TILE: ", tile
2961  call esmf_fieldgather(d_conv_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2962  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2963  call error_handler("IN FieldGather", error)
2964 
2965  if (localpet == 0) then
2966  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2967  error = nf90_put_var( ncid, id_d_conv, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2968  call netcdf_err(error, 'WRITING D_CONV RECORD' )
2969  endif
2970 
2971  print*,"- CALL FieldGather FOR TARGET DT_COOL FOR TILE: ", tile
2972  call esmf_fieldgather(dt_cool_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2973  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2974  call error_handler("IN FieldGather", error)
2975 
2976  if (localpet == 0) then
2977  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2978  error = nf90_put_var( ncid, id_dt_cool, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2979  call netcdf_err(error, 'WRITING DT_COOL RECORD' )
2980  endif
2981 
2982  print*,"- CALL FieldGather FOR TARGET IFD FOR TILE: ", tile
2983  call esmf_fieldgather(ifd_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2984  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2985  call error_handler("IN FieldGather", error)
2986 
2987  if (localpet == 0) then
2988  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
2989  error = nf90_put_var( ncid, id_ifd, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
2990  call netcdf_err(error, 'WRITING IFD RECORD' )
2991  endif
2992 
2993  print*,"- CALL FieldGather FOR TARGET QRAIN FOR TILE: ", tile
2994  call esmf_fieldgather(qrain_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
2995  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2996  call error_handler("IN FieldGather", error)
2997 
2998  if (localpet == 0) then
2999  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3000  error = nf90_put_var( ncid, id_qrain, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3001  call netcdf_err(error, 'WRITING QRAIN RECORD' )
3002  endif
3003 
3004  print*,"- CALL FieldGather FOR TARGET TREF FOR TILE: ", tile
3005  call esmf_fieldgather(tref_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3006  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3007  call error_handler("IN FieldGather", error)
3008 
3009  if (localpet == 0) then
3010  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3011  error = nf90_put_var( ncid, id_tref, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3012  call netcdf_err(error, 'WRITING TREF RECORD' )
3013  endif
3014 
3015  print*,"- CALL FieldGather FOR TARGET W_D FOR TILE: ", tile
3016  call esmf_fieldgather(w_d_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3017  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3018  call error_handler("IN FieldGather", error)
3019 
3020  if (localpet == 0) then
3021  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3022  error = nf90_put_var( ncid, id_w_d, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3023  call netcdf_err(error, 'WRITING W_D RECORD' )
3024  endif
3025 
3026  print*,"- CALL FieldGather FOR TARGET W_0 FOR TILE: ", tile
3027  call esmf_fieldgather(w_0_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3028  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3029  call error_handler("IN FieldGather", error)
3030 
3031  if (localpet == 0) then
3032  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3033  error = nf90_put_var( ncid, id_w_0, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3034  call netcdf_err(error, 'WRITING W_0 RECORD' )
3035  endif
3036 
3037  print*,"- CALL FieldGather FOR TARGET XS FOR TILE: ", tile
3038  call esmf_fieldgather(xs_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3039  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3040  call error_handler("IN FieldGather", error)
3041 
3042  if (localpet == 0) then
3043  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3044  error = nf90_put_var( ncid, id_xs, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3045  call netcdf_err(error, 'WRITING XS RECORD' )
3046  endif
3047 
3048  print*,"- CALL FieldGather FOR TARGET XT FOR TILE: ", tile
3049  call esmf_fieldgather(xt_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3050  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3051  call error_handler("IN FieldGather", error)
3052 
3053  if (localpet == 0) then
3054  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3055  error = nf90_put_var( ncid, id_xt, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3056  call netcdf_err(error, 'WRITING XT RECORD' )
3057  endif
3058 
3059  print*,"- CALL FieldGather FOR TARGET XU FOR TILE: ", tile
3060  call esmf_fieldgather(xu_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3061  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3062  call error_handler("IN FieldGather", error)
3063 
3064  if (localpet == 0) then
3065  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3066  error = nf90_put_var( ncid, id_xu, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3067  call netcdf_err(error, 'WRITING XU RECORD' )
3068  endif
3069 
3070  print*,"- CALL FieldGather FOR TARGET XV FOR TILE: ", tile
3071  call esmf_fieldgather(xv_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3072  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3073  call error_handler("IN FieldGather", error)
3074 
3075  if (localpet == 0) then
3076  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3077  error = nf90_put_var( ncid, id_xv, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3078  call netcdf_err(error, 'WRITING XV RECORD' )
3079  endif
3080 
3081  print*,"- CALL FieldGather FOR TARGET XZ FOR TILE: ", tile
3082  call esmf_fieldgather(xz_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3083  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3084  call error_handler("IN FieldGather", error)
3085 
3086  if (localpet == 0) then
3087  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3088  error = nf90_put_var( ncid, id_xz, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3089  call netcdf_err(error, 'WRITING XZ RECORD' )
3090  endif
3091 
3092  print*,"- CALL FieldGather FOR TARGET XTTS FOR TILE: ", tile
3093  call esmf_fieldgather(xtts_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3094  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3095  call error_handler("IN FieldGather", error)
3096 
3097  if (localpet == 0) then
3098  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3099  error = nf90_put_var( ncid, id_xtts, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3100  call netcdf_err(error, 'WRITING XTTS RECORD' )
3101  endif
3102 
3103  print*,"- CALL FieldGather FOR TARGET XZTS FOR TILE: ", tile
3104  call esmf_fieldgather(xzts_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3105  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3106  call error_handler("IN FieldGather", error)
3107 
3108  if (localpet == 0) then
3109  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3110  error = nf90_put_var( ncid, id_xzts, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3111  call netcdf_err(error, 'WRITING XZTS RECORD' )
3112  endif
3113 
3114  print*,"- CALL FieldGather FOR TARGET Z_C FOR TILE: ", tile
3115  call esmf_fieldgather(z_c_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3116  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3117  call error_handler("IN FieldGather", error)
3118 
3119  if (localpet == 0) then
3120  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3121  error = nf90_put_var( ncid, id_z_c, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3122  call netcdf_err(error, 'WRITING Z_C RECORD' )
3123  endif
3124 
3125  print*,"- CALL FieldGather FOR TARGET ZM FOR TILE: ", tile
3126  call esmf_fieldgather(zm_target_grid, data_one_tile, rootpet=0, tile=tile, rc=error)
3127  if(esmf_logfounderror(rctocheck=error,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3128  call error_handler("IN FieldGather", error)
3129 
3130  if (localpet == 0) then
3131  dum2d(:,:) = data_one_tile(istart:iend, jstart:jend)
3132  error = nf90_put_var( ncid, id_zm, dum2d, start=(/1,1,1/), count=(/i_target_out,j_target_out,1/))
3133  call netcdf_err(error, 'WRITING ZM RECORD' )
3134  endif
3135 
3136  endif ! convert nst
3137 
3138 !-------------------------------------------------------------------------------
3139 ! close file
3140 !-------------------------------------------------------------------------------
3141 
3142  error = nf90_close(ncid)
3143 
3144  enddo tile_loop
3145 
3146  deallocate(lsoil_data, x_data, y_data)
3147  deallocate(data_one_tile, data_one_tile_3d, idata_one_tile, dum2d, dum3d)
3148 
3149  return
3150 
3151  end subroutine write_fv3_sfc_data_netcdf
3152 
3153  end module write_data
subroutine, public write_fv3_sfc_data_netcdf(localpet)
Writes surface and nst data into a &#39;coldstart&#39; file (netcdf).
subroutine, public write_fv3_atm_bndy_data_netcdf(localpet)
Writes atmospheric fields along the lateral boundary.
Definition: write_data.F90:99
subroutine, public write_fv3_atm_data_netcdf(localpet)
Write atmospheric coldstart files (netcdf format).
subroutine netcdf_err(err, string)
Error handler for netcdf.
Definition: utils.F90:34
Sets up the ESMF grid objects for the input data grid and target FV3 grid.
Definition: model_grid.F90:9
subroutine, public write_fv3_atm_header_netcdf(localpet)
Writes atmospheric header file in netcdf format.
Definition: write_data.F90:28
subroutine error_handler(string, rc)
General error handler.
Definition: utils.F90:12
Module to hold variables and ESMF fields associated with the target grid atmospheric data...
Module to hold ESMF fields associated with the target grid surface data.
This module contains code to read the setup namelist file, handle the varmap file for GRIB2 data...
Reads static surface climatological data for the target FV3 grid (such as soil type and vegetation ty...
Definition: static_data.F90:13