42 use utilities,
only : error_handler, &
51 integer,
public :: veg_type_landice_input = 15
54 real :: icet_default = 265.0
56 type(esmf_field),
public :: canopy_mc_input_grid
57 type(esmf_field),
public :: f10m_input_grid
58 type(esmf_field),
public :: ffmm_input_grid
60 type(esmf_field),
public :: landsea_mask_input_grid
62 type(esmf_field),
public :: q2m_input_grid
63 type(esmf_field),
public :: seaice_depth_input_grid
64 type(esmf_field),
public :: seaice_fract_input_grid
65 type(esmf_field),
public :: seaice_skin_temp_input_grid
66 type(esmf_field),
public :: skin_temp_input_grid
67 type(esmf_field),
public :: snow_depth_input_grid
68 type(esmf_field),
public :: snow_liq_equiv_input_grid
69 type(esmf_field),
public :: soil_temp_input_grid
70 type(esmf_field),
public :: soil_type_input_grid
71 type(esmf_field),
public :: soilm_liq_input_grid
72 type(esmf_field),
public :: soilm_tot_input_grid
73 type(esmf_field),
public :: srflag_input_grid
74 type(esmf_field),
public :: t2m_input_grid
75 type(esmf_field),
public :: tprcp_input_grid
76 type(esmf_field),
public :: ustar_input_grid
77 type(esmf_field),
public :: veg_type_input_grid
78 type(esmf_field),
public :: z0_input_grid
79 type(esmf_field),
public :: veg_greenness_input_grid
80 type(esmf_field),
public :: lai_input_grid
81 type(esmf_field),
public :: max_veg_greenness_input_grid
82 type(esmf_field),
public :: min_veg_greenness_input_grid
84 integer,
public :: lsoil_input=4
87 public :: read_input_sfc_data
88 public :: cleanup_input_sfc_data
89 public :: init_sfc_esmf_fields
97 subroutine read_input_sfc_data(localpet)
101 integer,
intent(in) :: localpet
103 call init_sfc_esmf_fields()
111 call read_input_sfc_restart_file(localpet)
118 "gaussian_netcdf")
then 120 call read_input_sfc_netcdf_file(localpet)
127 elseif (trim(
input_type) ==
"gaussian_nemsio")
then 129 call read_input_sfc_gaussian_nemsio_file(localpet)
135 elseif (trim(
input_type) ==
"gfs_gaussian_nemsio")
then 137 call read_input_sfc_gfs_gaussian_nemsio_file(localpet)
145 call read_input_sfc_gfs_sfcio_file(localpet)
154 call read_input_sfc_grib2_file(localpet)
158 end subroutine read_input_sfc_data
168 subroutine read_input_sfc_gfs_sfcio_file(localpet)
174 integer,
intent(in) :: localpet
176 character(len=300) :: the_file
178 integer(sfcio_intkind) :: iret
181 real(esmf_kind_r8),
allocatable :: dummy2d(:,:)
182 real(esmf_kind_r8),
allocatable :: dummy3d(:,:,:)
184 type(sfcio_head) :: sfchead
185 type(sfcio_dbta) :: sfcdata
189 print*,
"- READ SURFACE DATA IN SFCIO FORMAT." 190 print*,
"- OPEN AND READ: ",trim(the_file)
191 call sfcio_sropen(23, trim(the_file), iret)
194 call error_handler(
"OPENING FILE", rc)
197 call sfcio_srhead(23, sfchead, iret)
200 call error_handler(
"READING HEADER", rc)
203 if (localpet == 0)
then 204 call sfcio_aldbta(sfchead, sfcdata, iret)
207 call error_handler(
"ALLOCATING DATA.", rc)
209 call sfcio_srdbta(23, sfchead, sfcdata, iret)
212 call error_handler(
"READING DATA.", rc)
217 allocate(dummy2d(0,0))
218 allocate(dummy3d(0,0,0))
221 if (localpet == 0) dummy2d = sfcdata%slmsk
223 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 224 call esmf_fieldscatter(landsea_mask_input_grid, dummy2d, rootpet=0, rc=rc)
225 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
226 call error_handler(
"IN FieldScatter", rc)
228 if (localpet == 0) dummy2d = sfcdata%zorl
230 print*,
"- CALL FieldScatter FOR INPUT Z0." 231 call esmf_fieldscatter(z0_input_grid, dummy2d, rootpet=0, rc=rc)
232 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
233 call error_handler(
"IN FieldScatter", rc)
235 if (localpet == 0) dummy2d = nint(sfcdata%vtype)
237 print*,
"- CALL FieldScatter FOR INPUT VEG TYPE." 238 call esmf_fieldscatter(veg_type_input_grid, dummy2d, rootpet=0, rc=rc)
239 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
240 call error_handler(
"IN FieldScatter", rc)
243 veg_type_landice_input = 13
245 if (localpet == 0) dummy2d = sfcdata%canopy
247 print*,
"- CALL FieldScatter FOR INPUT CANOPY MC." 248 call esmf_fieldscatter(canopy_mc_input_grid, dummy2d, rootpet=0, rc=rc)
249 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
250 call error_handler(
"IN FieldScatter", rc)
252 if (localpet == 0) dummy2d = sfcdata%fice
254 print*,
"- CALL FieldScatter FOR INPUT ICE FRACTION." 255 call esmf_fieldscatter(seaice_fract_input_grid, dummy2d, rootpet=0, rc=rc)
256 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
257 call error_handler(
"IN FieldScatter", rc)
259 if (localpet == 0) dummy2d = sfcdata%hice
261 print*,
"- CALL FieldScatter FOR INPUT ICE DEPTH." 262 call esmf_fieldscatter(seaice_depth_input_grid, dummy2d, rootpet=0, rc=rc)
263 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
264 call error_handler(
"IN FieldScatter", rc)
266 if (localpet == 0) dummy2d = sfcdata%tisfc
268 print*,
"- CALL FieldScatter FOR INPUT ICE SKIN TEMP." 269 call esmf_fieldscatter(seaice_skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
270 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
271 call error_handler(
"IN FieldScatter", rc)
273 if (localpet == 0) dummy2d = sfcdata%snwdph
275 print*,
"- CALL FieldScatter FOR INPUT SNOW DEPTH." 276 call esmf_fieldscatter(snow_depth_input_grid, dummy2d, rootpet=0, rc=rc)
277 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
278 call error_handler(
"IN FieldScatter", rc)
280 if (localpet == 0) dummy2d = sfcdata%sheleg
282 print*,
"- CALL FieldScatter FOR INPUT SNOW LIQUID EQUIV." 283 call esmf_fieldscatter(snow_liq_equiv_input_grid, dummy2d, rootpet=0, rc=rc)
284 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
285 call error_handler(
"IN FieldScatter", rc)
287 if (localpet == 0) dummy2d = sfcdata%t2m
289 print*,
"- CALL FieldScatter FOR INPUT T2M." 290 call esmf_fieldscatter(t2m_input_grid, dummy2d, rootpet=0, rc=rc)
291 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
292 call error_handler(
"IN FieldScatter", rc)
294 if (localpet == 0) dummy2d = sfcdata%q2m
296 print*,
"- CALL FieldScatter FOR INPUT Q2M." 297 call esmf_fieldscatter(q2m_input_grid, dummy2d, rootpet=0, rc=rc)
298 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
299 call error_handler(
"IN FieldScatter", rc)
301 if (localpet == 0) dummy2d = sfcdata%tprcp
303 print*,
"- CALL FieldScatter FOR INPUT TPRCP." 304 call esmf_fieldscatter(tprcp_input_grid, dummy2d, rootpet=0, rc=rc)
305 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
306 call error_handler(
"IN FieldScatter", rc)
308 if (localpet == 0) dummy2d = sfcdata%f10m
310 print*,
"- CALL FieldScatter FOR INPUT F10M." 311 call esmf_fieldscatter(f10m_input_grid, dummy2d, rootpet=0, rc=rc)
312 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
313 call error_handler(
"IN FieldScatter", rc)
315 if (localpet == 0) dummy2d = sfcdata%uustar
317 print*,
"- CALL FieldScatter FOR INPUT USTAR." 318 call esmf_fieldscatter(ustar_input_grid, dummy2d, rootpet=0, rc=rc)
319 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
320 call error_handler(
"IN FieldScatter", rc)
322 if (localpet == 0) dummy2d = sfcdata%ffmm
324 print*,
"- CALL FieldScatter FOR INPUT FFMM." 325 call esmf_fieldscatter(ffmm_input_grid, dummy2d, rootpet=0, rc=rc)
326 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
327 call error_handler(
"IN FieldScatter", rc)
329 if (localpet == 0) dummy2d = sfcdata%srflag
331 print*,
"- CALL FieldScatter FOR INPUT SRFLAG." 332 call esmf_fieldscatter(srflag_input_grid, dummy2d, rootpet=0, rc=rc)
333 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
334 call error_handler(
"IN FieldScatter", rc)
336 if (localpet == 0) dummy2d = sfcdata%tsea
338 print*,
"- CALL FieldScatter FOR INPUT SKIN TEMP." 339 call esmf_fieldscatter(skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
340 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
341 call error_handler(
"IN FieldScatter", rc)
343 if (localpet == 0) dummy2d = nint(sfcdata%stype)
345 print*,
"- CALL FieldScatter FOR INPUT SOIL TYPE." 346 call esmf_fieldscatter(soil_type_input_grid, dummy2d, rootpet=0, rc=rc)
347 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
348 call error_handler(
"IN FieldScatter", rc)
350 if (localpet == 0) dummy2d = sfcdata%orog
352 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 354 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
355 call error_handler(
"IN FieldScatter", rc)
357 if (localpet == 0) dummy3d = sfcdata%slc
359 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 360 call esmf_fieldscatter(soilm_liq_input_grid, dummy3d, rootpet=0, rc=rc)
361 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
362 call error_handler(
"IN FieldScatter", rc)
364 if (localpet == 0) dummy3d = sfcdata%smc
366 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 367 call esmf_fieldscatter(soilm_tot_input_grid, dummy3d, rootpet=0, rc=rc)
368 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
369 call error_handler(
"IN FieldScatter", rc)
371 if (localpet == 0) dummy3d = sfcdata%stc
373 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 374 call esmf_fieldscatter(soil_temp_input_grid, dummy3d, rootpet=0, rc=rc)
375 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
376 call error_handler(
"IN FieldScatter", rc)
378 deallocate(dummy2d, dummy3d)
379 call sfcio_axdbta(sfcdata, iret)
381 call sfcio_sclose(23, iret)
383 end subroutine read_input_sfc_gfs_sfcio_file
394 subroutine read_input_sfc_gfs_gaussian_nemsio_file(localpet)
398 integer,
intent(in) :: localpet
400 character(len=300) :: the_file
404 real(nemsio_realkind),
allocatable :: dummy(:)
405 real(esmf_kind_r8),
allocatable :: dummy2d(:,:)
406 real(esmf_kind_r8),
allocatable :: dummy3d(:,:,:)
408 type(nemsio_gfile) :: gfile
412 if (localpet == 0)
then 416 print*,
"- OPEN FILE ", trim(the_file)
417 call nemsio_open(gfile, the_file,
"read", iret=rc)
418 if (rc /= 0)
call error_handler(
"OPENING FILE.", rc)
420 allocate(dummy3d(0,0,0))
421 allocate(dummy2d(0,0))
425 if (localpet == 0)
then 426 print*,
"- READ TERRAIN." 427 call nemsio_readrecv(gfile,
"orog",
"sfc", 1, dummy, 0, iret=rc)
428 if (rc /= 0)
call error_handler(
"READING TERRAIN.", rc)
430 print*,
'orog ',maxval(dummy2d),minval(dummy2d)
433 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 435 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
436 call error_handler(
"IN FieldScatter", rc)
438 if (localpet == 0)
then 439 print*,
"- READ LANDSEA MASK." 440 call nemsio_readrecv(gfile,
"land",
"sfc", 1, dummy, 0, iret=rc)
441 if (rc /= 0)
call error_handler(
"READING LANDSEA MASK.", rc)
443 print*,
'landmask ',maxval(dummy2d),minval(dummy2d)
446 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 447 call esmf_fieldscatter(landsea_mask_input_grid, dummy2d, rootpet=0, rc=rc)
448 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
449 call error_handler(
"IN FieldScatter", rc)
451 if (localpet == 0)
then 452 print*,
"- READ SEAICE FRACTION." 453 call nemsio_readrecv(gfile,
"icec",
"sfc", 1, dummy, 0, iret=rc)
454 if (rc /= 0)
call error_handler(
"READING SEAICE FRACTION.", rc)
456 print*,
'icec ',maxval(dummy2d),minval(dummy2d)
459 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE FRACTION." 460 call esmf_fieldscatter(seaice_fract_input_grid, dummy2d, rootpet=0, rc=rc)
461 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
462 call error_handler(
"IN FieldScatter", rc)
464 if (localpet == 0)
then 465 print*,
"- READ SEAICE DEPTH." 466 call nemsio_readrecv(gfile,
"icetk",
"sfc", 1, dummy, 0, iret=rc)
467 if (rc /= 0)
call error_handler(
"READING SEAICE DEPTH.", rc)
469 print*,
'icetk ',maxval(dummy2d),minval(dummy2d)
472 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE DEPTH." 473 call esmf_fieldscatter(seaice_depth_input_grid, dummy2d, rootpet=0, rc=rc)
474 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
475 call error_handler(
"IN FieldScatter", rc)
477 if (localpet == 0)
then 478 print*,
"- READ SEAICE SKIN TEMPERATURE." 479 call nemsio_readrecv(gfile,
"tisfc",
"sfc", 1, dummy, 0, iret=rc)
480 if (rc /= 0)
call error_handler(
"READING SEAICE SKIN TEMP.", rc)
482 print*,
'ti ',maxval(dummy2d),minval(dummy2d)
485 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE SKIN TEMPERATURE." 486 call esmf_fieldscatter(seaice_skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
487 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
488 call error_handler(
"IN FieldScatter", rc)
490 if (localpet == 0)
then 491 print*,
"- READ SNOW LIQUID EQUIVALENT." 492 call nemsio_readrecv(gfile,
"weasd",
"sfc", 1, dummy, 0, iret=rc)
493 if (rc /= 0)
call error_handler(
"READING SNOW LIQUID EQUIVALENT.", rc)
495 print*,
'weasd ',maxval(dummy2d),minval(dummy2d)
498 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW LIQUID EQUIVALENT." 499 call esmf_fieldscatter(snow_liq_equiv_input_grid, dummy2d, rootpet=0, rc=rc)
500 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
501 call error_handler(
"IN FieldScatter", rc)
503 if (localpet == 0)
then 504 print*,
"- READ SNOW DEPTH." 505 call nemsio_readrecv(gfile,
"snod",
"sfc", 1, dummy, 0, iret=rc)
506 if (rc /= 0)
call error_handler(
"READING SNOW DEPTH.", rc)
508 print*,
'snod ',maxval(dummy2d),minval(dummy2d)
511 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW DEPTH." 512 call esmf_fieldscatter(snow_depth_input_grid, dummy2d, rootpet=0, rc=rc)
513 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
514 call error_handler(
"IN FieldScatter", rc)
516 if (localpet == 0)
then 517 print*,
"- READ VEG TYPE." 518 call nemsio_readrecv(gfile,
"vtype",
"sfc", 1, dummy, 0, iret=rc)
519 if (rc /= 0)
call error_handler(
"READING VEG TYPE", rc)
521 print*,
'vtype ',maxval(dummy2d),minval(dummy2d)
524 print*,
"- CALL FieldScatter FOR INPUT GRID VEG TYPE." 525 call esmf_fieldscatter(veg_type_input_grid, dummy2d, rootpet=0, rc=rc)
526 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
527 call error_handler(
"IN FieldScatter", rc)
529 if (localpet == 0)
then 530 print*,
"- READ SOIL TYPE." 531 call nemsio_readrecv(gfile,
"sotyp",
"sfc", 1, dummy, 0, iret=rc)
532 if (rc /= 0)
call error_handler(
"READING SOIL TYPE.", rc)
534 print*,
'sotype ',maxval(dummy2d),minval(dummy2d)
537 print*,
"- CALL FieldScatter FOR INPUT GRID SOIL TYPE." 538 call esmf_fieldscatter(soil_type_input_grid, dummy2d, rootpet=0, rc=rc)
539 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
540 call error_handler(
"IN FieldScatter", rc)
542 if (localpet == 0)
then 544 call nemsio_readrecv(gfile,
"tmp",
"2 m above gnd", 1, dummy, 0, iret=rc)
545 if (rc /= 0)
call error_handler(
"READING T2M.", rc)
547 print*,
't2m ',maxval(dummy2d),minval(dummy2d)
550 print*,
"- CALL FieldScatter FOR INPUT GRID T2M." 551 call esmf_fieldscatter(t2m_input_grid, dummy2d, rootpet=0, rc=rc)
552 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
553 call error_handler(
"IN FieldScatter", rc)
555 if (localpet == 0)
then 557 call nemsio_readrecv(gfile,
"spfh",
"2 m above gnd", 1, dummy, 0, iret=rc)
558 if (rc /= 0)
call error_handler(
"READING Q2M.", rc)
560 print*,
'q2m ',maxval(dummy2d),minval(dummy2d)
563 print*,
"- CALL FieldScatter FOR INPUT GRID Q2M." 564 call esmf_fieldscatter(q2m_input_grid, dummy2d, rootpet=0, rc=rc)
565 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
566 call error_handler(
"IN FieldScatter", rc)
568 if (localpet == 0)
then 569 print*,
"- READ TPRCP." 570 call nemsio_readrecv(gfile,
"tprcp",
"sfc", 1, dummy, 0, iret=rc)
571 if (rc /= 0)
call error_handler(
"READING TPRCP.", rc)
573 print*,
'tprcp ',maxval(dummy2d),minval(dummy2d)
576 print*,
"- CALL FieldScatter FOR INPUT GRID TPRCP." 577 call esmf_fieldscatter(tprcp_input_grid, dummy2d, rootpet=0, rc=rc)
578 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
579 call error_handler(
"IN FieldScatter", rc)
581 if (localpet == 0)
then 582 print*,
"- READ FFMM." 583 call nemsio_readrecv(gfile,
"ffmm",
"sfc", 1, dummy, 0, iret=rc)
584 if (rc /= 0)
call error_handler(
"READING FFMM.", rc)
586 print*,
'ffmm ',maxval(dummy2d),minval(dummy2d)
589 print*,
"- CALL FieldScatter FOR INPUT GRID FFMM" 590 call esmf_fieldscatter(ffmm_input_grid, dummy2d, rootpet=0, rc=rc)
591 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
592 call error_handler(
"IN FieldScatter", rc)
594 if (localpet == 0)
then 595 print*,
"- READ USTAR." 596 call nemsio_readrecv(gfile,
"fricv",
"sfc", 1, dummy, 0, iret=rc)
597 if (rc /= 0)
call error_handler(
"READING USTAR.", rc)
599 print*,
'fricv ',maxval(dummy2d),minval(dummy2d)
602 print*,
"- CALL FieldScatter FOR INPUT GRID USTAR" 603 call esmf_fieldscatter(ustar_input_grid, dummy2d, rootpet=0, rc=rc)
604 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
605 call error_handler(
"IN FieldScatter", rc)
607 if (localpet == 0) dummy2d = 0.0
608 print*,
"- CALL FieldScatter FOR INPUT GRID SRFLAG" 609 call esmf_fieldscatter(srflag_input_grid, dummy2d, rootpet=0, rc=rc)
610 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
611 call error_handler(
"IN FieldScatter", rc)
613 if (localpet == 0)
then 614 print*,
"- READ SKIN TEMPERATURE." 615 call nemsio_readrecv(gfile,
"tmp",
"sfc", 1, dummy, 0, iret=rc)
616 if (rc /= 0)
call error_handler(
"READING SKIN TEMPERATURE.", rc)
618 print*,
'tmp ',maxval(dummy2d),minval(dummy2d)
621 print*,
"- CALL FieldScatter FOR INPUT GRID SKIN TEMPERATURE" 622 call esmf_fieldscatter(skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
623 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
624 call error_handler(
"IN FieldScatter", rc)
626 if (localpet == 0)
then 627 print*,
"- READ F10M." 628 call nemsio_readrecv(gfile,
"f10m",
"10 m above gnd", 1, dummy, 0, iret=rc)
629 if (rc /= 0)
call error_handler(
"READING F10M.", rc)
631 print*,
'f10m ',maxval(dummy2d),minval(dummy2d)
634 print*,
"- CALL FieldScatter FOR INPUT GRID F10M." 635 call esmf_fieldscatter(f10m_input_grid, dummy2d, rootpet=0, rc=rc)
636 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
637 call error_handler(
"IN FieldScatter", rc)
639 if (localpet == 0)
then 640 print*,
"- READ CANOPY MOISTURE CONTENT." 641 call nemsio_readrecv(gfile,
"cnwat",
"sfc", 1, dummy, 0, iret=rc)
642 if (rc /= 0)
call error_handler(
"READING CANOPY MOISTURE CONTENT.", rc)
644 print*,
'cnwat ',maxval(dummy2d),minval(dummy2d)
647 print*,
"- CALL FieldScatter FOR INPUT GRID CANOPY MOISTURE CONTENT." 648 call esmf_fieldscatter(canopy_mc_input_grid, dummy2d, rootpet=0, rc=rc)
649 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
650 call error_handler(
"IN FieldScatter", rc)
652 if (localpet == 0)
then 654 call nemsio_readrecv(gfile,
"sfcr",
"sfc", 1, dummy, 0, iret=rc)
655 if (rc /= 0)
call error_handler(
"READING Z0.", rc)
657 print*,
'sfcr ',maxval(dummy2d),minval(dummy2d)
660 print*,
"- CALL FieldScatter FOR INPUT GRID Z0." 661 call esmf_fieldscatter(z0_input_grid, dummy2d, rootpet=0, rc=rc)
662 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
663 call error_handler(
"IN FieldScatter", rc)
667 if (localpet == 0)
then 668 print*,
"- READ LIQUID SOIL MOISTURE." 669 call nemsio_readrecv(gfile,
"slc",
"soil layer", 1, dummy, 0, iret=rc)
670 if (rc /= 0)
call error_handler(
"READING LAYER 1 LIQUID SOIL MOIST.", rc)
672 call nemsio_readrecv(gfile,
"slc",
"soil layer", 2, dummy, 0, iret=rc)
673 if (rc /= 0)
call error_handler(
"READING LAYER 2 LIQUID SOIL MOIST.", rc)
675 call nemsio_readrecv(gfile,
"slc",
"soil layer", 3, dummy, 0, iret=rc)
676 if (rc /= 0)
call error_handler(
"READING LAYER 3 LIQUID SOIL MOIST.", rc)
678 call nemsio_readrecv(gfile,
"slc",
"soil layer", 4, dummy, 0, iret=rc)
679 if (rc /= 0)
call error_handler(
"READING LAYER 4 LIQUID SOIL MOIST.", rc)
681 print*,
'slc ',maxval(dummy3d),minval(dummy3d)
684 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 685 call esmf_fieldscatter(soilm_liq_input_grid, dummy3d, rootpet=0, rc=rc)
686 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
687 call error_handler(
"IN FieldScatter", rc)
689 if (localpet == 0)
then 690 print*,
"- READ TOTAL SOIL MOISTURE." 691 call nemsio_readrecv(gfile,
"smc",
"soil layer", 1, dummy, 0, iret=rc)
692 if (rc /= 0)
call error_handler(
"READING LAYER 1 TOTAL SOIL MOIST.", rc)
694 call nemsio_readrecv(gfile,
"smc",
"soil layer", 2, dummy, 0, iret=rc)
695 if (rc /= 0)
call error_handler(
"READING LAYER 2 TOTAL SOIL MOIST.", rc)
697 call nemsio_readrecv(gfile,
"smc",
"soil layer", 3, dummy, 0, iret=rc)
698 if (rc /= 0)
call error_handler(
"READING LAYER 3 TOTAL SOIL MOIST.", rc)
700 call nemsio_readrecv(gfile,
"smc",
"soil layer", 4, dummy, 0, iret=rc)
701 if (rc /= 0)
call error_handler(
"READING LAYER 4 TOTAL SOIL MOIST.", rc)
703 print*,
'smc ',maxval(dummy3d),minval(dummy3d)
706 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 707 call esmf_fieldscatter(soilm_tot_input_grid, dummy3d, rootpet=0, rc=rc)
708 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
709 call error_handler(
"IN FieldScatter", rc)
711 if (localpet == 0)
then 712 print*,
"- READ SOIL TEMPERATURE." 713 call nemsio_readrecv(gfile,
"stc",
"soil layer", 1, dummy, 0, iret=rc)
714 if (rc /= 0)
call error_handler(
"READING LAYER 1 SOIL TEMP.", rc)
716 call nemsio_readrecv(gfile,
"stc",
"soil layer", 2, dummy, 0, iret=rc)
717 if (rc /= 0)
call error_handler(
"READING LAYER 2 SOIL TEMP.", rc)
719 call nemsio_readrecv(gfile,
"stc",
"soil layer", 3, dummy, 0, iret=rc)
720 if (rc /= 0)
call error_handler(
"READING LAYER 3 SOIL TEMP.", rc)
722 call nemsio_readrecv(gfile,
"stc",
"soil layer", 4, dummy, 0, iret=rc)
723 if (rc /= 0)
call error_handler(
"READING LAYER 4 SOIL TEMP.", rc)
725 print*,
'stc ',maxval(dummy3d),minval(dummy3d)
728 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 729 call esmf_fieldscatter(soil_temp_input_grid, dummy3d, rootpet=0, rc=rc)
730 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
731 call error_handler(
"IN FieldScatter", rc)
733 deallocate(dummy3d, dummy)
735 if (localpet == 0)
call nemsio_close(gfile)
737 end subroutine read_input_sfc_gfs_gaussian_nemsio_file
745 subroutine read_input_sfc_gaussian_nemsio_file(localpet)
749 integer,
intent(in) :: localpet
751 character(len=250) :: the_file
755 real(nemsio_realkind),
allocatable :: dummy(:)
756 real(esmf_kind_r8),
allocatable :: dummy2d(:,:)
757 real(esmf_kind_r8),
allocatable :: dummy3d(:,:,:)
759 type(nemsio_gfile) :: gfile
763 if (localpet == 0)
then 767 print*,
"- OPEN FILE ", trim(the_file)
768 call nemsio_open(gfile, the_file,
"read", iret=rc)
769 if (rc /= 0)
call error_handler(
"OPENING FILE.", rc)
771 allocate(dummy3d(0,0,0))
772 allocate(dummy2d(0,0))
776 if (localpet == 0)
then 777 print*,
"- READ TERRAIN." 778 call nemsio_readrecv(gfile,
"orog",
"sfc", 1, dummy, 0, iret=rc)
779 if (rc /= 0)
call error_handler(
"READING TERRAIN.", rc)
781 print*,
'orog ',maxval(dummy2d),minval(dummy2d)
784 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 786 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
787 call error_handler(
"IN FieldScatter", rc)
789 if (localpet == 0)
then 790 print*,
"- READ LANDSEA MASK." 791 call nemsio_readrecv(gfile,
"land",
"sfc", 1, dummy, 0, iret=rc)
792 if (rc /= 0)
call error_handler(
"READING LANDSEA MASK.", rc)
794 print*,
'landmask ',maxval(dummy2d),minval(dummy2d)
797 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 798 call esmf_fieldscatter(landsea_mask_input_grid, dummy2d, rootpet=0, rc=rc)
799 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
800 call error_handler(
"IN FieldScatter", rc)
802 if (localpet == 0)
then 803 print*,
"- READ SEAICE FRACTION." 804 call nemsio_readrecv(gfile,
"icec",
"sfc", 1, dummy, 0, iret=rc)
805 if (rc /= 0)
call error_handler(
"READING SEAICE FRACTION.", rc)
807 print*,
'icec ',maxval(dummy2d),minval(dummy2d)
810 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE FRACTION." 811 call esmf_fieldscatter(seaice_fract_input_grid, dummy2d, rootpet=0, rc=rc)
812 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
813 call error_handler(
"IN FieldScatter", rc)
815 if (localpet == 0)
then 816 print*,
"- READ SEAICE DEPTH." 817 call nemsio_readrecv(gfile,
"icetk",
"sfc", 1, dummy, 0, iret=rc)
818 if (rc /= 0)
call error_handler(
"READING SEAICE DEPTH.", rc)
820 print*,
'icetk ',maxval(dummy2d),minval(dummy2d)
823 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE DEPTH." 824 call esmf_fieldscatter(seaice_depth_input_grid, dummy2d, rootpet=0, rc=rc)
825 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
826 call error_handler(
"IN FieldScatter", rc)
828 if (localpet == 0)
then 829 print*,
"- READ SEAICE SKIN TEMPERATURE." 830 call nemsio_readrecv(gfile,
"ti",
"sfc", 1, dummy, 0, iret=rc)
831 if (rc /= 0)
call error_handler(
"READING SEAICE SKIN TEMP.", rc)
833 print*,
'ti ',maxval(dummy2d),minval(dummy2d)
836 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE SKIN TEMPERATURE." 837 call esmf_fieldscatter(seaice_skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
838 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
839 call error_handler(
"IN FieldScatter", rc)
841 if (localpet == 0)
then 842 print*,
"- READ SNOW LIQUID EQUIVALENT." 843 call nemsio_readrecv(gfile,
"weasd",
"sfc", 1, dummy, 0, iret=rc)
844 if (rc /= 0)
call error_handler(
"READING SNOW LIQUID EQUIVALENT.", rc)
846 print*,
'weasd ',maxval(dummy2d),minval(dummy2d)
849 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW LIQUID EQUIVALENT." 850 call esmf_fieldscatter(snow_liq_equiv_input_grid, dummy2d, rootpet=0, rc=rc)
851 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
852 call error_handler(
"IN FieldScatter", rc)
854 if (localpet == 0)
then 855 print*,
"- READ SNOW DEPTH." 856 call nemsio_readrecv(gfile,
"snod",
"sfc", 1, dummy, 0, iret=rc)
857 if (rc /= 0)
call error_handler(
"READING SNOW DEPTH.", rc)
859 print*,
'snod ',maxval(dummy2d),minval(dummy2d)
862 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW DEPTH." 863 call esmf_fieldscatter(snow_depth_input_grid, dummy2d, rootpet=0, rc=rc)
864 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
865 call error_handler(
"IN FieldScatter", rc)
867 if (localpet == 0)
then 868 print*,
"- READ VEG TYPE." 869 call nemsio_readrecv(gfile,
"vtype",
"sfc", 1, dummy, 0, iret=rc)
870 if (rc /= 0)
call error_handler(
"READING VEG TYPE", rc)
872 print*,
'vtype ',maxval(dummy2d),minval(dummy2d)
875 print*,
"- CALL FieldScatter FOR INPUT GRID VEG TYPE." 876 call esmf_fieldscatter(veg_type_input_grid, dummy2d, rootpet=0, rc=rc)
877 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
878 call error_handler(
"IN FieldScatter", rc)
880 if (localpet == 0)
then 881 print*,
"- READ SOIL TYPE." 882 call nemsio_readrecv(gfile,
"sotyp",
"sfc", 1, dummy, 0, iret=rc)
883 if (rc /= 0)
call error_handler(
"READING SOIL TYPE.", rc)
885 print*,
'sotype ',maxval(dummy2d),minval(dummy2d)
888 print*,
"- CALL FieldScatter FOR INPUT GRID SOIL TYPE." 889 call esmf_fieldscatter(soil_type_input_grid, dummy2d, rootpet=0, rc=rc)
890 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
891 call error_handler(
"IN FieldScatter", rc)
893 if (localpet == 0)
then 895 call nemsio_readrecv(gfile,
"tmp",
"2 m above gnd", 1, dummy, 0, iret=rc)
896 if (rc /= 0)
call error_handler(
"READING T2M.", rc)
898 print*,
't2m ',maxval(dummy2d),minval(dummy2d)
901 print*,
"- CALL FieldScatter FOR INPUT GRID T2M." 902 call esmf_fieldscatter(t2m_input_grid, dummy2d, rootpet=0, rc=rc)
903 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
904 call error_handler(
"IN FieldScatter", rc)
906 if (localpet == 0)
then 908 call nemsio_readrecv(gfile,
"spfh",
"2 m above gnd", 1, dummy, 0, iret=rc)
909 if (rc /= 0)
call error_handler(
"READING Q2M.", rc)
911 print*,
'q2m ',maxval(dummy2d),minval(dummy2d)
914 print*,
"- CALL FieldScatter FOR INPUT GRID Q2M." 915 call esmf_fieldscatter(q2m_input_grid, dummy2d, rootpet=0, rc=rc)
916 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
917 call error_handler(
"IN FieldScatter", rc)
919 if (localpet == 0)
then 920 print*,
"- READ TPRCP." 921 call nemsio_readrecv(gfile,
"tprcp",
"sfc", 1, dummy, 0, iret=rc)
922 if (rc /= 0)
call error_handler(
"READING TPRCP.", rc)
924 print*,
'tprcp ',maxval(dummy2d),minval(dummy2d)
927 print*,
"- CALL FieldScatter FOR INPUT GRID TPRCP." 928 call esmf_fieldscatter(tprcp_input_grid, dummy2d, rootpet=0, rc=rc)
929 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
930 call error_handler(
"IN FieldScatter", rc)
932 if (localpet == 0)
then 933 print*,
"- READ FFMM." 934 call nemsio_readrecv(gfile,
"ffmm",
"sfc", 1, dummy, 0, iret=rc)
935 if (rc /= 0)
call error_handler(
"READING FFMM.", rc)
937 print*,
'ffmm ',maxval(dummy2d),minval(dummy2d)
940 print*,
"- CALL FieldScatter FOR INPUT GRID FFMM" 941 call esmf_fieldscatter(ffmm_input_grid, dummy2d, rootpet=0, rc=rc)
942 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
943 call error_handler(
"IN FieldScatter", rc)
945 if (localpet == 0)
then 946 print*,
"- READ USTAR." 947 call nemsio_readrecv(gfile,
"fricv",
"sfc", 1, dummy, 0, iret=rc)
948 if (rc /= 0)
call error_handler(
"READING USTAR.", rc)
950 print*,
'fricv ',maxval(dummy2d),minval(dummy2d)
953 print*,
"- CALL FieldScatter FOR INPUT GRID USTAR" 954 call esmf_fieldscatter(ustar_input_grid, dummy2d, rootpet=0, rc=rc)
955 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
956 call error_handler(
"IN FieldScatter", rc)
958 if (localpet == 0) dummy2d = 0.0
959 print*,
"- CALL FieldScatter FOR INPUT GRID SRFLAG" 960 call esmf_fieldscatter(srflag_input_grid, dummy2d, rootpet=0, rc=rc)
961 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
962 call error_handler(
"IN FieldScatter", rc)
964 if (localpet == 0)
then 965 print*,
"- READ SKIN TEMPERATURE." 966 call nemsio_readrecv(gfile,
"tmp",
"sfc", 1, dummy, 0, iret=rc)
967 if (rc /= 0)
call error_handler(
"READING SKIN TEMPERATURE.", rc)
969 print*,
'tmp ',maxval(dummy2d),minval(dummy2d)
972 print*,
"- CALL FieldScatter FOR INPUT GRID SKIN TEMPERATURE" 973 call esmf_fieldscatter(skin_temp_input_grid, dummy2d, rootpet=0, rc=rc)
974 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
975 call error_handler(
"IN FieldScatter", rc)
977 if (localpet == 0)
then 978 print*,
"- READ F10M." 979 call nemsio_readrecv(gfile,
"f10m",
"10 m above gnd", 1, dummy, 0, iret=rc)
980 if (rc /= 0)
call error_handler(
"READING F10M.", rc)
982 print*,
'f10m ',maxval(dummy2d),minval(dummy2d)
985 print*,
"- CALL FieldScatter FOR INPUT GRID F10M." 986 call esmf_fieldscatter(f10m_input_grid, dummy2d, rootpet=0, rc=rc)
987 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
988 call error_handler(
"IN FieldScatter", rc)
990 if (localpet == 0)
then 991 print*,
"- READ CANOPY MOISTURE CONTENT." 992 call nemsio_readrecv(gfile,
"cnwat",
"sfc", 1, dummy, 0, iret=rc)
993 if (rc /= 0)
call error_handler(
"READING CANOPY MOISTURE CONTENT.", rc)
995 print*,
'cnwat ',maxval(dummy2d),minval(dummy2d)
998 print*,
"- CALL FieldScatter FOR INPUT GRID CANOPY MOISTURE CONTENT." 999 call esmf_fieldscatter(canopy_mc_input_grid, dummy2d, rootpet=0, rc=rc)
1000 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1001 call error_handler(
"IN FieldScatter", rc)
1003 if (localpet == 0)
then 1005 call nemsio_readrecv(gfile,
"sfcr",
"sfc", 1, dummy, 0, iret=rc)
1006 if (rc /= 0)
call error_handler(
"READING Z0.", rc)
1008 print*,
'sfcr ',maxval(dummy2d),minval(dummy2d)
1011 print*,
"- CALL FieldScatter FOR INPUT GRID Z0." 1012 call esmf_fieldscatter(z0_input_grid, dummy2d, rootpet=0, rc=rc)
1013 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1014 call error_handler(
"IN FieldScatter", rc)
1018 if (localpet == 0)
then 1019 print*,
"- READ LIQUID SOIL MOISTURE." 1020 call nemsio_readrecv(gfile,
"soill",
"0-10 cm down", 1, dummy, 0, iret=rc)
1021 if (rc /= 0)
call error_handler(
"READING LAYER 1 LIQUID SOIL MOIST.", rc)
1023 call nemsio_readrecv(gfile,
"soill",
"10-40 cm down", 1, dummy, 0, iret=rc)
1024 if (rc /= 0)
call error_handler(
"READING LAYER 2 LIQUID SOIL MOIST.", rc)
1026 call nemsio_readrecv(gfile,
"soill",
"40-100 cm down", 1, dummy, 0, iret=rc)
1027 if (rc /= 0)
call error_handler(
"READING LAYER 3 LIQUID SOIL MOIST.", rc)
1029 call nemsio_readrecv(gfile,
"soill",
"100-200 cm down", 1, dummy, 0, iret=rc)
1030 if (rc /= 0)
call error_handler(
"READING LAYER 4 LIQUID SOIL MOIST.", rc)
1032 print*,
'soill ',maxval(dummy3d),minval(dummy3d)
1035 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 1036 call esmf_fieldscatter(soilm_liq_input_grid, dummy3d, rootpet=0, rc=rc)
1037 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1038 call error_handler(
"IN FieldScatter", rc)
1040 if (localpet == 0)
then 1041 print*,
"- READ TOTAL SOIL MOISTURE." 1042 call nemsio_readrecv(gfile,
"soilw",
"0-10 cm down", 1, dummy, 0, iret=rc)
1043 if (rc /= 0)
call error_handler(
"READING LAYER 1 TOTAL SOIL MOIST.", rc)
1045 call nemsio_readrecv(gfile,
"soilw",
"10-40 cm down", 1, dummy, 0, iret=rc)
1046 if (rc /= 0)
call error_handler(
"READING LAYER 2 TOTAL SOIL MOIST.", rc)
1048 call nemsio_readrecv(gfile,
"soilw",
"40-100 cm down", 1, dummy, 0, iret=rc)
1049 if (rc /= 0)
call error_handler(
"READING LAYER 3 TOTAL SOIL MOIST.", rc)
1051 call nemsio_readrecv(gfile,
"soilw",
"100-200 cm down", 1, dummy, 0, iret=rc)
1052 if (rc /= 0)
call error_handler(
"READING LAYER 4 TOTAL SOIL MOIST.", rc)
1054 print*,
'soilm ',maxval(dummy3d),minval(dummy3d)
1057 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 1058 call esmf_fieldscatter(soilm_tot_input_grid, dummy3d, rootpet=0, rc=rc)
1059 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1060 call error_handler(
"IN FieldScatter", rc)
1062 if (localpet == 0)
then 1063 print*,
"- READ SOIL TEMPERATURE." 1064 call nemsio_readrecv(gfile,
"tmp",
"0-10 cm down", 1, dummy, 0, iret=rc)
1065 if (rc /= 0)
call error_handler(
"READING LAYER 1 SOIL TEMP.", rc)
1067 call nemsio_readrecv(gfile,
"tmp",
"10-40 cm down", 1, dummy, 0, iret=rc)
1068 if (rc /= 0)
call error_handler(
"READING LAYER 2 SOIL TEMP.", rc)
1070 call nemsio_readrecv(gfile,
"tmp",
"40-100 cm down", 1, dummy, 0, iret=rc)
1071 if (rc /= 0)
call error_handler(
"READING LAYER 3 SOIL TEMP.", rc)
1073 call nemsio_readrecv(gfile,
"tmp",
"100-200 cm down", 1, dummy, 0, iret=rc)
1074 if (rc /= 0)
call error_handler(
"READING LAYER 4 SOIL TEMP.", rc)
1076 print*,
'soilt ',maxval(dummy3d),minval(dummy3d)
1079 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 1080 call esmf_fieldscatter(soil_temp_input_grid, dummy3d, rootpet=0, rc=rc)
1081 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1082 call error_handler(
"IN FieldScatter", rc)
1084 deallocate(dummy3d, dummy)
1086 if (localpet == 0)
call nemsio_close(gfile)
1088 end subroutine read_input_sfc_gaussian_nemsio_file
1095 subroutine read_input_sfc_restart_file(localpet)
1099 integer,
intent(in) :: localpet
1101 character(len=500) :: tilefile
1103 integer :: error, rc
1104 integer :: id_dim, idim_input, jdim_input
1105 integer :: ncid, tile, id_var
1107 real(esmf_kind_r8),
allocatable :: data_one_tile(:,:)
1108 real(esmf_kind_r8),
allocatable :: data_one_tile_3d(:,:,:)
1116 print*,
"- READ GRID DIMENSIONS FROM: ", trim(tilefile)
1117 error=nf90_open(trim(tilefile),nf90_nowrite,ncid)
1118 call netcdf_err(error,
'opening: '//trim(tilefile) )
1120 error=nf90_inq_dimid(ncid,
'xaxis_1', id_dim)
1121 call netcdf_err(error,
'reading xaxis_1 id' )
1122 error=nf90_inquire_dimension(ncid,id_dim,len=idim_input)
1123 call netcdf_err(error,
'reading xaxis_1 value' )
1125 error=nf90_inq_dimid(ncid,
'yaxis_1', id_dim)
1126 call netcdf_err(error,
'reading yaxis_1 id' )
1127 error=nf90_inquire_dimension(ncid,id_dim,len=jdim_input)
1128 call netcdf_err(error,
'reading yaxis_1 value' )
1131 call error_handler(
"DIMENSION MISMATCH BETWEEN SFC AND OROG FILES.", 1)
1134 error = nf90_close(ncid)
1136 if (localpet == 0)
then 1137 allocate(data_one_tile(idim_input,jdim_input))
1138 allocate(data_one_tile_3d(idim_input,jdim_input,lsoil_input))
1140 allocate(data_one_tile(0,0))
1141 allocate(data_one_tile_3d(0,0,0))
1146 if (localpet == 0)
then 1148 print*,
'- OPEN OROGRAPHY FILE: ', trim(tilefile)
1149 error=nf90_open(tilefile,nf90_nowrite,ncid)
1150 call netcdf_err(error,
'OPENING OROGRAPHY FILE' )
1151 error=nf90_inq_varid(ncid,
'orog_raw', id_var)
1152 call netcdf_err(error,
'READING OROG RECORD ID' )
1153 error=nf90_get_var(ncid, id_var, data_one_tile)
1154 call netcdf_err(error,
'READING OROG RECORD' )
1155 print*,
'terrain check ',tile, maxval(data_one_tile)
1156 error=nf90_close(ncid)
1159 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 1160 call esmf_fieldscatter(
terrain_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1161 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1162 call error_handler(
"IN FieldScatter", rc)
1170 if (localpet == 0)
then 1171 call read_fv3_grid_data_netcdf(
'slc', tile, idim_input, jdim_input, &
1172 lsoil_input, sfcdata_3d=data_one_tile_3d)
1175 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 1176 call esmf_fieldscatter(soilm_liq_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1177 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1178 call error_handler(
"IN FieldScatter", rc)
1180 if (localpet == 0)
then 1181 call read_fv3_grid_data_netcdf(
'smc', tile, idim_input, jdim_input, &
1182 lsoil_input, sfcdata_3d=data_one_tile_3d)
1185 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 1186 call esmf_fieldscatter(soilm_tot_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1187 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1188 call error_handler(
"IN FieldScatter", rc)
1190 if (localpet == 0)
then 1191 call read_fv3_grid_data_netcdf(
'stc', tile, idim_input, jdim_input, &
1192 lsoil_input, sfcdata_3d=data_one_tile_3d)
1195 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 1196 call esmf_fieldscatter(soil_temp_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1197 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1198 call error_handler(
"IN FieldScatter", rc)
1202 if (localpet == 0)
then 1203 call read_fv3_grid_data_netcdf(
'slmsk', tile, idim_input, jdim_input, &
1204 lsoil_input, sfcdata=data_one_tile)
1207 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 1208 call esmf_fieldscatter(landsea_mask_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1209 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1210 call error_handler(
"IN FieldScatter", rc)
1214 if (localpet == 0)
then 1215 call read_fv3_grid_data_netcdf(
'fice', tile, idim_input, jdim_input, &
1216 lsoil_input, sfcdata=data_one_tile)
1219 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE FRACTION." 1220 call esmf_fieldscatter(seaice_fract_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1221 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1222 call error_handler(
"IN FieldScatter", rc)
1226 if (localpet == 0)
then 1227 call read_fv3_grid_data_netcdf(
'hice', tile, idim_input, jdim_input, &
1228 lsoil_input, sfcdata=data_one_tile)
1231 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE DEPTH." 1232 call esmf_fieldscatter(seaice_depth_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1233 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1234 call error_handler(
"IN FieldScatter", rc)
1238 if (localpet == 0)
then 1239 call read_fv3_grid_data_netcdf(
'tisfc', tile, idim_input, jdim_input, &
1240 lsoil_input, sfcdata=data_one_tile)
1243 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE SKIN TEMPERATURE." 1244 call esmf_fieldscatter(seaice_skin_temp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1245 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1246 call error_handler(
"IN FieldScatter", rc)
1250 if (localpet == 0)
then 1251 call read_fv3_grid_data_netcdf(
'sheleg', tile, idim_input, jdim_input, &
1252 lsoil_input, sfcdata=data_one_tile)
1255 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW LIQUID EQUIVALENT." 1256 call esmf_fieldscatter(snow_liq_equiv_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1257 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1258 call error_handler(
"IN FieldScatter", rc)
1262 if (localpet == 0)
then 1263 call read_fv3_grid_data_netcdf(
'snwdph', tile, idim_input, jdim_input, &
1264 lsoil_input, sfcdata=data_one_tile)
1265 data_one_tile = data_one_tile
1268 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW DEPTH." 1269 call esmf_fieldscatter(snow_depth_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1270 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1271 call error_handler(
"IN FieldScatter", rc)
1275 if (localpet == 0)
then 1276 call read_fv3_grid_data_netcdf(
'vtype', tile, idim_input, jdim_input, &
1277 lsoil_input, sfcdata=data_one_tile)
1280 print*,
"- CALL FieldScatter FOR INPUT GRID VEG TYPE." 1281 call esmf_fieldscatter(veg_type_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1282 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1283 call error_handler(
"IN FieldScatter", rc)
1287 if (localpet == 0)
then 1288 call read_fv3_grid_data_netcdf(
'stype', tile, idim_input, jdim_input, &
1289 lsoil_input, sfcdata=data_one_tile)
1292 print*,
"- CALL FieldScatter FOR INPUT GRID SOIL TYPE." 1293 call esmf_fieldscatter(soil_type_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1294 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1295 call error_handler(
"IN FieldScatter", rc)
1299 if (localpet == 0)
then 1300 call read_fv3_grid_data_netcdf(
't2m', tile, idim_input, jdim_input, &
1301 lsoil_input, sfcdata=data_one_tile)
1304 print*,
"- CALL FieldScatter FOR INPUT GRID T2M." 1305 call esmf_fieldscatter(t2m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1306 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1307 call error_handler(
"IN FieldScatter", rc)
1311 if (localpet == 0)
then 1312 call read_fv3_grid_data_netcdf(
'q2m', tile, idim_input, jdim_input, &
1313 lsoil_input, sfcdata=data_one_tile)
1316 print*,
"- CALL FieldScatter FOR INPUT GRID Q2M." 1317 call esmf_fieldscatter(q2m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1318 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1319 call error_handler(
"IN FieldScatter", rc)
1321 if (localpet == 0)
then 1322 call read_fv3_grid_data_netcdf(
'tprcp', tile, idim_input, jdim_input, &
1323 lsoil_input, sfcdata=data_one_tile)
1326 print*,
"- CALL FieldScatter FOR INPUT GRID TPRCP." 1327 call esmf_fieldscatter(tprcp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1328 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1329 call error_handler(
"IN FieldScatter", rc)
1331 if (localpet == 0)
then 1332 call read_fv3_grid_data_netcdf(
'f10m', tile, idim_input, jdim_input, &
1333 lsoil_input, sfcdata=data_one_tile)
1336 print*,
"- CALL FieldScatter FOR INPUT GRID F10M" 1337 call esmf_fieldscatter(f10m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1338 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1339 call error_handler(
"IN FieldScatter", rc)
1341 if (localpet == 0)
then 1342 call read_fv3_grid_data_netcdf(
'ffmm', tile, idim_input, jdim_input, &
1343 lsoil_input, sfcdata=data_one_tile)
1346 print*,
"- CALL FieldScatter FOR INPUT GRID FFMM" 1347 call esmf_fieldscatter(ffmm_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1348 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1349 call error_handler(
"IN FieldScatter", rc)
1351 if (localpet == 0)
then 1352 call read_fv3_grid_data_netcdf(
'uustar', tile, idim_input, jdim_input, &
1353 lsoil_input, sfcdata=data_one_tile)
1356 print*,
"- CALL FieldScatter FOR INPUT GRID USTAR" 1357 call esmf_fieldscatter(ustar_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1358 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1359 call error_handler(
"IN FieldScatter", rc)
1361 if (localpet == 0)
then 1362 call read_fv3_grid_data_netcdf(
'srflag', tile, idim_input, jdim_input, &
1363 lsoil_input, sfcdata=data_one_tile)
1366 print*,
"- CALL FieldScatter FOR INPUT GRID SRFLAG" 1367 call esmf_fieldscatter(srflag_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1368 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1369 call error_handler(
"IN FieldScatter", rc)
1371 if (localpet == 0)
then 1372 call read_fv3_grid_data_netcdf(
'tsea', tile, idim_input, jdim_input, &
1373 lsoil_input, sfcdata=data_one_tile)
1376 print*,
"- CALL FieldScatter FOR INPUT GRID SKIN TEMPERATURE" 1377 call esmf_fieldscatter(skin_temp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1378 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1379 call error_handler(
"IN FieldScatter", rc)
1381 if (localpet == 0)
then 1382 call read_fv3_grid_data_netcdf(
'canopy', tile, idim_input, jdim_input, &
1383 lsoil_input, sfcdata=data_one_tile)
1386 print*,
"- CALL FieldScatter FOR INPUT GRID CANOPY MOISTURE CONTENT." 1387 call esmf_fieldscatter(canopy_mc_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1388 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1389 call error_handler(
"IN FieldScatter", rc)
1391 if (localpet == 0)
then 1392 call read_fv3_grid_data_netcdf(
'zorl', tile, idim_input, jdim_input, &
1393 lsoil_input, sfcdata=data_one_tile)
1396 print*,
"- CALL FieldScatter FOR INPUT GRID Z0." 1397 call esmf_fieldscatter(z0_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1398 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1399 call error_handler(
"IN FieldScatter", rc)
1403 deallocate(data_one_tile, data_one_tile_3d)
1405 end subroutine read_input_sfc_restart_file
1412 subroutine read_input_sfc_netcdf_file(localpet)
1416 integer,
intent(in) :: localpet
1418 character(len=500) :: tilefile
1420 integer :: error, id_var
1421 integer :: id_dim, idim_input, jdim_input
1422 integer :: ncid, rc, tile
1424 real(esmf_kind_r8),
allocatable :: data_one_tile(:,:)
1425 real(esmf_kind_r8),
allocatable :: data_one_tile_3d(:,:,:)
1433 print*,
"- READ GRID DIMENSIONS FROM: ", trim(tilefile)
1434 error=nf90_open(trim(tilefile),nf90_nowrite,ncid)
1435 call netcdf_err(error,
'opening: '//trim(tilefile) )
1437 error=nf90_inq_dimid(ncid,
'grid_xt', id_dim)
1438 call netcdf_err(error,
'reading grid_xt id' )
1439 error=nf90_inquire_dimension(ncid,id_dim,len=idim_input)
1440 call netcdf_err(error,
'reading grid_xt value' )
1442 error=nf90_inq_dimid(ncid,
'grid_yt', id_dim)
1443 call netcdf_err(error,
'reading grid_yt id' )
1444 error=nf90_inquire_dimension(ncid,id_dim,len=jdim_input)
1445 call netcdf_err(error,
'reading grid_yt value' )
1448 call error_handler(
"DIMENSION MISMATCH BETWEEN SFC AND OROG FILES.", 3)
1451 error = nf90_close(ncid)
1453 if (localpet == 0)
then 1454 allocate(data_one_tile(idim_input,jdim_input))
1455 allocate(data_one_tile_3d(idim_input,jdim_input,lsoil_input))
1457 allocate(data_one_tile(0,0))
1458 allocate(data_one_tile_3d(0,0,0))
1463 if (trim(
input_type) ==
"gaussian_netcdf")
then 1464 if (localpet == 0)
then 1465 call read_fv3_grid_data_netcdf(
'orog', tile, idim_input, jdim_input, &
1466 lsoil_input, sfcdata=data_one_tile)
1471 if (localpet == 0)
then 1473 print*,
'- OPEN OROGRAPHY FILE: ', trim(tilefile)
1474 error=nf90_open(tilefile,nf90_nowrite,ncid)
1475 call netcdf_err(error,
'OPENING OROGRAPHY FILE.' )
1476 error=nf90_inq_varid(ncid,
'orog_raw', id_var)
1477 call netcdf_err(error,
'READING OROGRAPHY RECORD ID.' )
1478 error=nf90_get_var(ncid, id_var, data_one_tile)
1479 call netcdf_err(error,
'READING OROGRAPHY RECORD.' )
1480 print*,
'terrain check history ',tile, maxval(data_one_tile)
1481 error=nf90_close(ncid)
1486 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 1487 call esmf_fieldscatter(
terrain_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1488 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1489 call error_handler(
"IN FieldScatter", rc)
1497 if (localpet == 0)
then 1498 call read_fv3_grid_data_netcdf(
'soill1', tile, idim_input, jdim_input, &
1499 lsoil_input, sfcdata=data_one_tile)
1500 data_one_tile_3d(:,:,1) = data_one_tile
1501 call read_fv3_grid_data_netcdf(
'soill2', tile, idim_input, jdim_input, &
1502 lsoil_input, sfcdata=data_one_tile)
1503 data_one_tile_3d(:,:,2) = data_one_tile
1504 call read_fv3_grid_data_netcdf(
'soill3', tile, idim_input, jdim_input, &
1505 lsoil_input, sfcdata=data_one_tile)
1506 data_one_tile_3d(:,:,3) = data_one_tile
1507 call read_fv3_grid_data_netcdf(
'soill4', tile, idim_input, jdim_input, &
1508 lsoil_input, sfcdata=data_one_tile)
1509 data_one_tile_3d(:,:,4) = data_one_tile
1512 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 1513 call esmf_fieldscatter(soilm_liq_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1514 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1515 call error_handler(
"IN FieldScatter", rc)
1519 if (localpet == 0)
then 1520 call read_fv3_grid_data_netcdf(
'soilw1', tile, idim_input, jdim_input, &
1521 lsoil_input, sfcdata=data_one_tile)
1522 data_one_tile_3d(:,:,1) = data_one_tile
1523 call read_fv3_grid_data_netcdf(
'soilw2', tile, idim_input, jdim_input, &
1524 lsoil_input, sfcdata=data_one_tile)
1525 data_one_tile_3d(:,:,2) = data_one_tile
1526 call read_fv3_grid_data_netcdf(
'soilw3', tile, idim_input, jdim_input, &
1527 lsoil_input, sfcdata=data_one_tile)
1528 data_one_tile_3d(:,:,3) = data_one_tile
1529 call read_fv3_grid_data_netcdf(
'soilw4', tile, idim_input, jdim_input, &
1530 lsoil_input, sfcdata=data_one_tile)
1531 data_one_tile_3d(:,:,4) = data_one_tile
1534 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 1535 call esmf_fieldscatter(soilm_tot_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1536 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1537 call error_handler(
"IN FieldScatter", rc)
1541 if (localpet == 0)
then 1542 call read_fv3_grid_data_netcdf(
'soilt1', tile, idim_input, jdim_input, &
1543 lsoil_input, sfcdata=data_one_tile)
1544 data_one_tile_3d(:,:,1) = data_one_tile
1545 call read_fv3_grid_data_netcdf(
'soilt2', tile, idim_input, jdim_input, &
1546 lsoil_input, sfcdata=data_one_tile)
1547 data_one_tile_3d(:,:,2) = data_one_tile
1548 call read_fv3_grid_data_netcdf(
'soilt3', tile, idim_input, jdim_input, &
1549 lsoil_input, sfcdata=data_one_tile)
1550 data_one_tile_3d(:,:,3) = data_one_tile
1551 call read_fv3_grid_data_netcdf(
'soilt4', tile, idim_input, jdim_input, &
1552 lsoil_input, sfcdata=data_one_tile)
1553 data_one_tile_3d(:,:,4) = data_one_tile
1556 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 1557 call esmf_fieldscatter(soil_temp_input_grid, data_one_tile_3d, rootpet=0, tile=tile, rc=rc)
1558 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1559 call error_handler(
"IN FieldScatter", rc)
1563 if (localpet == 0)
then 1564 call read_fv3_grid_data_netcdf(
'land', tile, idim_input, jdim_input, &
1565 lsoil_input, sfcdata=data_one_tile)
1568 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 1569 call esmf_fieldscatter(landsea_mask_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1570 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1571 call error_handler(
"IN FieldScatter", rc)
1575 if (localpet == 0)
then 1576 call read_fv3_grid_data_netcdf(
'icec', tile, idim_input, jdim_input, &
1577 lsoil_input, sfcdata=data_one_tile)
1580 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE FRACTION." 1581 call esmf_fieldscatter(seaice_fract_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1582 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1583 call error_handler(
"IN FieldScatter", rc)
1587 if (localpet == 0)
then 1588 call read_fv3_grid_data_netcdf(
'icetk', tile, idim_input, jdim_input, &
1589 lsoil_input, sfcdata=data_one_tile)
1592 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE DEPTH." 1593 call esmf_fieldscatter(seaice_depth_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1594 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1595 call error_handler(
"IN FieldScatter", rc)
1599 if (localpet == 0)
then 1600 call read_fv3_grid_data_netcdf(
'tisfc', tile, idim_input, jdim_input, &
1601 lsoil_input, sfcdata=data_one_tile)
1604 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE SKIN TEMPERATURE." 1605 call esmf_fieldscatter(seaice_skin_temp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1606 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1607 call error_handler(
"IN FieldScatter", rc)
1611 if (localpet == 0)
then 1612 call read_fv3_grid_data_netcdf(
'weasd', tile, idim_input, jdim_input, &
1613 lsoil_input, sfcdata=data_one_tile)
1616 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW LIQUID EQUIVALENT." 1617 call esmf_fieldscatter(snow_liq_equiv_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1618 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1619 call error_handler(
"IN FieldScatter", rc)
1623 if (localpet == 0)
then 1624 call read_fv3_grid_data_netcdf(
'snod', tile, idim_input, jdim_input, &
1625 lsoil_input, sfcdata=data_one_tile)
1626 data_one_tile = data_one_tile * 1000.0
1629 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW DEPTH." 1630 call esmf_fieldscatter(snow_depth_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1631 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1632 call error_handler(
"IN FieldScatter", rc)
1636 if (localpet == 0)
then 1637 call read_fv3_grid_data_netcdf(
'vtype', tile, idim_input, jdim_input, &
1638 lsoil_input, sfcdata=data_one_tile)
1641 print*,
"- CALL FieldScatter FOR INPUT GRID VEG TYPE." 1642 call esmf_fieldscatter(veg_type_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1643 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1644 call error_handler(
"IN FieldScatter", rc)
1648 if (localpet == 0)
then 1649 call read_fv3_grid_data_netcdf(
'sotyp', tile, idim_input, jdim_input, &
1650 lsoil_input, sfcdata=data_one_tile)
1653 print*,
"- CALL FieldScatter FOR INPUT GRID SOIL TYPE." 1654 call esmf_fieldscatter(soil_type_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1655 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1656 call error_handler(
"IN FieldScatter", rc)
1660 if (localpet == 0)
then 1661 call read_fv3_grid_data_netcdf(
'tmp2m', tile, idim_input, jdim_input, &
1662 lsoil_input, sfcdata=data_one_tile)
1665 print*,
"- CALL FieldScatter FOR INPUT GRID T2M." 1666 call esmf_fieldscatter(t2m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1667 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1668 call error_handler(
"IN FieldScatter", rc)
1672 if (localpet == 0)
then 1673 call read_fv3_grid_data_netcdf(
'spfh2m', tile, idim_input, jdim_input, &
1674 lsoil_input, sfcdata=data_one_tile)
1677 print*,
"- CALL FieldScatter FOR INPUT GRID Q2M." 1678 call esmf_fieldscatter(q2m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1679 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1680 call error_handler(
"IN FieldScatter", rc)
1682 if (localpet == 0)
then 1683 call read_fv3_grid_data_netcdf(
'tprcp', tile, idim_input, jdim_input, &
1684 lsoil_input, sfcdata=data_one_tile)
1687 print*,
"- CALL FieldScatter FOR INPUT GRID TPRCP." 1688 call esmf_fieldscatter(tprcp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1689 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1690 call error_handler(
"IN FieldScatter", rc)
1692 if (localpet == 0)
then 1693 call read_fv3_grid_data_netcdf(
'f10m', tile, idim_input, jdim_input, &
1694 lsoil_input, sfcdata=data_one_tile)
1697 print*,
"- CALL FieldScatter FOR INPUT GRID F10M" 1698 call esmf_fieldscatter(f10m_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1699 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1700 call error_handler(
"IN FieldScatter", rc)
1702 if (localpet == 0)
then 1703 call read_fv3_grid_data_netcdf(
'ffmm', tile, idim_input, jdim_input, &
1704 lsoil_input, sfcdata=data_one_tile)
1707 print*,
"- CALL FieldScatter FOR INPUT GRID FFMM" 1708 call esmf_fieldscatter(ffmm_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1709 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1710 call error_handler(
"IN FieldScatter", rc)
1712 if (localpet == 0)
then 1713 call read_fv3_grid_data_netcdf(
'fricv', tile, idim_input, jdim_input, &
1714 lsoil_input, sfcdata=data_one_tile)
1717 print*,
"- CALL FieldScatter FOR INPUT GRID USTAR" 1718 call esmf_fieldscatter(ustar_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1719 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1720 call error_handler(
"IN FieldScatter", rc)
1722 if (localpet == 0)
then 1728 print*,
"- CALL FieldScatter FOR INPUT GRID SRFLAG" 1729 call esmf_fieldscatter(srflag_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1730 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1731 call error_handler(
"IN FieldScatter", rc)
1733 if (localpet == 0)
then 1734 call read_fv3_grid_data_netcdf(
'tmpsfc', tile, idim_input, jdim_input, &
1735 lsoil_input, sfcdata=data_one_tile)
1738 print*,
"- CALL FieldScatter FOR INPUT GRID SKIN TEMPERATURE" 1739 call esmf_fieldscatter(skin_temp_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1740 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1741 call error_handler(
"IN FieldScatter", rc)
1743 if (localpet == 0)
then 1744 call read_fv3_grid_data_netcdf(
'cnwat', tile, idim_input, jdim_input, &
1745 lsoil_input, sfcdata=data_one_tile)
1748 print*,
"- CALL FieldScatter FOR INPUT GRID CANOPY MOISTURE CONTENT." 1749 call esmf_fieldscatter(canopy_mc_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1750 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1751 call error_handler(
"IN FieldScatter", rc)
1753 if (localpet == 0)
then 1754 call read_fv3_grid_data_netcdf(
'sfcr', tile, idim_input, jdim_input, &
1755 lsoil_input, sfcdata=data_one_tile)
1758 print*,
"- CALL FieldScatter FOR INPUT GRID Z0." 1759 call esmf_fieldscatter(z0_input_grid, data_one_tile, rootpet=0, tile=tile, rc=rc)
1760 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1761 call error_handler(
"IN FieldScatter", rc)
1765 deallocate(data_one_tile, data_one_tile_3d)
1767 end subroutine read_input_sfc_netcdf_file
1773 subroutine read_input_sfc_grib2_file(localpet)
1783 integer,
intent(in) :: localpet
1785 character(len=250) :: the_file
1786 character(len=250) :: geo_file
1787 character(len=200) :: err_msg
1788 character(len=20) :: vname, vname_file, slev
1789 character(len=50) :: method
1791 integer :: rc, varnum, iret, i, j,k
1792 integer :: ncid2d, varid, varsize
1793 integer :: lugb, lugi
1794 integer :: jdisc, jgdtn, jpdtn, pdt_num
1795 integer :: jids(200), jgdt(200), jpdt(200)
1797 logical :: rap_latlon, unpack
1799 real(esmf_kind_r4) :: value
1800 real(esmf_kind_r4),
allocatable :: dummy2d(:,:)
1801 real(esmf_kind_r8),
allocatable :: icec_save(:,:)
1802 real(esmf_kind_r4),
allocatable :: dummy1d(:)
1803 real(esmf_kind_r8),
allocatable :: dummy2d_8(:,:),dummy2d_82(:,:),tsk_save(:,:)
1804 real(esmf_kind_r8),
allocatable :: dummy3d(:,:,:), dummy3d_stype(:,:,:)
1805 integer(esmf_kind_i4),
allocatable :: slmsk_save(:,:)
1806 integer(esmf_kind_i8),
allocatable :: dummy2d_i(:,:)
1808 type(gribfield) :: gfld
1810 rap_latlon = trim(to_upper(external_model))==
"RAP" .and. trim(
input_grid_type) ==
"rotated_latlon" 1812 the_file = trim(data_dir_input_grid) //
"/" // trim(grib2_file_input_grid)
1813 geo_file = trim(geogrid_file_input_grid)
1815 print*,
"- READ SFC DATA FROM GRIB2 FILE: ", trim(the_file)
1819 if (localpet == 0)
then 1822 call baopenr(lugb,the_file,rc)
1823 if (rc /= 0)
call error_handler(
"ERROR OPENING GRIB2 FILE.", rc)
1835 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
1836 unpack, k, gfld, rc)
1839 if (gfld%idsect(1) == 7 .and. gfld%idsect(2) == 2)
then 1840 print*,
'- THIS IS NCEP GEFS DATA.' 1846 if (rc /= 0)
call error_handler(
"ERROR READING GRIB2 FILE.", rc)
1854 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
1855 unpack, k, gfld, rc)
1859 if (gfld%discipline == 2)
then 1860 if (gfld%ipdtnum == pdt_num)
then 1861 if (gfld%ipdtmpl(1) == 0 .and. gfld%ipdtmpl(2) == 2)
then 1863 if (gfld%ipdtmpl(10) == 106 .and. gfld%ipdtmpl(13) == 106)
then 1865 lsoil_input = lsoil_input + 1
1875 print*,
"- FILE HAS ", lsoil_input,
" SOIL LEVELS." 1876 if (lsoil_input == 0)
call error_handler(
"COUNTING SOIL LEVELS.", rc)
1880 call mpi_barrier(mpi_comm_world, rc)
1881 call mpi_bcast(lsoil_input,1,mpi_integer,0,mpi_comm_world,rc)
1885 if (lsoil_input /= 4)
then 1887 call esmf_fielddestroy(soil_temp_input_grid, rc=rc)
1888 call esmf_fielddestroy(soilm_tot_input_grid, rc=rc)
1889 call esmf_fielddestroy(soilm_liq_input_grid, rc=rc)
1891 print*,
"- CALL FieldCreate FOR INPUT SOIL TEMPERATURE." 1892 soil_temp_input_grid = esmf_fieldcreate(input_grid, &
1893 typekind=esmf_typekind_r8, &
1894 staggerloc=esmf_staggerloc_center, &
1895 ungriddedlbound=(/1/), &
1896 ungriddedubound=(/lsoil_input/), rc=rc)
1897 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1898 call error_handler(
"IN FieldCreate", rc)
1900 print*,
"- CALL FieldCreate FOR INPUT TOTAL SOIL MOISTURE." 1901 soilm_tot_input_grid = esmf_fieldcreate(input_grid, &
1902 typekind=esmf_typekind_r8, &
1903 staggerloc=esmf_staggerloc_center, &
1904 ungriddedlbound=(/1/), &
1905 ungriddedubound=(/lsoil_input/), rc=rc)
1906 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1907 call error_handler(
"IN FieldCreate", rc)
1909 print*,
"- CALL FieldCreate FOR INPUT LIQUID SOIL MOISTURE." 1910 soilm_liq_input_grid = esmf_fieldcreate(input_grid, &
1911 typekind=esmf_typekind_r8, &
1912 staggerloc=esmf_staggerloc_center, &
1913 ungriddedlbound=(/1/), &
1914 ungriddedubound=(/lsoil_input/), rc=rc)
1915 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1916 call error_handler(
"IN FieldCreate", rc)
1920 if (localpet == 0)
then 1921 allocate(dummy2d(i_input,j_input))
1922 allocate(slmsk_save(i_input,j_input))
1923 allocate(tsk_save(i_input,j_input))
1924 allocate(icec_save(i_input,j_input))
1925 allocate(dummy2d_8(i_input,j_input))
1926 allocate(dummy2d_82(i_input,j_input))
1927 allocate(dummy3d(i_input,j_input,lsoil_input))
1929 allocate(dummy3d(0,0,0))
1930 allocate(dummy2d_8(0,0))
1931 allocate(dummy2d_82(0,0))
1932 allocate(dummy2d(0,0))
1933 allocate(slmsk_save(0,0))
1941 if (localpet == 0)
then 1943 print*,
"- READ TERRAIN." 1953 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
1954 unpack, k, gfld, rc)
1955 if (rc /= 0)
call error_handler(
"READING TERRAIN.", rc)
1957 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
1962 print*,
"- CALL FieldScatter FOR INPUT TERRAIN." 1964 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
1965 call error_handler(
"IN FieldScatter", rc)
1967 if (localpet == 0)
then 1969 print*,
"- READ SEAICE FRACTION." 1979 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
1980 unpack, k, gfld, rc)
1981 if (rc /= 0)
call error_handler(
"READING SEAICE FRACTION.", rc)
1983 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
1986 icec_save = dummy2d_8
1990 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE FRACTION." 1991 call esmf_fieldscatter(seaice_fract_input_grid, dummy2d_8 ,rootpet=0, rc=rc)
1992 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
1993 call error_handler(
"IN FieldScatter", rc)
2003 if (localpet == 0)
then 2005 print*,
"- READ LANDSEA MASK." 2014 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2015 unpack, k, gfld, rc)
2019 print*,
'landnn ', maxval(gfld%fld),minval(gfld%fld)
2030 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2031 unpack, k, gfld, rc)
2032 if (rc /= 0)
call error_handler(
"READING LANDSEA MASK.", rc)
2038 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2042 if(dummy2d_8(i,j) < 0.5_esmf_kind_r8) dummy2d_8(i,j)=0.0
2043 if(icec_save(i,j) > 0.15_esmf_kind_r8)
then 2044 dummy2d_8(i,j) = 2.0_esmf_kind_r8
2049 slmsk_save = nint(dummy2d_8)
2051 deallocate(icec_save)
2055 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 2056 call esmf_fieldscatter(landsea_mask_input_grid, dummy2d_8 ,rootpet=0, rc=rc)
2057 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2058 call error_handler(
"IN FieldScatter", rc)
2060 if (localpet == 0)
then 2062 print*,
"- READ SEAICE SKIN TEMPERATURE." 2072 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2073 unpack, k, gfld, rc)
2074 if (rc /= 0)
call error_handler(
"READING SEAICE SKIN TEMP.", rc)
2078 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2082 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE SKIN TEMPERATURE." 2083 call esmf_fieldscatter(seaice_skin_temp_input_grid, dummy2d_8 ,rootpet=0, rc=rc)
2084 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2085 call error_handler(
"IN FieldScatter", rc)
2093 if (localpet == 0)
then 2095 print*,
"- READ SNOW LIQUID EQUIVALENT." 2106 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2107 unpack, k, gfld, rc)
2108 if (rc /= 0)
call error_handler(
"READING SNOW LIQUID EQUIVALENT.", rc)
2112 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2116 if(slmsk_save(i,j) == 0) dummy2d_8(i,j) = 0.0
2122 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW LIQUID EQUIVALENT." 2123 call esmf_fieldscatter(snow_liq_equiv_input_grid, dummy2d_8 ,rootpet=0, rc=rc)
2124 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2125 call error_handler(
"IN FieldScatter", rc)
2127 if (localpet == 0)
then 2129 print*,
"- READ SNOW DEPTH." 2140 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2141 unpack, k, gfld, rc)
2144 call error_handler(
"READING SNOW DEPTH.", rc)
2146 gfld%fld = gfld%fld * 1000.0
2148 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2153 if(slmsk_save(i,j) == 0) dummy2d_8(i,j) = 0.0
2159 print*,
"- CALL FieldScatter FOR INPUT GRID SNOW DEPTH." 2160 call esmf_fieldscatter(snow_depth_input_grid,dummy2d_8,rootpet=0, rc=rc)
2161 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2162 call error_handler(
"IN FieldScatter", rc)
2164 if (localpet == 0)
then 2166 print*,
"- READ T2M." 2178 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2179 unpack, k, gfld, rc)
2181 if (rc /= 0)
call error_handler(
"READING T2M.", rc)
2184 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2188 print*,
"- CALL FieldScatter FOR INPUT GRID T2M." 2189 call esmf_fieldscatter(t2m_input_grid, dummy2d_8, rootpet=0,rc=rc)
2190 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2191 call error_handler(
"IN FieldScatter", rc)
2193 if (localpet == 0)
then 2195 print*,
"- READ Q2M." 2207 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2208 unpack, k, gfld, rc)
2209 if (rc /=0)
call error_handler(
"READING Q2M.", rc)
2213 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2217 print*,
"- CALL FieldScatter FOR INPUT GRID Q2M." 2218 call esmf_fieldscatter(q2m_input_grid,dummy2d_8, rootpet=0,rc=rc)
2219 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2220 call error_handler(
"IN FieldScatter", rc)
2222 if (localpet == 0)
then 2224 print*,
"- READ SKIN TEMPERATURE." 2235 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2236 unpack, k, gfld, rc)
2238 if (rc /= 0 )
call error_handler(
"READING SKIN TEMPERATURE.", rc)
2241 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2243 tsk_save(:,:) = dummy2d_8
2247 if(slmsk_save(i,j) == 0 .and. dummy2d_8(i,j) < 271.2)
then 2249 dummy2d_8(i,j) = 271.2
2251 if(slmsk_save(i,j) == 0 .and. dummy2d_8(i,j) > 310.)
then 2253 dummy2d_8(i,j) = 310.0
2260 print*,
"- CALL FieldScatter FOR INPUT GRID SKIN TEMPERATURE" 2261 call esmf_fieldscatter(skin_temp_input_grid,dummy2d_8,rootpet=0, rc=rc)
2262 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2263 call error_handler(
"IN FieldScatter", rc)
2267 if (localpet == 0) dummy2d_8 = 0.0
2269 print*,
"- CALL FieldScatter FOR INPUT GRID SRFLAG" 2270 call esmf_fieldscatter(srflag_input_grid,dummy2d_8, rootpet=0,rc=rc)
2271 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2272 call error_handler(
"IN FieldScatter", rc)
2274 if (localpet == 0)
then 2276 print*,
"- READ SOIL TYPE." 2287 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2288 unpack, k, gfld, rc)
2292 dummy2d = reshape(
real(gfld%fld,kind=esmf_kind_r4) , (/i_input,j_input/))
2296 if (rc /= 0 .and. (trim(to_upper(external_model))==
"HRRR" .or. rap_latlon) .and. geo_file .ne.
"NULL")
then 2300 print*,
"OPEN GEOGRID FILE ", trim(geo_file)
2301 rc = nf90_open(geo_file,nf90_nowrite,ncid2d)
2302 call netcdf_err(rc,
"READING GEOGRID FILE")
2304 print*,
"INQURE ABOUT DIM IDS" 2305 rc = nf90_inq_dimid(ncid2d,
"west_east",varid)
2306 call netcdf_err(rc,
"READING west_east DIMENSION FROM GEOGRID FILE")
2308 rc = nf90_inquire_dimension(ncid2d,varid,len=varsize)
2309 call netcdf_err(rc,
"READING west_east DIMENSION SIZE")
2310 if (varsize .ne. i_input)
call error_handler (
"GEOGRID FILE GRID SIZE DIFFERS FROM INPUT DATA.", -1)
2312 print*,
"INQUIRE ABOUT SOIL TYPE FROM GEOGRID FILE" 2313 rc = nf90_inq_varid(ncid2d,
"SCT_DOM",varid)
2314 call netcdf_err(rc,
"FINDING SCT_DOM IN GEOGRID FILE")
2316 print*,
"READ SOIL TYPE FROM GEOGRID FILE " 2317 rc = nf90_get_var(ncid2d,varid,dummy2d)
2318 call netcdf_err(rc,
"READING SCT_DOM FROM FILE")
2320 print*,
"INQUIRE ABOUT SOIL TYPE FRACTIONS FROM GEOGRID FILE" 2321 rc = nf90_inq_varid(ncid2d,
"SOILCTOP",varid)
2322 call netcdf_err(rc,
"FINDING SOILCTOP IN GEOGRID FILE")
2324 allocate(dummy3d_stype(i_input,j_input,16))
2325 print*,
"READ SOIL TYPE FRACTIONS FROM GEOGRID FILE " 2326 rc = nf90_get_var(ncid2d,varid,dummy3d_stype)
2327 call netcdf_err(rc,
"READING SCT_DOM FROM FILE")
2329 print*,
"CLOSE GEOGRID FILE " 2330 iret = nf90_close(ncid2d)
2335 allocate(dummy1d(16))
2338 if(dummy2d(i,j) == 14.0_esmf_kind_r4 .and. slmsk_save(i,j) == 1)
then 2339 dummy1d(:) =
real(dummy3d_stype(i,j,:),kind=esmf_kind_r4)
2340 dummy1d(14) = 0.0_esmf_kind_r4
2341 dummy2d(i,j) =
real(MAXLOC(dummy1d, 1),esmf_kind_r4)
2346 deallocate(dummy3d_stype)
2349 if ((rc /= 0 .and. trim(to_upper(external_model)) /=
"HRRR" .and. .not. rap_latlon) &
2350 .or. (rc /= 0 .and. (trim(to_upper(external_model)) ==
"HRRR" .or. rap_latlon)))
then 2352 call error_handler(
"COULD NOT FIND SOIL TYPE IN FILE. PLEASE SET SOTYP_FROM_CLIMO=.TRUE. . EXITING", rc)
2356 call get_var_cond(vname,this_miss_var_method=method, this_miss_var_value=
value, &
2358 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var= dummy2d)
2360 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. WILL NOT "//&
2361 "SCALE SOIL MOISTURE FOR DIFFERENCES IN SOIL TYPE. " 2362 dummy2d(:,:) = -99999.0_esmf_kind_r4
2374 if(dummy2d(i,j) == 14.0_esmf_kind_r4 .and. slmsk_save(i,j) == 1) dummy2d(i,j) = -99999.9_esmf_kind_r4
2378 allocate(dummy2d_i(i_input,j_input))
2379 dummy2d_8 =
real(dummy2d,esmf_kind_r8)
2381 where(slmsk_save == 1) dummy2d_i = 1
2383 call search(dummy2d_8,dummy2d_i,i_input,j_input,1,230)
2384 deallocate(dummy2d_i)
2386 dummy2d_8=
real(dummy2d,esmf_kind_r8)
2389 print*,
'sotype ',maxval(dummy2d_8),minval(dummy2d_8)
2393 print*,
"- CALL FieldScatter FOR INPUT GRID SOIL TYPE." 2394 call esmf_fieldscatter(soil_type_input_grid,dummy2d_8, rootpet=0, rc=rc)
2395 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2396 call error_handler(
"IN FieldScatter", rc)
2405 if (.not. vgfrc_from_climo)
then 2407 if (localpet == 0)
then 2409 print*,
"- READ VEG FRACTION." 2420 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2421 unpack, k, gfld, rc)
2424 err_msg=
"COULD NOT FIND VEGETATION FRACTION IN FILE. PLEASE SET VGFRC_FROM_CLIMO=.TRUE." 2425 call error_handler(err_msg, rc)
2427 if (maxval(gfld%fld) > 2.0) gfld%fld = gfld%fld / 100.0
2429 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2435 print*,
"- CALL FieldScatter FOR INPUT GRID VEG GREENNESS." 2436 call esmf_fieldscatter(veg_greenness_input_grid,dummy2d_8, rootpet=0, rc=rc)
2437 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2438 call error_handler(
"IN FieldScatter", rc)
2442 if (.not. minmax_vgfrc_from_climo)
then 2444 if (localpet == 0)
then 2446 print*,
"- READ MIN VEG FRACTION." 2458 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2459 unpack, k, gfld, rc)
2463 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2464 unpack, k, gfld, rc)
2467 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2468 unpack, k, gfld, rc)
2469 err_msg=
"COULD NOT FIND MIN VEGETATION FRACTION IN FILE. SET MINMAX_VGFRC_FROM_CLIMO=.TRUE." 2470 if (rc/=0)
call error_handler(err_msg, rc)
2474 if (maxval(gfld%fld) > 2.0) gfld%fld = gfld%fld / 100.0
2475 print*,
'vfrac min ', maxval(gfld%fld),minval(gfld%fld)
2476 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2480 print*,
"- CALL FieldScatter FOR INPUT GRID MIN VEG GREENNESS." 2481 call esmf_fieldscatter(min_veg_greenness_input_grid,dummy2d_8, rootpet=0, rc=rc)
2482 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2483 call error_handler(
"IN FieldScatter", rc)
2485 if (localpet == 0)
then 2487 print*,
"- READ MAX VEG FRACTION." 2498 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2499 unpack, k, gfld, rc)
2502 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2503 unpack, k, gfld, rc)
2506 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2507 unpack, k, gfld, rc)
2508 err_msg=
"COULD NOT FIND MAX VEGETATION FRACTION IN FILE. SET MINMAX_VGFRC_FROM_CLIMO=.TRUE." 2509 if (rc <= 0)
call error_handler(err_msg, rc)
2513 if (maxval(gfld%fld) > 2.0) gfld%fld = gfld%fld / 100.0
2515 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2519 print*,
"- CALL FieldScatter FOR INPUT GRID MAX VEG GREENNESS." 2520 call esmf_fieldscatter(max_veg_greenness_input_grid,dummy2d_8,rootpet=0, rc=rc)
2521 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2522 call error_handler(
"IN FieldScatter", rc)
2526 if (.not. lai_from_climo)
then 2528 if (localpet == 0)
then 2530 print*,
"- READ LAI." 2541 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2542 unpack, k, gfld, rc)
2544 err_msg=
"COULD NOT FIND LAI IN FILE. SET LAI_FROM_CLIMO=.TRUE." 2545 if (rc /= 0)
call error_handler(err_msg, rc)
2548 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2552 print*,
"- CALL FieldScatter FOR INPUT GRID LAI." 2553 call esmf_fieldscatter(lai_input_grid,dummy2d_8,rootpet=0, rc=rc)
2554 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2555 call error_handler(
"IN FieldScatter", rc)
2559 if (localpet == 0)
then 2561 print*,
"- READ SEAICE DEPTH." 2564 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2576 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2577 unpack, k, gfld, rc)
2580 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc,var8=dummy2d_8)
2582 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL BE"//&
2583 " REPLACED WITH CLIMO. SET A FILL "// &
2584 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2585 dummy2d_8(:,:) = 0.0
2589 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2594 print*,
"- CALL FieldScatter FOR INPUT GRID SEAICE DEPTH." 2595 call esmf_fieldscatter(seaice_depth_input_grid,dummy2d_8, rootpet=0, rc=rc)
2596 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2597 call error_handler(
"IN FieldScatter", rc)
2599 if (localpet == 0)
then 2601 print*,
"- READ TPRCP." 2604 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2610 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8=dummy2d_8)
2612 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL NOT"//&
2613 " BE WRITTEN TO THE INPUT FILE. SET A FILL "// &
2614 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2618 print*,
'tprcp ',maxval(dummy2d_8),minval(dummy2d_8)
2622 print*,
"- CALL FieldScatter FOR INPUT GRID TPRCP." 2623 call esmf_fieldscatter(tprcp_input_grid,dummy2d_8, rootpet=0, rc=rc)
2624 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2625 call error_handler(
"IN FieldScatter", rc)
2627 if (localpet == 0)
then 2629 print*,
"- READ FFMM." 2632 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2638 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8=dummy2d_8)
2640 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL NOT"//&
2641 " BE WRITTEN TO THE INPUT FILE. SET A FILL "// &
2642 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2643 dummy2d_8(:,:) = 0.0
2646 print*,
'ffmm ',maxval(dummy2d_8),minval(dummy2d_8)
2650 print*,
"- CALL FieldScatter FOR INPUT GRID FFMM" 2651 call esmf_fieldscatter(ffmm_input_grid,dummy2d_8, rootpet=0, rc=rc)
2652 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2653 call error_handler(
"IN FieldScatter", rc)
2655 if (localpet == 0)
then 2657 print*,
"- READ USTAR." 2660 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2672 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2673 unpack, k, gfld, rc)
2676 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2677 unpack, k, gfld, rc)
2682 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2684 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8=dummy2d_8)
2686 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL "//&
2687 "REPLACED WITH CLIMO. SET A FILL "// &
2688 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2689 dummy2d_8(:,:) = 0.0
2695 print*,
"- CALL FieldScatter FOR INPUT GRID USTAR" 2696 call esmf_fieldscatter(ustar_input_grid,dummy2d_8, rootpet=0, rc=rc)
2697 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2698 call error_handler(
"IN FieldScatter", rc)
2700 if (localpet == 0)
then 2702 print*,
"- READ F10M." 2704 slev=
":10 m above ground:" 2705 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2710 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8=dummy2d_8)
2712 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL NOT"//&
2713 " BE WRITTEN TO THE INPUT FILE. SET A FILL "// &
2714 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2715 dummy2d_8(:,:) = 0.0
2718 print*,
'f10m ',maxval(dummy2d_8),minval(dummy2d_8)
2722 print*,
"- CALL FieldScatter FOR INPUT GRID F10M." 2723 call esmf_fieldscatter(f10m_input_grid,dummy2d_8, rootpet=0, rc=rc)
2724 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2725 call error_handler(
"IN FieldScatter", rc)
2727 if (localpet == 0)
then 2729 print*,
"- READ CANOPY MOISTURE CONTENT." 2732 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2744 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2745 unpack, k, gfld, rc)
2749 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2750 unpack, k, gfld, rc)
2754 print*,
'cnwat ', maxval(gfld%fld),minval(gfld%fld)
2755 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2756 call check_cnwat(dummy2d_8,i_input,j_input)
2758 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8=dummy2d_8)
2760 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL"//&
2761 " REPLACED WITH CLIMO. SET A FILL "// &
2762 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2769 print*,
"- CALL FieldScatter FOR INPUT GRID CANOPY MOISTURE CONTENT." 2770 call esmf_fieldscatter(canopy_mc_input_grid,dummy2d_8, rootpet=0, rc=rc)
2771 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2772 call error_handler(
"IN FieldScatter", rc)
2774 if (localpet == 0)
then 2779 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
2791 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2792 unpack, k, gfld, rc)
2795 call handle_grib_error(vname, slev ,method,
value,varnum,read_from_input,rc, var8= dummy2d_8)
2797 print*,
"WARNING: "//trim(vname)//
" NOT AVAILABLE IN FILE. THIS FIELD WILL BE"//&
2798 " REPLACED WITH CLIMO. SET A FILL "// &
2799 "VALUE IN THE VARMAP TABLE IF THIS IS NOT DESIRABLE." 2800 dummy2d_8(:,:) = 0.0
2803 gfld%fld = gfld%fld * 10.0
2805 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2810 print*,
"- CALL FieldScatter FOR INPUT GRID Z0." 2811 call esmf_fieldscatter(z0_input_grid,dummy2d_8, rootpet=0, rc=rc)
2812 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2813 call error_handler(
"IN FieldScatter", rc)
2815 if (localpet == 0)
then 2816 print*,
"- READ LIQUID SOIL MOISTURE." 2818 vname_file =
":SOILL:" 2819 call read_grib_soil(vname,vname_file,lugb, pdt_num,dummy3d)
2823 print*,
"- CALL FieldScatter FOR INPUT LIQUID SOIL MOISTURE." 2824 call esmf_fieldscatter(soilm_liq_input_grid, dummy3d, rootpet=0, rc=rc)
2825 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2826 call error_handler(
"IN FieldScatter", rc)
2828 if (localpet == 0)
then 2829 print*,
"- READ TOTAL SOIL MOISTURE." 2831 vname_file =
"var2_2_1_" 2832 call read_grib_soil(vname,vname_file,lugb, pdt_num,dummy3d)
2835 print*,
"- CALL FieldScatter FOR INPUT TOTAL SOIL MOISTURE." 2836 call esmf_fieldscatter(soilm_tot_input_grid, dummy3d, rootpet=0, rc=rc)
2837 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2838 call error_handler(
"IN FieldScatter", rc)
2846 print*,
"- CALL FieldGather for INPUT SOIL TYPE." 2847 call esmf_fieldgather(soil_type_input_grid, dummy2d_82, rootpet=0, tile=1, rc=rc)
2848 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2849 call error_handler(
"IN FieldGather", rc)
2851 if (localpet == 0)
then 2853 print*,
"- READ VEG TYPE." 2864 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
2865 unpack, k, gfld, rc)
2869 call error_handler(
"COULD NOT FIND VEGETATION TYPE IN FILE. PLEASE SET VGTYP_FROM_CLIMO=.TRUE. . EXITING", rc)
2873 dummy2d_8(i,j) = 0.0
2874 if(slmsk_save(i,j) == 1 .and. dummy3d(i,j,1) > 0.99) &
2876 dummy2d_8(i,j) =
real(veg_type_landice_input,esmf_kind_r8)
2881 dummy2d_8 = reshape(gfld%fld , (/i_input,j_input/))
2884 if (trim(external_model) .ne.
"GFS")
then 2887 if (dummy2d_8(i,j) == 15.0_esmf_kind_r8 .and. slmsk_save(i,j) == 1)
then 2888 if (dummy3d(i,j,1) < 0.6)
then 2889 dummy2d_8(i,j) =
real(veg_type_landice_input,esmf_kind_r8)
2890 elseif (dummy3d(i,j,1) > 0.99)
then 2892 dummy2d_8(i,j) = 0.0_esmf_kind_r8
2893 dummy2d_82(i,j) = 0.0_esmf_kind_r8
2895 elseif (dummy2d_8(i,j) == 17.0_esmf_kind_r8 .and. slmsk_save(i,j)==0)
then 2896 dummy2d_8(i,j) = 0.0_esmf_kind_r8
2906 print*,
"- CALL FieldScatter FOR INPUT VEG TYPE." 2907 call esmf_fieldscatter(veg_type_input_grid, dummy2d_8, rootpet=0, rc=rc)
2908 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2909 call error_handler(
"IN FieldScatter", rc)
2911 print*,
"- CALL FieldScatter FOR INPUT SOIL TYPE." 2912 call esmf_fieldscatter(soil_type_input_grid, dummy2d_82, rootpet=0, rc=rc)
2913 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2914 call error_handler(
"IN FieldScatter", rc)
2916 deallocate(dummy2d_82)
2918 print*,
"- CALL FieldScatter FOR INPUT LANDSEA MASK." 2919 call esmf_fieldscatter(landsea_mask_input_grid,
real(slmsk_save,esmf_kind_r8),rootpet=0, rc=rc)
2920 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2921 call error_handler(
"IN FieldScatter", rc)
2930 if (localpet == 0)
then 2931 print*,
"- READ SOIL TEMPERATURE." 2933 vname_file =
":TSOIL:" 2934 call read_grib_soil(vname,vname_file,lugb,pdt_num,dummy3d)
2935 call check_soilt(dummy3d,slmsk_save,tsk_save,icet_default,i_input,j_input,lsoil_input)
2936 deallocate(tsk_save)
2939 deallocate(slmsk_save)
2941 print*,
"- CALL FieldScatter FOR INPUT SOIL TEMPERATURE." 2942 call esmf_fieldscatter(soil_temp_input_grid, dummy3d, rootpet=0, rc=rc)
2943 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
2944 call error_handler(
"IN FieldScatter", rc)
2947 deallocate(dummy2d_8)
2949 if (localpet == 0)
call baclose(lugb, rc)
2951 end subroutine read_input_sfc_grib2_file
2956 subroutine init_sfc_esmf_fields
2962 print*,
"- CALL FieldCreate FOR INPUT GRID LANDSEA MASK." 2963 landsea_mask_input_grid = esmf_fieldcreate(
input_grid, &
2964 typekind=esmf_typekind_r8, &
2965 staggerloc=esmf_staggerloc_center, rc=rc)
2966 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2967 call error_handler(
"IN FieldCreate", rc)
2969 print*,
"- CALL FieldCreate FOR INPUT GRID Z0." 2970 z0_input_grid = esmf_fieldcreate(
input_grid, &
2971 typekind=esmf_typekind_r8, &
2972 staggerloc=esmf_staggerloc_center, rc=rc)
2973 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2974 call error_handler(
"IN FieldCreate", rc)
2976 print*,
"- CALL FieldCreate FOR INPUT GRID VEGETATION TYPE." 2977 veg_type_input_grid = esmf_fieldcreate(
input_grid, &
2978 typekind=esmf_typekind_r8, &
2979 staggerloc=esmf_staggerloc_center, rc=rc)
2980 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2981 call error_handler(
"IN FieldCreate", rc)
2983 print*,
"- CALL FieldCreate FOR INPUT GRID CANOPY MOISTURE CONTENT." 2984 canopy_mc_input_grid = esmf_fieldcreate(
input_grid, &
2985 typekind=esmf_typekind_r8, &
2986 staggerloc=esmf_staggerloc_center, rc=rc)
2987 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2988 call error_handler(
"IN FieldCreate", rc)
2990 print*,
"- CALL FieldCreate FOR INPUT GRID SEAICE FRACTION." 2991 seaice_fract_input_grid = esmf_fieldcreate(
input_grid, &
2992 typekind=esmf_typekind_r8, &
2993 staggerloc=esmf_staggerloc_center, rc=rc)
2994 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2995 call error_handler(
"IN FieldCreate", rc)
2997 print*,
"- CALL FieldCreate FOR INPUT GRID SEAICE DEPTH." 2998 seaice_depth_input_grid = esmf_fieldcreate(
input_grid, &
2999 typekind=esmf_typekind_r8, &
3000 staggerloc=esmf_staggerloc_center, rc=rc)
3001 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3002 call error_handler(
"IN FieldCreate", rc)
3004 print*,
"- CALL FieldCreate FOR INPUT GRID SEAICE SKIN TEMPERATURE." 3005 seaice_skin_temp_input_grid = esmf_fieldcreate(
input_grid, &
3006 typekind=esmf_typekind_r8, &
3007 staggerloc=esmf_staggerloc_center, rc=rc)
3008 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3009 call error_handler(
"IN FieldCreate", rc)
3011 print*,
"- CALL FieldCreate FOR INPUT GRID SNOW DEPTH." 3012 snow_depth_input_grid = esmf_fieldcreate(
input_grid, &
3013 typekind=esmf_typekind_r8, &
3014 staggerloc=esmf_staggerloc_center, rc=rc)
3015 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3016 call error_handler(
"IN FieldCreate", rc)
3018 print*,
"- CALL FieldCreate FOR INPUT GRID SNOW LIQUID EQUIVALENT." 3019 snow_liq_equiv_input_grid = esmf_fieldcreate(
input_grid, &
3020 typekind=esmf_typekind_r8, &
3021 staggerloc=esmf_staggerloc_center, rc=rc)
3022 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3023 call error_handler(
"IN FieldCreate", rc)
3025 print*,
"- CALL FieldCreate FOR INPUT GRID T2M." 3026 t2m_input_grid = esmf_fieldcreate(
input_grid, &
3027 typekind=esmf_typekind_r8, &
3028 staggerloc=esmf_staggerloc_center, rc=rc)
3029 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3030 call error_handler(
"IN FieldCreate", rc)
3032 print*,
"- CALL FieldCreate FOR INPUT GRID Q2M." 3033 q2m_input_grid = esmf_fieldcreate(
input_grid, &
3034 typekind=esmf_typekind_r8, &
3035 staggerloc=esmf_staggerloc_center, rc=rc)
3036 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3037 call error_handler(
"IN FieldCreate", rc)
3039 print*,
"- CALL FieldCreate FOR INPUT GRID TPRCP." 3040 tprcp_input_grid = esmf_fieldcreate(
input_grid, &
3041 typekind=esmf_typekind_r8, &
3042 staggerloc=esmf_staggerloc_center, rc=rc)
3043 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3044 call error_handler(
"IN FieldCreate", rc)
3046 print*,
"- CALL FieldCreate FOR INPUT GRID F10M." 3047 f10m_input_grid = esmf_fieldcreate(
input_grid, &
3048 typekind=esmf_typekind_r8, &
3049 staggerloc=esmf_staggerloc_center, rc=rc)
3050 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3051 call error_handler(
"IN FieldCreate", rc)
3053 print*,
"- CALL FieldCreate FOR INPUT GRID USTAR." 3054 ustar_input_grid = esmf_fieldcreate(
input_grid, &
3055 typekind=esmf_typekind_r8, &
3056 staggerloc=esmf_staggerloc_center, rc=rc)
3057 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3058 call error_handler(
"IN FieldCreate", rc)
3060 print*,
"- CALL FieldCreate FOR INPUT GRID FFMM." 3061 ffmm_input_grid = esmf_fieldcreate(
input_grid, &
3062 typekind=esmf_typekind_r8, &
3063 staggerloc=esmf_staggerloc_center, rc=rc)
3064 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3065 call error_handler(
"IN FieldCreate", rc)
3067 print*,
"- CALL FieldCreate FOR INPUT GRID SRFLAG." 3068 srflag_input_grid = esmf_fieldcreate(
input_grid, &
3069 typekind=esmf_typekind_r8, &
3070 staggerloc=esmf_staggerloc_center, rc=rc)
3071 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3072 call error_handler(
"IN FieldCreate", rc)
3074 print*,
"- CALL FieldCreate FOR INPUT SKIN TEMPERATURE." 3075 skin_temp_input_grid = esmf_fieldcreate(
input_grid, &
3076 typekind=esmf_typekind_r8, &
3077 staggerloc=esmf_staggerloc_center, rc=rc)
3078 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3079 call error_handler(
"IN FieldCreate", rc)
3081 print*,
"- CALL FieldCreate FOR INPUT SOIL TYPE." 3082 soil_type_input_grid = esmf_fieldcreate(
input_grid, &
3083 typekind=esmf_typekind_r8, &
3084 staggerloc=esmf_staggerloc_center, rc=rc)
3085 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3086 call error_handler(
"IN FieldCreate", rc)
3088 print*,
"- CALL FieldCreate FOR INPUT TERRAIN." 3090 typekind=esmf_typekind_r8, &
3091 staggerloc=esmf_staggerloc_center, rc=rc)
3092 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3093 call error_handler(
"IN FieldCreate", rc)
3095 print*,
"- CALL FieldCreate FOR INPUT SOIL TEMPERATURE." 3096 soil_temp_input_grid = esmf_fieldcreate(
input_grid, &
3097 typekind=esmf_typekind_r8, &
3098 staggerloc=esmf_staggerloc_center, &
3099 ungriddedlbound=(/1/), &
3100 ungriddedubound=(/lsoil_input/), rc=rc)
3101 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3102 call error_handler(
"IN FieldCreate", rc)
3104 print*,
"- CALL FieldCreate FOR INPUT TOTAL SOIL MOISTURE." 3105 soilm_tot_input_grid = esmf_fieldcreate(
input_grid, &
3106 typekind=esmf_typekind_r8, &
3107 staggerloc=esmf_staggerloc_center, &
3108 ungriddedlbound=(/1/), &
3109 ungriddedubound=(/lsoil_input/), rc=rc)
3110 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3111 call error_handler(
"IN FieldCreate", rc)
3113 print*,
"- CALL FieldCreate FOR INPUT LIQUID SOIL MOISTURE." 3114 soilm_liq_input_grid = esmf_fieldcreate(
input_grid, &
3115 typekind=esmf_typekind_r8, &
3116 staggerloc=esmf_staggerloc_center, &
3117 ungriddedlbound=(/1/), &
3118 ungriddedubound=(/lsoil_input/), rc=rc)
3119 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3120 call error_handler(
"IN FieldCreate", rc)
3125 print*,
"- CALL FieldCreate FOR INPUT VEGETATION GREENNESS." 3126 veg_greenness_input_grid = esmf_fieldcreate(
input_grid, &
3127 typekind=esmf_typekind_r8, &
3128 staggerloc=esmf_staggerloc_center, rc=rc)
3129 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
3130 call error_handler(
"IN FieldCreate", rc)
3134 print*,
"- CALL FieldCreate FOR INPUT MIN VEGETATION GREENNESS." 3135 min_veg_greenness_input_grid = esmf_fieldcreate(
input_grid, &
3136 typekind=esmf_typekind_r8, &
3137 staggerloc=esmf_staggerloc_center, rc=rc)
3138 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
3139 call error_handler(
"IN FieldCreate", rc)
3141 print*,
"- CALL FieldCreate FOR INPUT MAX VEGETATION GREENNESS." 3142 max_veg_greenness_input_grid = esmf_fieldcreate(
input_grid, &
3143 typekind=esmf_typekind_r8, &
3144 staggerloc=esmf_staggerloc_center, rc=rc)
3145 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
3146 call error_handler(
"IN FieldCreate", rc)
3150 print*,
"- CALL FieldCreate FOR INPUT LEAF AREA INDEX." 3151 lai_input_grid = esmf_fieldcreate(
input_grid, &
3152 typekind=esmf_typekind_r8, &
3153 staggerloc=esmf_staggerloc_center, rc=rc)
3154 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__))&
3155 call error_handler(
"IN FieldCreate", rc)
3157 end subroutine init_sfc_esmf_fields
3169 SUBROUTINE read_fv3_grid_data_netcdf(FIELD,TILE_NUM,IMO,JMO,LMO, &
3170 SFCDATA, SFCDATA_3D)
3174 CHARACTER(LEN=*),
INTENT(IN) :: FIELD
3176 INTEGER,
INTENT(IN) :: IMO, JMO, LMO, TILE_NUM
3178 REAL(ESMF_KIND_R8),
INTENT(OUT),
OPTIONAL :: SFCDATA(IMO,JMO)
3179 REAL(ESMF_KIND_R8),
INTENT(OUT),
OPTIONAL :: SFCDATA_3D(IMO,JMO,LMO)
3181 CHARACTER(LEN=256) :: TILEFILE
3183 INTEGER :: ERROR, NCID, ID_VAR
3187 print*,
'WILL READ ',trim(field),
' FROM: ', trim(tilefile)
3189 error=nf90_open(trim(tilefile),nf90_nowrite,ncid)
3190 CALL netcdf_err(error,
'OPENING: '//trim(tilefile) )
3192 error=nf90_inq_varid(ncid, field, id_var)
3193 CALL netcdf_err(error,
'READING FIELD ID' )
3195 IF (
PRESENT(sfcdata_3d))
THEN 3196 error=nf90_get_var(ncid, id_var, sfcdata_3d)
3197 CALL netcdf_err(error,
'READING FIELD' )
3199 error=nf90_get_var(ncid, id_var, sfcdata)
3200 CALL netcdf_err(error,
'READING FIELD' )
3203 error = nf90_close(ncid)
3205 END SUBROUTINE read_fv3_grid_data_netcdf
3215 subroutine read_grib_soil(vname, vname_file, lugb, pdt_num, dummy3d)
3221 character(len=20),
intent(in) :: vname,vname_file
3223 integer,
intent(in) :: lugb, pdt_num
3225 real(esmf_kind_r8),
intent(inout) :: dummy3d(:,:,:)
3227 character(len=50) :: slevs(lsoil_input)
3228 character(len=50) :: method
3230 integer :: varnum, i, j, k, rc, rc2
3231 integer :: jdisc, jgdtn, jpdtn, lugi
3232 integer :: jids(200), jgdt(200), jpdt(200)
3233 integer :: iscale1, iscale2
3237 real(esmf_kind_r4),
allocatable :: dummy2d(:,:)
3238 real(esmf_kind_r4) :: value
3240 type(gribfield) :: gfld
3244 if(lsoil_input == 4)
then 3245 slevs = (/
character(24)::
':0-0.1 m below ground:',
':0.1-0.4 m below ground:', &
3246 ':0.4-1 m below ground:',
':1-2 m below ground:'/)
3247 elseif(lsoil_input == 9)
then 3248 slevs = (/
character(26)::
':0-0 m below ground',
':0.01-0.01 m below ground:',
':0.04-0.04 m below ground:', &
3249 ':0.1-0.1 m below ground:',
':0.3-0.3 m below ground:',
':0.6-0.6 m below ground:', &
3250 ':1-1 m below ground:',
':1.6-1.6 m below ground:',
':3-3 m below ground:'/)
3253 call error_handler(
"reading soil levels. File must have 4 or 9 soil levels.", rc)
3256 call get_var_cond(vname,this_miss_var_method=method,this_miss_var_value=
value, &
3268 if (trim(vname) ==
'soilt') jpdt(2) = 2
3269 if (trim(vname) ==
'soilw') jpdt(2) = 192
3270 if (trim(vname) ==
'soill')
then 3278 do i = 1,lsoil_input
3280 call getgb2(lugb, lugi, j, jdisc, jids, jpdtn, jpdt, jgdtn, jgdt, &
3281 unpack, k, gfld, rc2)
3284 call handle_grib_error(vname_file, slevs(i),method,
value,varnum,
read_from_input,rc,var=dummy2d)
3285 if (rc==1 .and. trim(vname) /=
"soill")
then 3287 call error_handler(
"READING IN "//trim(vname)//
". SET A FILL "// &
3288 "VALUE IN THE VARMAP TABLE IF THIS ERROR IS NOT DESIRABLE.",rc)
3290 dummy3d(:,:,:) = 0.0_esmf_kind_r8
3296 iscale1 = 10 ** gfld%ipdtmpl(11)
3297 iscale2 = 10 ** gfld%ipdtmpl(14)
3300 dummy2d = reshape(
real(gfld%fld,kind=esmf_kind_r4), (/i_input,j_input/) )
3305 dummy3d(:,:,i) =
real(dummy2d,esmf_kind_r8)
3311 end subroutine read_grib_soil
3316 subroutine cleanup_input_sfc_data
3322 print*,
"- CALL FieldDestroy FOR INPUT GRID FIELDS." 3324 call esmf_fielddestroy(canopy_mc_input_grid, rc=rc)
3325 call esmf_fielddestroy(f10m_input_grid, rc=rc)
3326 call esmf_fielddestroy(ffmm_input_grid, rc=rc)
3328 call esmf_fielddestroy(landsea_mask_input_grid, rc=rc)
3330 call esmf_fielddestroy(q2m_input_grid, rc=rc)
3331 call esmf_fielddestroy(seaice_depth_input_grid, rc=rc)
3332 call esmf_fielddestroy(seaice_fract_input_grid, rc=rc)
3333 call esmf_fielddestroy(seaice_skin_temp_input_grid, rc=rc)
3334 call esmf_fielddestroy(skin_temp_input_grid, rc=rc)
3335 call esmf_fielddestroy(snow_depth_input_grid, rc=rc)
3336 call esmf_fielddestroy(snow_liq_equiv_input_grid, rc=rc)
3337 call esmf_fielddestroy(soil_temp_input_grid, rc=rc)
3338 call esmf_fielddestroy(soil_type_input_grid, rc=rc)
3339 call esmf_fielddestroy(soilm_liq_input_grid, rc=rc)
3340 call esmf_fielddestroy(soilm_tot_input_grid, rc=rc)
3341 call esmf_fielddestroy(srflag_input_grid, rc=rc)
3342 call esmf_fielddestroy(t2m_input_grid, rc=rc)
3343 call esmf_fielddestroy(tprcp_input_grid, rc=rc)
3344 call esmf_fielddestroy(ustar_input_grid, rc=rc)
3345 call esmf_fielddestroy(veg_type_input_grid, rc=rc)
3346 call esmf_fielddestroy(z0_input_grid, rc=rc)
3349 call esmf_fielddestroy(veg_greenness_input_grid, rc=rc)
3352 call esmf_fielddestroy(min_veg_greenness_input_grid, rc=rc)
3353 call esmf_fielddestroy(max_veg_greenness_input_grid, rc=rc)
3356 call esmf_fielddestroy(lai_input_grid, rc=rc)
3359 end subroutine cleanup_input_sfc_data
3361 end module sfc_input_data
This module contains code to read the setup namelist file, handle the varmap file for GRIB2 data...
integer, public ip1_input
i_input plus 1
integer, public j_input
j-dimension of input grid (or of each global tile)
logical, public lai_from_climo
If false, interpolate leaf area index from the input data to the target grid instead of using data fr...
integer, public jp1_input
j_input plus 1
Sets up the ESMF grid objects for the input data grid and target FV3 grid.
Replace undefined values with a valid value.
subroutine, public get_var_cond(var_name, this_miss_var_method, this_miss_var_value, this_field_var_name, loc)
Search the variable mapping table to find conditions for handling missing variables.
logical, public sotyp_from_climo
If false, interpolate soil type from the input data to the target grid instead of using data from sta...
integer, public num_tiles_input_grid
Number of tiles, input grid.
logical, public minmax_vgfrc_from_climo
If false, interpolate min/max vegetation fraction from the input data to the target grid instead of u...
character(len=500), dimension(6), public orog_files_input_grid
Input grid orography files.
character(len=20), public external_model
The model that the input data is derived from.
subroutine, public search(field, mask, idim, jdim, tile, field_num, latitude, terrain_land, soilt_climo)
Replace undefined surface values.
character(len=500), public orog_dir_input_grid
Directory containing the input grid orography files.
logical, public convert_nst
Convert nst data when true.
character(len=500), public geogrid_file_input_grid
Name of "geogrid" file, which contains static surface fields on the input grid.
logical, public vgfrc_from_climo
If false, interpolate vegetation fraction from the input data to the target grid instead of using dat...
type(esmf_grid), public input_grid
input grid esmf grid object
character(len=500), public data_dir_input_grid
Directory containing input atm or sfc files.
character(len=50), public input_grid_type
map projection of input grid
character(len=25), public input_type
Input data type:
character(len=500), public grib2_file_input_grid
REQUIRED.
logical, public vgtyp_from_climo
If false, interpolate vegetation type from the input data to the target grid instead of using data fr...
logical, dimension(:), allocatable, public read_from_input
When false, variable was not read from GRIB2 input file.
character(len=500), dimension(6), public sfc_files_input_grid
File names containing input surface data.
integer, public i_input
i-dimension of input grid (or of each global tile)