70 use write_data,
only : write_fv3_atm_header_netcdf, &
71 write_fv3_atm_bndy_data_netcdf, &
72 write_fv3_atm_data_netcdf
74 use utilities,
only : error_handler
124 integer,
intent(in) :: localpet
126 integer :: isrctermprocessing
129 type(esmf_regridmethod_flag) :: method
130 type(esmf_routehandle) :: regrid_bl
132 real(esmf_kind_r8),
parameter :: p0=101325.0
133 real(esmf_kind_r8),
parameter :: rd = 287.058
134 real(esmf_kind_r8),
parameter :: grav = 9.81
135 real(esmf_kind_r8),
parameter :: lapse = -6.5e-03
137 real(esmf_kind_r8),
parameter :: exponent = rd*lapse/grav
138 real(esmf_kind_r8),
parameter :: one_over_exponent = 1.0 / exponent
140 real(esmf_kind_r8),
pointer :: psptr(:,:), tempptr(:,:,:)
164 isrctermprocessing = 1
168 print*,
"- CALL FieldSMMStore FOR ATMOSPHERIC FIELDS." 173 routehandle=regrid_bl, &
174 srctermprocessing=isrctermprocessing, rc=rc)
175 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
176 call error_handler(
"IN FieldSMMStore", rc)
180 print*,
"- CALL FieldRegridStore FOR ATMOSPHERIC FIELDS." 182 method=esmf_regridmethod_bilinear
186 polemethod=esmf_polemethod_allavg, &
187 srctermprocessing=isrctermprocessing, &
188 routehandle=regrid_bl, &
189 regridmethod=method, rc=rc)
190 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
191 call error_handler(
"IN FieldRegridStore", rc)
195 print*,
"- CALL Field_Regrid FOR TEMPERATURE." 198 routehandle=regrid_bl, &
199 termorderflag=esmf_termorder_srcseq, &
201 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
202 call error_handler(
"IN FieldRegrid", rc)
204 print*,
"- CALL Field_Regrid FOR PRESSURE." 207 routehandle=regrid_bl, &
208 termorderflag=esmf_termorder_srcseq, &
210 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
211 call error_handler(
"IN FieldRegrid", rc)
214 print*,
"- CALL Field_Regrid FOR TRACER ", trim(
tracers(n))
217 routehandle=regrid_bl, &
218 termorderflag=esmf_termorder_srcseq, rc=rc)
219 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
220 call error_handler(
"IN FieldRegrid", rc)
224 print*,
"- CALL Field_Regrid FOR VERTICAL VELOCITY." 227 routehandle=regrid_bl, &
228 termorderflag=esmf_termorder_srcseq, rc=rc)
229 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
230 call error_handler(
"IN FieldRegrid", rc)
233 print*,
"- CALL FieldGet FOR INPUT GRID VERTICAL VEL." 235 farrayptr=tempptr, rc=rc)
236 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
237 call error_handler(
"IN FieldGet", rc)
239 print*,
"MIN MAX W INPUT = ", minval(tempptr), maxval(tempptr)
242 print*,
"- CALL FieldGet FOR VERTICAL VEL B4ADJ." 244 farrayptr=tempptr, rc=rc)
245 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
246 call error_handler(
"IN FieldGet", rc)
248 print*,
"MIN MAX W B4ADJ = ", minval(tempptr), maxval(tempptr)
251 print*,
"- CALL FieldGet FOR INPUT SURFACE PRESSURE." 253 farrayptr=psptr, rc=rc)
254 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
255 call error_handler(
"IN FieldGet", rc)
261 psptr = (psptr/p0)**exponent
263 print*,
"- CALL Field_Regrid FOR SURFACE PRESSURE." 266 routehandle=regrid_bl, &
267 termorderflag=esmf_termorder_srcseq, &
269 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
270 call error_handler(
"IN FieldRegrid", rc)
273 print*,
"- CALL FieldGet FOR INPUT SURFACE PRESSURE B4ADJ." 275 farrayptr=psptr, rc=rc)
276 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
277 call error_handler(
"IN FieldGet", rc)
279 psptr = p0 * psptr**one_over_exponent
281 print*,
"- CALL Field_Regrid FOR TERRAIN." 284 routehandle=regrid_bl, &
285 termorderflag=esmf_termorder_srcseq, &
287 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
288 call error_handler(
"IN FieldRegrid", rc)
290 print*,
"- CALL Field_Regrid FOR x WIND." 293 routehandle=regrid_bl, &
294 termorderflag=esmf_termorder_srcseq, rc=rc)
295 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
296 call error_handler(
"IN FieldRegrid", rc)
298 print*,
"- CALL Field_Regrid FOR y WIND." 301 routehandle=regrid_bl, &
302 termorderflag=esmf_termorder_srcseq, rc=rc)
303 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
304 call error_handler(
"IN FieldRegrid", rc)
306 print*,
"- CALL Field_Regrid FOR z WIND." 309 routehandle=regrid_bl, &
310 termorderflag=esmf_termorder_srcseq, rc=rc)
311 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
312 call error_handler(
"IN FieldRegrid", rc)
316 print*,
"- CALL FieldRegridRelease." 317 call esmf_fieldregridrelease(routehandle=regrid_bl, rc=rc)
318 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
319 call error_handler(
"IN FieldRegridRelease", rc)
371 isrctermprocessing = 1
372 method=esmf_regridmethod_bilinear
374 print*,
"- CALL FieldRegridStore FOR X-WIND WEST EDGE." 377 polemethod=esmf_polemethod_allavg, &
378 srctermprocessing=isrctermprocessing, &
379 routehandle=regrid_bl, &
380 extrapmethod=esmf_extrapmethod_nearest_stod, &
381 regridmethod=method, rc=rc)
382 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
383 call error_handler(
"IN FieldRegridStore", rc)
385 print*,
"- CALL Field_Regrid FOR X-WIND WEST EDGE." 388 routehandle=regrid_bl, &
389 termorderflag=esmf_termorder_srcseq, rc=rc)
390 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
391 call error_handler(
"IN FieldRegrid", rc)
393 print*,
"- CALL Field_Regrid FOR Y-WIND WEST EDGE." 396 routehandle=regrid_bl, &
397 termorderflag=esmf_termorder_srcseq, rc=rc)
398 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
399 call error_handler(
"IN FieldRegrid", rc)
401 print*,
"- CALL Field_Regrid FOR Z-WIND WEST EDGE." 404 routehandle=regrid_bl, &
405 termorderflag=esmf_termorder_srcseq, rc=rc)
406 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
407 call error_handler(
"IN FieldRegrid", rc)
409 print*,
"- CALL FieldRegridRelease." 410 call esmf_fieldregridrelease(routehandle=regrid_bl, rc=rc)
411 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
412 call error_handler(
"IN FieldRegridRelease", rc)
414 isrctermprocessing = 1
415 method=esmf_regridmethod_bilinear
417 print*,
"- CALL FieldRegridStore FOR X-WIND SOUTH EDGE." 420 polemethod=esmf_polemethod_allavg, &
421 srctermprocessing=isrctermprocessing, &
422 routehandle=regrid_bl, &
423 extrapmethod=esmf_extrapmethod_nearest_stod, &
424 regridmethod=method, rc=rc)
425 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
426 call error_handler(
"IN FieldRegridStore", rc)
428 print*,
"- CALL Field_Regrid FOR X-WIND SOUTH EDGE." 431 routehandle=regrid_bl, &
432 termorderflag=esmf_termorder_srcseq, rc=rc)
433 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
434 call error_handler(
"IN FieldRegrid", rc)
436 print*,
"- CALL Field_Regrid FOR Y-WIND SOUTH EDGE." 439 routehandle=regrid_bl, &
440 termorderflag=esmf_termorder_srcseq, rc=rc)
441 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
442 call error_handler(
"IN FieldRegrid", rc)
444 print*,
"- CALL Field_Regrid FOR Z-WIND SOUTH EDGE." 447 routehandle=regrid_bl, &
448 termorderflag=esmf_termorder_srcseq, rc=rc)
449 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
450 call error_handler(
"IN FieldRegrid", rc)
452 print*,
"- CALL FieldRegridRelease." 453 call esmf_fieldregridrelease(routehandle=regrid_bl, rc=rc)
454 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
455 call error_handler(
"IN FieldRegridRelease", rc)
477 call write_fv3_atm_header_netcdf(localpet)
478 if (
regional <= 1)
call write_fv3_atm_data_netcdf(localpet)
479 if (
regional >= 1)
call write_fv3_atm_bndy_data_netcdf(localpet)
503 print*,
"- CALL FieldCreate FOR TARGET GRID TRACER BEFORE ADJUSTMENT ", trim(
tracers(n))
505 typekind=esmf_typekind_r8, &
506 staggerloc=esmf_staggerloc_center, &
507 ungriddedlbound=(/1/), &
509 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
510 call error_handler(
"IN FieldCreate", rc)
513 print*,
"- CALL FieldCreate FOR TARGET GRID TEMPERATURE BEFORE ADJUSTMENT." 515 typekind=esmf_typekind_r8, &
516 staggerloc=esmf_staggerloc_center, &
517 ungriddedlbound=(/1/), &
519 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
520 call error_handler(
"IN FieldCreate", rc)
522 print*,
"- CALL FieldCreate FOR TARGET GRID PRESSURE BEFORE ADJUSTMENT." 524 typekind=esmf_typekind_r8, &
525 staggerloc=esmf_staggerloc_center, &
526 ungriddedlbound=(/1/), &
528 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
529 call error_handler(
"IN FieldCreate", rc)
531 print*,
"- CALL FieldCreate FOR TARGET GRID VERTICAL VELOCITY BEFORE ADJUSTMENT." 533 typekind=esmf_typekind_r8, &
534 staggerloc=esmf_staggerloc_center, &
535 ungriddedlbound=(/1/), &
537 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
538 call error_handler(
"IN FieldCreate", rc)
540 print*,
"- CALL FieldCreate FOR TARGET GRID xwind." 542 typekind=esmf_typekind_r8, &
543 staggerloc=esmf_staggerloc_center, &
544 ungriddedlbound=(/1/), &
546 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
547 call error_handler(
"IN FieldCreate", rc)
549 print*,
"- CALL FieldCreate FOR TARGET GRID ywind." 551 typekind=esmf_typekind_r8, &
552 staggerloc=esmf_staggerloc_center, &
553 ungriddedlbound=(/1/), &
555 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
556 call error_handler(
"IN FieldCreate", rc)
558 print*,
"- CALL FieldCreate FOR TARGET GRID zwind." 560 typekind=esmf_typekind_r8, &
561 staggerloc=esmf_staggerloc_center, &
562 ungriddedlbound=(/1/), &
564 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
565 call error_handler(
"IN FieldCreate", rc)
567 print*,
"- CALL FieldCreate FOR TARGET TERRAIN." 569 typekind=esmf_typekind_r8, &
570 staggerloc=esmf_staggerloc_center, rc=rc)
571 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
572 call error_handler(
"IN FieldCreate", rc)
574 print*,
"- CALL FieldCreate FOR TARGET SURFACE PRESSURE BEFORE ADJUSTMENT." 576 typekind=esmf_typekind_r8, &
577 staggerloc=esmf_staggerloc_center, rc=rc)
578 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
579 call error_handler(
"IN FieldCreate", rc)
595 print*,
"- CALL FieldCreate FOR TARGET GRID TRACERS ", trim(
tracers(n))
597 typekind=esmf_typekind_r8, &
598 staggerloc=esmf_staggerloc_center, &
599 ungriddedlbound=(/1/), &
601 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
602 call error_handler(
"IN FieldCreate", rc)
605 print*,
"- CALL FieldCreate FOR TARGET GRID TEMPERATURE." 607 typekind=esmf_typekind_r8, &
608 staggerloc=esmf_staggerloc_center, &
609 ungriddedlbound=(/1/), &
611 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
612 call error_handler(
"IN FieldCreate", rc)
614 print*,
"- CALL FieldCreate FOR TARGET GRID PRESSURE." 616 typekind=esmf_typekind_r8, &
617 staggerloc=esmf_staggerloc_center, &
618 ungriddedlbound=(/1/), &
620 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
621 call error_handler(
"IN FieldCreate", rc)
623 print*,
"- CALL FieldCreate FOR TARGET GRID VERTICAL VELOCITY." 625 typekind=esmf_typekind_r8, &
626 staggerloc=esmf_staggerloc_center, &
627 ungriddedlbound=(/1/), &
629 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
630 call error_handler(
"IN FieldCreate", rc)
632 print*,
"- CALL FieldCreate FOR TARGET GRID DELP." 634 typekind=esmf_typekind_r8, &
635 staggerloc=esmf_staggerloc_center, &
636 ungriddedlbound=(/1/), &
638 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
639 call error_handler(
"IN FieldCreate", rc)
641 print*,
"- CALL FieldCreate FOR TARGET GRID xwind." 643 typekind=esmf_typekind_r8, &
644 staggerloc=esmf_staggerloc_center, &
645 ungriddedlbound=(/1/), &
647 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
648 call error_handler(
"IN FieldCreate", rc)
650 print*,
"- CALL FieldCreate FOR TARGET GRID ywind." 652 typekind=esmf_typekind_r8, &
653 staggerloc=esmf_staggerloc_center, &
654 ungriddedlbound=(/1/), &
656 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
657 call error_handler(
"IN FieldCreate", rc)
659 print*,
"- CALL FieldCreate FOR TARGET GRID zwind." 661 typekind=esmf_typekind_r8, &
662 staggerloc=esmf_staggerloc_center, &
663 ungriddedlbound=(/1/), &
665 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
666 call error_handler(
"IN FieldCreate", rc)
668 print*,
"- CALL FieldCreate FOR TARGET HEIGHT." 670 typekind=esmf_typekind_r8, &
671 staggerloc=esmf_staggerloc_center, &
672 ungriddedlbound=(/1/), &
674 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
675 call error_handler(
"IN FieldCreate", rc)
677 print*,
"- CALL FieldCreate FOR TARGET U_S." 679 typekind=esmf_typekind_r8, &
680 staggerloc=esmf_staggerloc_edge2, &
681 ungriddedlbound=(/1/), &
683 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
684 call error_handler(
"IN FieldCreate", rc)
686 print*,
"- CALL FieldCreate FOR TARGET V_S." 688 typekind=esmf_typekind_r8, &
689 staggerloc=esmf_staggerloc_edge2, &
690 ungriddedlbound=(/1/), &
692 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
693 call error_handler(
"IN FieldCreate", rc)
695 print*,
"- CALL FieldCreate FOR TARGET xwind_S." 697 typekind=esmf_typekind_r8, &
698 staggerloc=esmf_staggerloc_edge2, &
699 ungriddedlbound=(/1/), &
701 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
702 call error_handler(
"IN FieldCreate", rc)
704 print*,
"- CALL FieldCreate FOR TARGET ywind_S." 706 typekind=esmf_typekind_r8, &
707 staggerloc=esmf_staggerloc_edge2, &
708 ungriddedlbound=(/1/), &
710 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
711 call error_handler(
"IN FieldCreate", rc)
713 print*,
"- CALL FieldCreate FOR TARGET zwind_S." 715 typekind=esmf_typekind_r8, &
716 staggerloc=esmf_staggerloc_edge2, &
717 ungriddedlbound=(/1/), &
719 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
720 call error_handler(
"IN FieldCreate", rc)
722 print*,
"- CALL FieldCreate FOR TARGET U_W." 724 typekind=esmf_typekind_r8, &
725 staggerloc=esmf_staggerloc_edge1, &
726 ungriddedlbound=(/1/), &
728 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
729 call error_handler(
"IN FieldCreate", rc)
731 print*,
"- CALL FieldCreate FOR TARGET V_W." 733 typekind=esmf_typekind_r8, &
734 staggerloc=esmf_staggerloc_edge1, &
735 ungriddedlbound=(/1/), &
737 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
738 call error_handler(
"IN FieldCreate", rc)
740 print*,
"- CALL FieldCreate FOR TARGET xwind_W." 742 typekind=esmf_typekind_r8, &
743 staggerloc=esmf_staggerloc_edge1, &
744 ungriddedlbound=(/1/), &
746 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
747 call error_handler(
"IN FieldCreate", rc)
749 print*,
"- CALL FieldCreate FOR TARGET ywind_W." 751 typekind=esmf_typekind_r8, &
752 staggerloc=esmf_staggerloc_edge1, &
753 ungriddedlbound=(/1/), &
755 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
756 call error_handler(
"IN FieldCreate", rc)
758 print*,
"- CALL FieldCreate FOR TARGET zwind_W." 760 typekind=esmf_typekind_r8, &
761 staggerloc=esmf_staggerloc_edge1, &
762 ungriddedlbound=(/1/), &
764 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
765 call error_handler(
"IN FieldCreate", rc)
767 print*,
"- CALL FieldCreate FOR TARGET SURFACE PRESSURE." 769 typekind=esmf_typekind_r8, &
770 staggerloc=esmf_staggerloc_center, rc=rc)
771 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
772 call error_handler(
"IN FieldCreate", rc)
783 integer :: clb(3), cub(3)
784 integer :: i, j, k, rc
786 real(esmf_kind_r8),
pointer :: latptr(:,:)
787 real(esmf_kind_r8),
pointer :: lonptr(:,:)
788 real(esmf_kind_r8),
pointer :: uptr(:,:,:)
789 real(esmf_kind_r8),
pointer :: vptr(:,:,:)
790 real(esmf_kind_r8),
pointer :: xwindptr(:,:,:)
791 real(esmf_kind_r8),
pointer :: ywindptr(:,:,:)
792 real(esmf_kind_r8),
pointer :: zwindptr(:,:,:)
793 real(esmf_kind_r8) :: latrad, lonrad
799 print*,
'- CONVERT WINDS.' 801 print*,
"- CALL FieldGet FOR xwind_S." 803 computationallbound=clb, &
804 computationalubound=cub, &
805 farrayptr=xwindptr, rc=rc)
806 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
807 call error_handler(
"IN FieldGet", rc)
809 print*,
"- CALL FieldGet FOR ywind_S." 811 farrayptr=ywindptr, rc=rc)
812 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
813 call error_handler(
"IN FieldGet", rc)
815 print*,
"- CALL FieldGet FOR zwind_S." 817 farrayptr=zwindptr, rc=rc)
818 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
819 call error_handler(
"IN FieldGet", rc)
821 print*,
"- CALL FieldGet FOR U_S." 823 farrayptr=uptr, rc=rc)
824 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
825 call error_handler(
"IN FieldGet", rc)
827 print*,
"- CALL FieldGet FOR V_S." 829 farrayptr=vptr, rc=rc)
830 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
831 call error_handler(
"IN FieldGet", rc)
833 print*,
"- CALL FieldGet FOR LATITUDE_S." 835 farrayptr=latptr, rc=rc)
836 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
837 call error_handler(
"IN FieldGet", rc)
839 print*,
"- CALL FieldGet FOR LONGITUDE_S." 841 farrayptr=lonptr, rc=rc)
842 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
843 call error_handler(
"IN FieldGet", rc)
845 do i = clb(1), cub(1)
846 do j = clb(2), cub(2)
847 latrad = latptr(i,j) * acos(-1.) / 180.0
848 lonrad = lonptr(i,j) * acos(-1.) / 180.0
849 do k = clb(3), cub(3)
850 uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad)
851 vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + &
852 ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + &
853 zwindptr(i,j,k) * cos(latrad)
858 print*,
"- CALL FieldGet FOR xwind_w." 860 computationallbound=clb, &
861 computationalubound=cub, &
862 farrayptr=xwindptr, rc=rc)
863 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
864 call error_handler(
"IN FieldGet", rc)
866 print*,
"- CALL FieldGet FOR ywind_w." 868 farrayptr=ywindptr, rc=rc)
869 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
870 call error_handler(
"IN FieldGet", rc)
872 print*,
"- CALL FieldGet FOR zwind_w." 874 farrayptr=zwindptr, rc=rc)
875 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
876 call error_handler(
"IN FieldGet", rc)
878 print*,
"- CALL FieldGet FOR U_W." 880 farrayptr=uptr, rc=rc)
881 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
882 call error_handler(
"IN FieldGet", rc)
884 print*,
"- CALL FieldGet FOR V_W." 886 farrayptr=vptr, rc=rc)
887 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
888 call error_handler(
"IN FieldGet", rc)
890 print*,
"- CALL FieldGet FOR LATITUDE_W." 892 farrayptr=latptr, rc=rc)
893 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
894 call error_handler(
"IN FieldGet", rc)
896 print*,
"- CALL FieldGet FOR LONGITUDE_W." 898 farrayptr=lonptr, rc=rc)
899 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
900 call error_handler(
"IN FieldGet", rc)
902 do i = clb(1), cub(1)
903 do j = clb(2), cub(2)
904 latrad = latptr(i,j) * acos(-1.) / 180.0
905 lonrad = lonptr(i,j) * acos(-1.) / 180.0
906 do k = clb(3), cub(3)
907 uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad)
908 vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + &
909 ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + &
910 zwindptr(i,j,k) * cos(latrad)
948 subroutine newpr1(localpet)
951 integer,
intent(in) :: localpet
953 integer :: idsl, idvc, rc
954 integer :: i, j, k, clb(3), cub(3)
956 real(esmf_kind_r8),
parameter :: rd=287.05
957 real(esmf_kind_r8),
parameter :: cp=1004.6
958 real(esmf_kind_r8),
parameter :: rocp=rd/cp
959 real(esmf_kind_r8),
parameter :: rocp1=rocp+1
960 real(esmf_kind_r8),
parameter :: rocpr=1/rocp
962 real(esmf_kind_r8),
pointer :: delp_ptr(:,:,:)
963 real(esmf_kind_r8),
pointer :: pptr(:,:,:)
964 real(esmf_kind_r8),
pointer :: psptr(:,:)
965 real(esmf_kind_r8) :: ak, bk
966 real(esmf_kind_r8),
allocatable :: pi(:,:,:)
968 print*,
"COMPUTE 3-D PRESSURE FROM ADJUSTED SURFACE PRESSURE." 973 print*,
"- CALL FieldGet FOR 3-D PRES." 975 computationallbound=clb, &
976 computationalubound=cub, &
977 farrayptr=pptr, rc=rc)
978 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
979 call error_handler(
"IN FieldGet", rc)
981 print*,
"- CALL FieldGet FOR DELP." 983 computationallbound=clb, &
984 computationalubound=cub, &
985 farrayptr=delp_ptr, rc=rc)
986 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
987 call error_handler(
"IN FieldGet", rc)
989 print*,
"- CALL FieldGet FOR SURFACE PRESSURE AFTER ADJUSTMENT" 991 farrayptr=psptr, rc=rc)
992 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
993 call error_handler(
"IN FieldGet", rc)
995 allocate(pi(clb(1):cub(1),clb(2):cub(2),1:
levp1_target))
1001 do i= clb(1), cub(1)
1002 do j= clb(2), cub(2)
1003 pi(i,j,k) = ak + bk*psptr(i,j)
1008 do i= clb(1), cub(1)
1009 do j= clb(2), cub(2)
1010 delp_ptr(i,j,k) = pi(i,j,k) - pi(i,j,k+1)
1015 call error_handler(
"PROGRAM ONLY WORKS WITH IDVC 2", 1)
1020 do i= clb(1), cub(1)
1021 do j= clb(2), cub(2)
1022 pptr(i,j,k) = (pi(i,j,k)+pi(i,j,k+1))/2.0
1028 do i= clb(1), cub(1)
1029 do j= clb(2), cub(2)
1030 pptr(i,j,k) = ((pi(i,j,k)**rocp1-pi(i,j,k+1)**rocp1)/ &
1031 (rocp1*(pi(i,j,k)-pi(i,j,k+1))))**rocpr
1039 if (localpet == 0)
then 1040 print*,
'new pres ',pptr(clb(1),clb(2),:)
1041 print*,
'delp ',delp_ptr(clb(1),clb(2),:)
1059 subroutine newps(localpet)
1063 integer,
intent(in) :: localpet
1064 integer :: i, j, k, ii
1065 integer :: clb(3), cub(3), ls, rc
1067 real(esmf_kind_r8),
pointer :: pptr(:,:,:)
1068 real(esmf_kind_r8),
pointer :: psptr(:,:)
1069 real(esmf_kind_r8),
pointer :: psnewptr(:,:)
1070 real(esmf_kind_r8),
pointer :: tptr(:,:,:)
1071 real(esmf_kind_r8),
pointer :: qptr(:,:,:)
1072 real(esmf_kind_r8),
pointer :: zsptr(:,:)
1073 real(esmf_kind_r8),
pointer :: zsnewptr(:,:)
1074 real(esmf_kind_r8),
allocatable :: zu(:,:)
1075 real(esmf_kind_r8),
parameter :: beta=-6.5e-3
1076 real(esmf_kind_r8),
parameter :: epsilon=1.e-9
1077 real(esmf_kind_r8),
parameter :: g=9.80665
1078 real(esmf_kind_r8),
parameter :: rd=287.05
1079 real(esmf_kind_r8),
parameter :: rv=461.50
1080 real(esmf_kind_r8),
parameter :: gor=g/rd
1081 real(esmf_kind_r8),
parameter :: fv=rv/rd-1.
1082 real(esmf_kind_r8) :: ftv, fgam, apu, fz0
1083 real(esmf_kind_r8) :: atvu, atv, fz1, fp0
1084 real(esmf_kind_r8) :: apd, azd, agam, azu
1085 real(esmf_kind_r8) :: atvd, fp1, gamma, pu
1086 real(esmf_kind_r8) :: tvu, pd, tvd
1087 real(esmf_kind_r8) :: at, aq, ap, az
1089 ftv(at,aq)=at*(1+fv*aq)
1090 fgam(apu,atvu,apd,atvd)=-gor*log(atvd/atvu)/log(apd/apu)
1091 fz0(ap,atv,azd,apd)=azd+atv/gor*log(apd/ap)
1092 fz1(ap,atv,azd,apd,agam)=azd-atv/agam*((apd/ap)**(-agam/gor)-1)
1093 fp0(az,azu,apu,atvu)=apu*exp(-gor/atvu*(az-azu))
1094 fp1(az,azu,apu,atvu,agam)=apu*(1+agam/atvu*(az-azu))**(-gor/agam)
1096 print*,
"- ADJUST SURFACE PRESSURE FOR NEW TERRAIN." 1098 print*,
"- CALL FieldGet FOR 3-D PRES." 1100 computationallbound=clb, &
1101 computationalubound=cub, &
1102 farrayptr=pptr, rc=rc)
1103 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1104 call error_handler(
"IN FieldGet", rc)
1106 if(localpet==0)
then 1107 print*,
'old pres ',pptr(clb(1),clb(2),:)
1110 print*,
"- CALL FieldGet FOR TEMPERATURE" 1112 farrayptr=tptr, rc=rc)
1113 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1114 call error_handler(
"IN FieldGet", rc)
1119 if (trim(
tracers(ii)) ==
"sphum")
exit 1122 print*,
"- CALL FieldGet FOR SPECIFIC HUMIDITY" 1124 farrayptr=qptr, rc=rc)
1125 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1126 call error_handler(
"IN FieldGet", rc)
1128 print*,
"- CALL FieldGet FOR SURFACE PRESSURE BEFORE ADJUSTMENT" 1130 farrayptr=psptr, rc=rc)
1131 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1132 call error_handler(
"IN FieldGet", rc)
1134 print*,
"- CALL FieldGet FOR SURFACE PRESSURE AFTER ADJUSTMENT" 1136 farrayptr=psnewptr, rc=rc)
1137 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1138 call error_handler(
"IN FieldGet", rc)
1140 print*,
"- CALL FieldGet FOR OLD TERRAIN" 1142 farrayptr=zsptr, rc=rc)
1143 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1144 call error_handler(
"IN FieldGet", rc)
1146 print*,
"- CALL FieldGet FOR NEW TERRAIN" 1148 farrayptr=zsnewptr, rc=rc)
1149 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1150 call error_handler(
"IN FieldGet", rc)
1152 allocate(zu(clb(1):cub(1),clb(2):cub(2)))
1169 tvu=ftv(tptr(i,j,k),qptr(i,j,k))
1170 zu(i,j)=fz1(pu,tvu,zsptr(i,j),psptr(i,j),gamma)
1171 if(zsnewptr(i,j).le.zu(i,j))
then 1173 tvu=ftv(tptr(i,j,k),qptr(i,j,k))
1174 if(abs(gamma).gt.epsilon)
then 1175 psnewptr(i,j)=fp1(zsnewptr(i,j),zu(i,j),pu,tvu,gamma)
1177 psnewptr(i,j)=fp0(zsnewptr(i,j),zu(i,j),pu,tvu)
1194 if(psnewptr(i,j).eq.0)
then 1196 tvu=ftv(tptr(i,j,k),qptr(i,j,k))
1198 tvd=ftv(tptr(i,j,k-1),qptr(i,j,k-1))
1199 gamma=fgam(pu,tvu,pd,tvd)
1200 if(abs(gamma).gt.epsilon)
then 1201 zu(i,j)=fz1(pu,tvu,zu(i,j),pd,gamma)
1203 zu(i,j)=fz0(pu,tvu,zu(i,j),pd)
1205 if(zsnewptr(i,j).le.zu(i,j))
then 1206 if(abs(gamma).gt.epsilon)
then 1207 psnewptr(i,j)=fp1(zsnewptr(i,j),zu(i,j),pu,tvu,gamma)
1209 psnewptr(i,j)=fp0(zsnewptr(i,j),zu(i,j),pu,tvu)
1229 if(psnewptr(i,j).eq.0)
then 1231 tvu=ftv(tptr(i,j,k),qptr(i,j,k))
1232 psnewptr(i,j)=fp0(zsnewptr(i,j),zu(i,j),pu,tvu)
1240 if (localpet == 0)
then 1245 print*,
'sfcp adjust ',(zsnewptr(i,j)-zsptr(i,j)), psptr(i,j),psnewptr(i,j)
1250 end subroutine newps 1259 integer :: istat, n, k
1264 if (istat /= 0)
then 1265 call error_handler(
"OPENING VERTICAL COORD FILE", istat)
1269 if (istat /= 0)
then 1270 call error_handler(
"READING VERTICAL COORD FILE", istat)
1277 if (istat /= 0)
then 1278 call error_handler(
"READING VERTICAL COORD FILE", istat)
1295 integer :: isrctermprocessing, rc
1297 type(esmf_regridmethod_flag) :: method
1298 type(esmf_routehandle) :: regrid_bl
1300 isrctermprocessing=1
1302 print*,
"- CALL FieldCreate FOR TARGET GRID THOMP CLIMO QNIFA BEFORE ADJUSTMENT." 1304 typekind=esmf_typekind_r8, &
1305 staggerloc=esmf_staggerloc_center, &
1306 ungriddedlbound=(/1/), &
1308 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1309 call error_handler(
"IN FieldCreate", rc)
1311 print*,
"- CALL FieldCreate FOR TARGET GRID THOMP CLIMO QNWFA BEFORE ADJUSTMENT." 1313 typekind=esmf_typekind_r8, &
1314 staggerloc=esmf_staggerloc_center, &
1315 ungriddedlbound=(/1/), &
1317 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1318 call error_handler(
"IN FieldCreate", rc)
1320 print*,
"- CALL FieldCreate FOR TARGET GRID THOMP CLIMO PRESSURE BEFORE ADJUSTMENT." 1322 typekind=esmf_typekind_r8, &
1323 staggerloc=esmf_staggerloc_center, &
1324 ungriddedlbound=(/1/), &
1326 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1327 call error_handler(
"IN FieldCreate", rc)
1329 print*,
"- CALL FieldCreate FOR TARGET GRID THOMP CLIMO QNIFA." 1331 typekind=esmf_typekind_r8, &
1332 staggerloc=esmf_staggerloc_center, &
1333 ungriddedlbound=(/1/), &
1335 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1336 call error_handler(
"IN FieldCreate", rc)
1338 print*,
"- CALL FieldCreate FOR TARGET GRID THOMP CLIMO QNWFA." 1340 typekind=esmf_typekind_r8, &
1341 staggerloc=esmf_staggerloc_center, &
1342 ungriddedlbound=(/1/), &
1344 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1345 call error_handler(
"IN FieldCreate", rc)
1347 print*,
"- CALL FieldRegridStore FOR THOMPSON CLIMO FIELDS." 1349 method=esmf_regridmethod_bilinear
1353 polemethod=esmf_polemethod_allavg, &
1354 srctermprocessing=isrctermprocessing, &
1355 routehandle=regrid_bl, &
1356 regridmethod=method, rc=rc)
1357 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1358 call error_handler(
"IN FieldRegridStore", rc)
1360 print*,
"- CALL Field_Regrid FOR THOMP CLIMO QNIFA." 1363 routehandle=regrid_bl, &
1364 termorderflag=esmf_termorder_srcseq, rc=rc)
1365 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1366 call error_handler(
"IN FieldRegrid", rc)
1368 print*,
"- CALL Field_Regrid FOR THOMP CLIMO QNWFA." 1371 routehandle=regrid_bl, &
1372 termorderflag=esmf_termorder_srcseq, rc=rc)
1373 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1374 call error_handler(
"IN FieldRegrid", rc)
1376 print*,
"- CALL Field_Regrid FOR THOMP PRESSURE." 1379 routehandle=regrid_bl, &
1380 termorderflag=esmf_termorder_srcseq, rc=rc)
1381 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1382 call error_handler(
"IN FieldRegrid", rc)
1384 print*,
"- CALL FieldRegridRelease." 1385 call esmf_fieldregridrelease(routehandle=regrid_bl, rc=rc)
1386 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1387 call error_handler(
"IN FieldRegridRelease", rc)
1407 INTEGER :: CLB(3), CUB(3), RC
1408 INTEGER :: IM, KM1, KM2, NT
1411 REAL(ESMF_KIND_R8),
ALLOCATABLE :: Z1(:,:,:), Z2(:,:,:)
1412 REAL(ESMF_KIND_R8),
ALLOCATABLE :: C1(:,:,:,:),C2(:,:,:,:)
1414 REAL(ESMF_KIND_R8),
POINTER :: QNIFA1PTR(:,:,:)
1415 REAL(ESMF_KIND_R8),
POINTER :: QNIFA2PTR(:,:,:)
1416 REAL(ESMF_KIND_R8),
POINTER :: QNWFA1PTR(:,:,:)
1417 REAL(ESMF_KIND_R8),
POINTER :: QNWFA2PTR(:,:,:)
1418 REAL(ESMF_KIND_R8),
POINTER :: P1PTR(:,:,:)
1419 REAL(ESMF_KIND_R8),
POINTER :: P2PTR(:,:,:)
1421 print*,
"- VERTICALY INTERPOLATE THOMP MP CLIMO TRACERS." 1423 print*,
"- CALL FieldGet FOR 3-D THOMP PRES." 1425 computationallbound=clb, &
1426 computationalubound=cub, &
1427 farrayptr=p1ptr, rc=rc)
1428 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1429 call error_handler(
"IN FieldGet", rc)
1438 ALLOCATE(z2(clb(1):cub(1),clb(2):cub(2),
lev_target))
1440 ALLOCATE(c2(clb(1):cub(1),clb(2):cub(2),
lev_target,nt))
1444 print*,
"- CALL FieldGet FOR 3-D ADJUSTED PRESS" 1446 farrayptr=p2ptr, rc=rc)
1447 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1448 call error_handler(
"IN FieldGet", rc)
1455 print*,
"- CALL FieldGet FOR qnifa before vertical adjustment." 1457 farrayptr=qnifa1ptr, rc=rc)
1458 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1459 call error_handler(
"IN FieldGet", rc)
1461 c1(:,:,:,1) = qnifa1ptr(:,:,:)
1463 print*,
"- CALL FieldGet FOR qnwfa before vertical adjustment." 1465 farrayptr=qnwfa1ptr, rc=rc)
1466 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1467 call error_handler(
"IN FieldGet", rc)
1469 c1(:,:,:,2) = qnwfa1ptr(:,:,:)
1477 im = (cub(1)-clb(1)+1) * (cub(2)-clb(2)+1)
1481 CALL terp3(im,1,1,1,1,nt,(im*km1),(im*km2), &
1482 km1,im,im,z1,c1,km2,im,im,z2,c2)
1484 print*,
"- CALL FieldGet FOR ADJUSTED climo qnifa." 1486 farrayptr=qnifa2ptr, rc=rc)
1487 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1488 call error_handler(
"IN FieldGet", rc)
1490 print*,
"- CALL FieldGet FOR ADJUSTED climo qnwfa." 1492 farrayptr=qnwfa2ptr, rc=rc)
1493 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1494 call error_handler(
"IN FieldGet", rc)
1499 qnifa2ptr(i,j,k) = c2(i,j,k,1)
1500 qnwfa2ptr(i,j,k) = c2(i,j,k,2)
1505 DEALLOCATE (z1, z2, c1, c2)
1527 SUBROUTINE vintg_wam (YEAR,MONTH,DAY,HOUR,PF)
1533 INTEGER,
INTENT(IN) :: YEAR,MONTH,DAY,HOUR
1534 CHARACTER(*),
INTENT(IN) :: PF
1536 REAL(ESMF_KIND_R8),
PARAMETER :: AMO = 15.9994
1537 REAL(ESMF_KIND_R8),
PARAMETER :: AMO2 = 31.999
1538 REAL(ESMF_KIND_R8),
PARAMETER :: AMN2 = 28.013
1540 REAL(ESMF_KIND_R8) :: COE,WFUN(10),DEGLAT,HOLD
1541 REAL(ESMF_KIND_R8) :: SUMMASS,QVMASS,O3MASS
1542 INTEGER :: I, J, K, II, CLB(3), CUB(3), RC, KREF
1543 INTEGER :: IDAT(8),JDOW,JDAY,ICDAY
1545 REAL(ESMF_KIND_R8),
ALLOCATABLE :: TEMP(:),ON(:),O2N(:),N2N(:),PRMB(:)
1547 REAL(ESMF_KIND_R8),
POINTER :: LATPTR(:,:)
1548 REAL(ESMF_KIND_R8),
POINTER :: P1PTR(:,:,:)
1549 REAL(ESMF_KIND_R8),
POINTER :: P2PTR(:,:,:)
1550 REAL(ESMF_KIND_R8),
POINTER :: DZDT2PTR(:,:,:)
1551 REAL(ESMF_KIND_R8),
POINTER :: T2PTR(:,:,:)
1552 REAL(ESMF_KIND_R8),
POINTER :: Q2PTR(:,:,:)
1553 REAL(ESMF_KIND_R8),
POINTER :: QVPTR(:,:,:)
1554 REAL(ESMF_KIND_R8),
POINTER :: QOPTR(:,:,:)
1555 REAL(ESMF_KIND_R8),
POINTER :: O2PTR(:,:,:)
1556 REAL(ESMF_KIND_R8),
POINTER :: O3PTR(:,:,:)
1557 REAL(ESMF_KIND_R8),
POINTER :: XWIND2PTR(:,:,:)
1558 REAL(ESMF_KIND_R8),
POINTER :: YWIND2PTR(:,:,:)
1559 REAL(ESMF_KIND_R8),
POINTER :: ZWIND2PTR(:,:,:)
1563 print*,
"VINTG_WAM:- VERTICALY EXTEND FIELDS FOR WAM COLD START." 1574 CALL w3doxdat(idat,jdow,icday,jday)
1575 print *,
"VINTG_WAM: WAM START DATE FOR ICDAY=",icday
1579 wfun(k) = (k-1.0) / 9.0
1589 print*,
"VINTG_WAM:- CALL FieldGet FOR 3-D PRES." 1591 computationallbound=clb, &
1592 computationalubound=cub, &
1593 farrayptr=p1ptr, rc=rc)
1594 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1595 call error_handler(
"IN FieldGet", rc)
1599 print*,
"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED PRESS" 1601 farrayptr=p2ptr, rc=rc)
1602 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1603 call error_handler(
"IN FieldGet", rc)
1607 print*,
"VINTG_WAM - CALL FieldGet FOR LATITUDE_S." 1609 farrayptr=latptr, rc=rc)
1610 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1611 call error_handler(
"IN FieldGet", rc)
1615 print*,
"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED TEMP." 1617 farrayptr=t2ptr, rc=rc)
1618 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1619 call error_handler(
"IN FieldGet", rc)
1622 print*,
"VINTG_WAM:- CALL FieldGet FOR ADJUSTED VERTICAL VELOCITY." 1624 farrayptr=dzdt2ptr, rc=rc)
1625 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1626 call error_handler(
"IN FieldGet", rc)
1629 print*,
"VINTG_WAM:- CALL FieldGet FOR ADJUSTED WIND COMPONENTS." 1632 farrayptr=xwind2ptr, rc=rc)
1633 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1634 call error_handler(
"IN FieldGet", rc)
1637 farrayptr=ywind2ptr, rc=rc)
1638 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1639 call error_handler(
"IN FieldGet", rc)
1642 farrayptr=zwind2ptr, rc=rc)
1643 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1644 call error_handler(
"IN FieldGet", rc)
1653 IF(p2ptr(i,j,k).le.p1ptr(i,j,
lev_input))
THEN 1660 coe = p2ptr(i,j,k) / p2ptr(i,j,kref)
1661 xwind2ptr(i,j,k) = coe*xwind2ptr(i,j,k)
1662 ywind2ptr(i,j,k) = coe*ywind2ptr(i,j,k)
1663 zwind2ptr(i,j,k) = coe*zwind2ptr(i,j,k)
1664 dzdt2ptr(i,j,k) = coe*dzdt2ptr(i,j,k)
1675 print*,
"VINTG_WAM:- CALL FieldGet FOR 3-D TRACER ", trim(
tracers(ii))
1677 farrayptr=q2ptr, rc=rc)
1678 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1679 call error_handler(
"IN FieldGet", rc)
1684 IF(p2ptr(i,j,k).le.p1ptr(i,j,
lev_input))
THEN 1691 coe = min(1.0, p2ptr(i,j,k) / p2ptr(i,j,kref) )
1692 q2ptr(i,j,k) = coe * q2ptr(i,j,k)
1697 IF (trim(
tracers(ii)) ==
"sphum") qvptr => q2ptr
1698 IF (trim(
tracers(ii)) ==
"spo" ) qoptr => q2ptr
1699 IF (trim(
tracers(ii)) ==
"spo2" ) o2ptr => q2ptr
1700 IF (trim(
tracers(ii)) ==
"spo3" ) o3ptr => q2ptr
1710 deglat = latptr(i,j)
1712 prmb(k) = p2ptr(i,j,k) * 0.01
1717 summass = on(k)*amo+o2n(k)*amo2+n2n(k)*amn2
1718 qvmass = summass*qvptr(i,j,k)/(1.-qvptr(i,j,k))
1719 summass = summass+qvmass
1720 o3mass = summass*o3ptr(i,j,k)
1721 summass = summass+o3mass
1722 hold = 1.0 / summass
1723 qoptr(i,j,k) = on(k)*amo *hold
1724 o2ptr(i,j,k) = o2n(k)*amo2*hold
1725 o3ptr(i,j,k) = o3mass * hold
1726 qvptr(i,j,k) = qvmass * hold
1730 IF(p2ptr(i,j,k).le.p1ptr(i,j,
lev_input))
THEN 1737 t2ptr(i,j,k) = temp(k)
1740 t2ptr(i,j,k) = wfun(k-kref+11) * temp(k) + &
1741 (1.- wfun(k-kref+11)) * t2ptr(i,j,k)
1746 DEALLOCATE (temp, prmb, on, o2n, n2n)
1768 REAL(ESMF_KIND_R8),
PARAMETER :: DLTDZ=-6.5e-3*287.05/9.80665
1769 REAL(ESMF_KIND_R8),
PARAMETER :: DLPVDRT=-2.5e6/461.50
1770 REAL(ESMF_KIND_R8),
PARAMETER :: ONE = 1.0_esmf_kind_r8
1772 INTEGER :: I, J, K, CLB(3), CUB(3), RC
1773 INTEGER :: IM, KM1, KM2, NT, II
1775 REAL(ESMF_KIND_R8) :: DZ
1776 REAL(ESMF_KIND_R8),
ALLOCATABLE :: Z1(:,:,:), Z2(:,:,:)
1777 REAL(ESMF_KIND_R8),
ALLOCATABLE :: C1(:,:,:,:),C2(:,:,:,:)
1779 REAL(ESMF_KIND_R8),
POINTER :: P1PTR(:,:,:)
1780 REAL(ESMF_KIND_R8),
POINTER :: P2PTR(:,:,:)
1781 REAL(ESMF_KIND_R8),
POINTER :: DZDT1PTR(:,:,:)
1782 REAL(ESMF_KIND_R8),
POINTER :: DZDT2PTR(:,:,:)
1783 REAL(ESMF_KIND_R8),
POINTER :: T1PTR(:,:,:)
1784 REAL(ESMF_KIND_R8),
POINTER :: T2PTR(:,:,:)
1785 REAL(ESMF_KIND_R8),
POINTER :: Q1PTR(:,:,:)
1786 REAL(ESMF_KIND_R8),
POINTER :: Q2PTR(:,:,:)
1787 REAL(ESMF_KIND_R8),
POINTER :: XWIND1PTR(:,:,:)
1788 REAL(ESMF_KIND_R8),
POINTER :: YWIND1PTR(:,:,:)
1789 REAL(ESMF_KIND_R8),
POINTER :: ZWIND1PTR(:,:,:)
1790 REAL(ESMF_KIND_R8),
POINTER :: XWIND2PTR(:,:,:)
1791 REAL(ESMF_KIND_R8),
POINTER :: YWIND2PTR(:,:,:)
1792 REAL(ESMF_KIND_R8),
POINTER :: ZWIND2PTR(:,:,:)
1799 print*,
"- VERTICALY INTERPOLATE FIELDS." 1801 print*,
"- CALL FieldGet FOR 3-D PRES." 1803 computationallbound=clb, &
1804 computationalubound=cub, &
1805 farrayptr=p1ptr, rc=rc)
1806 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1807 call error_handler(
"IN FieldGet", rc)
1815 ALLOCATE(z1(clb(1):cub(1),clb(2):cub(2),
lev_input))
1816 ALLOCATE(z2(clb(1):cub(1),clb(2):cub(2),
lev_target))
1822 print*,
"- CALL FieldGet FOR 3-D ADJUSTED PRESS" 1824 farrayptr=p2ptr, rc=rc)
1825 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1826 call error_handler(
"IN FieldGet", rc)
1830 print*,
"- CALL FieldGet FOR x WIND." 1832 farrayptr=xwind1ptr, rc=rc)
1833 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1834 call error_handler(
"IN FieldGet", rc)
1836 c1(:,:,:,1) = xwind1ptr(:,:,:)
1838 print*,
"- CALL FieldGet FOR y WIND." 1840 farrayptr=ywind1ptr, rc=rc)
1841 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1842 call error_handler(
"IN FieldGet", rc)
1844 c1(:,:,:,2) = ywind1ptr(:,:,:)
1846 print*,
"- CALL FieldGet FOR z WIND." 1848 farrayptr=zwind1ptr, rc=rc)
1849 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1850 call error_handler(
"IN FieldGet", rc)
1852 c1(:,:,:,3) = zwind1ptr(:,:,:)
1854 print*,
"- CALL FieldGet FOR VERTICAL VELOCITY." 1856 farrayptr=dzdt1ptr, rc=rc)
1857 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1858 call error_handler(
"IN FieldGet", rc)
1860 c1(:,:,:,4) = dzdt1ptr(:,:,:)
1861 print*,
"MIN MAX W TARGETB4 IN VINTG = ", minval(dzdt1ptr(:,:,:)), maxval(dzdt1ptr(:,:,:))
1863 print*,
"- CALL FieldGet FOR 3-D TEMP." 1865 farrayptr=t1ptr, rc=rc)
1866 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1867 call error_handler(
"IN FieldGet", rc)
1869 c1(:,:,:,5) = t1ptr(:,:,:)
1873 print*,
"- CALL FieldGet FOR 3-D TRACERS ", trim(
tracers(i))
1875 farrayptr=q1ptr, rc=rc)
1876 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1877 call error_handler(
"IN FieldGet", rc)
1879 c1(:,:,:,5+i) = q1ptr(:,:,:)
1889 im = (cub(1)-clb(1)+1) * (cub(2)-clb(2)+1)
1894 CALL terp3(im,1,1,1,1,4+nt,(im*km1),(im*km2), &
1895 km1,im,im,z1,c1,km2,im,im,z2,c2)
1902 print*,
"- CALL FieldGet FOR 3-D ADJUSTED TEMP." 1904 farrayptr=t2ptr, rc=rc)
1905 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1906 call error_handler(
"IN FieldGet", rc)
1908 print*,
"- CALL FieldGet FOR ADJUSTED VERTICAL VELOCITY." 1910 farrayptr=dzdt2ptr, rc=rc)
1911 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1912 call error_handler(
"IN FieldGet", rc)
1914 print*,
"- CALL FieldGet FOR ADJUSTED xwind." 1916 farrayptr=xwind2ptr, rc=rc)
1917 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1918 call error_handler(
"IN FieldGet", rc)
1920 print*,
"- CALL FieldGet FOR ADJUSTED ywind." 1922 farrayptr=ywind2ptr, rc=rc)
1923 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1924 call error_handler(
"IN FieldGet", rc)
1926 print*,
"- CALL FieldGet FOR ADJUSTED zwind." 1928 farrayptr=zwind2ptr, rc=rc)
1929 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1930 call error_handler(
"IN FieldGet", rc)
1935 xwind2ptr(i,j,k)=c2(i,j,k,1)
1936 ywind2ptr(i,j,k)=c2(i,j,k,2)
1937 zwind2ptr(i,j,k)=c2(i,j,k,3)
1938 dzdt2ptr(i,j,k)=c2(i,j,k,4)
1939 dz=z2(i,j,k)-z1(i,j,1)
1941 t2ptr(i,j,k)=c2(i,j,k,5)
1943 t2ptr(i,j,k)=c1(i,j,1,5)*exp(dltdz*dz)
1951 print*,
"- CALL FieldGet FOR 3-D TRACER ", trim(
tracers(ii))
1953 farrayptr=q2ptr, rc=rc)
1954 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
1955 call error_handler(
"IN FieldGet", rc)
1957 IF (trim(
tracers(ii)) ==
"sphum")
THEN 1962 dz=z2(i,j,k)-z1(i,j,1)
1964 q2ptr(i,j,k) = c2(i,j,k,5+ii)
1966 q2ptr(i,j,k) = c1(i,j,1,5+ii)*exp(dlpvdrt*(one/t2ptr(i,j,k)-one/t1ptr(i,j,1))-dz)
1977 q2ptr(i,j,k) = c2(i,j,k,5+ii)
1986 DEALLOCATE (z1, z2, c1, c2)
1988 END SUBROUTINE vintg 2026 SUBROUTINE terp3(IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2, &
2027 KM1,KXZ1,KXQ1,Z1,Q1,KM2,KXZ2,KXQ2,Z2,Q2)
2029 INTEGER IM,IXZ1,IXQ1,IXZ2,IXQ2,NM,NXQ1,NXQ2
2030 INTEGER KM1,KXZ1,KXQ1,KM2,KXZ2,KXQ2
2033 REAL(ESMF_KIND_R8),
PARAMETER :: ONE = 1.0_esmf_kind_r8
2034 REAL(ESMF_KIND_R8) :: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1)
2035 REAL(ESMF_KIND_R8) :: Q1(1+(IM-1)*IXQ1+(KM1-1)*KXQ1+(NM-1)*NXQ1)
2036 REAL(ESMF_KIND_R8) :: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2)
2037 REAL(ESMF_KIND_R8) :: Q2(1+(IM-1)*IXQ2+(KM2-1)*KXQ2+(NM-1)*NXQ2)
2039 REAL(ESMF_KIND_R8) :: FFA(IM),FFB(IM),FFC(IM),FFD(IM)
2040 REAL(ESMF_KIND_R8) :: GGA(IM),GGB(IM),GGC(IM),GGD(IM)
2041 REAL(ESMF_KIND_R8) :: Z1A,Z1B,Z1C,Z1D,Q1A,Q1B,Q1C,Q1D,Z2S,Q2S
2046 CALL rsearch(im,km1,ixz1,kxz1,z1,km2,ixz2,kxz2,z2,1,im,k1s)
2060 IF(k1.EQ.1.OR.k1.EQ.km1-1)
THEN 2061 z2s=z2(1+(i-1)*ixz2+(k2-1)*kxz2)
2062 z1a=z1(1+(i-1)*ixz1+(k1-1)*kxz1)
2063 z1b=z1(1+(i-1)*ixz1+(k1+0)*kxz1)
2064 ffa(i)=(z2s-z1b)/(z1a-z1b)
2065 ffb(i)=(z2s-z1a)/(z1b-z1a)
2066 gga(i)=one/(z1a-z1b)
2067 ggb(i)=one/(z1b-z1a)
2068 ELSEIF(k1.GT.1.AND.k1.LT.km1-1)
THEN 2069 z2s=z2(1+(i-1)*ixz2+(k2-1)*kxz2)
2070 z1a=z1(1+(i-1)*ixz1+(k1-2)*kxz1)
2071 z1b=z1(1+(i-1)*ixz1+(k1-1)*kxz1)
2072 z1c=z1(1+(i-1)*ixz1+(k1+0)*kxz1)
2073 z1d=z1(1+(i-1)*ixz1+(k1+1)*kxz1)
2074 ffa(i)=(z2s-z1b)/(z1a-z1b)* &
2075 (z2s-z1c)/(z1a-z1c)* &
2077 ffb(i)=(z2s-z1a)/(z1b-z1a)* &
2078 (z2s-z1c)/(z1b-z1c)* &
2080 ffc(i)=(z2s-z1a)/(z1c-z1a)* &
2081 (z2s-z1b)/(z1c-z1b)* &
2083 ffd(i)=(z2s-z1a)/(z1d-z1a)* &
2084 (z2s-z1b)/(z1d-z1b)* &
2086 gga(i)= one/(z1a-z1b)* &
2087 (z2s-z1c)/(z1a-z1c)* &
2088 (z2s-z1d)/(z1a-z1d)+ &
2089 (z2s-z1b)/(z1a-z1b)* &
2091 (z2s-z1d)/(z1a-z1d)+ &
2092 (z2s-z1b)/(z1a-z1b)* &
2093 (z2s-z1c)/(z1a-z1c)* &
2095 ggb(i)= one/(z1b-z1a)* &
2096 (z2s-z1c)/(z1b-z1c)* &
2097 (z2s-z1d)/(z1b-z1d)+ &
2098 (z2s-z1a)/(z1b-z1a)* &
2100 (z2s-z1d)/(z1b-z1d)+ &
2101 (z2s-z1a)/(z1b-z1a)* &
2102 (z2s-z1c)/(z1b-z1c)* &
2104 ggc(i)= one/(z1c-z1a)* &
2105 (z2s-z1b)/(z1c-z1b)* &
2106 (z2s-z1d)/(z1c-z1d)+ &
2107 (z2s-z1a)/(z1c-z1a)* &
2109 (z2s-z1d)/(z1c-z1d)+ &
2110 (z2s-z1a)/(z1c-z1a)* &
2111 (z2s-z1b)/(z1c-z1b)* &
2113 ggd(i)= one/(z1d-z1a)* &
2114 (z2s-z1b)/(z1d-z1b)* &
2115 (z2s-z1c)/(z1d-z1c)+ &
2116 (z2s-z1a)/(z1d-z1a)* &
2118 (z2s-z1c)/(z1d-z1c)+ &
2119 (z2s-z1a)/(z1d-z1a)* &
2120 (z2s-z1b)/(z1d-z1b)* &
2130 q2s=q1(1+(i-1)*ixq1+(n-1)*nxq1)
2132 ELSEIF(k1.EQ.km1)
THEN 2133 q2s=q1(1+(i-1)*ixq1+(km1-1)*kxq1+(n-1)*nxq1)
2135 ELSEIF(k1.EQ.1.OR.k1.EQ.km1-1)
THEN 2136 q1a=q1(1+(i-1)*ixq1+(k1-1)*kxq1+(n-1)*nxq1)
2137 q1b=q1(1+(i-1)*ixq1+(k1+0)*kxq1+(n-1)*nxq1)
2138 q2s=ffa(i)*q1a+ffb(i)*q1b
2141 q1a=q1(1+(i-1)*ixq1+(k1-2)*kxq1+(n-1)*nxq1)
2142 q1b=q1(1+(i-1)*ixq1+(k1-1)*kxq1+(n-1)*nxq1)
2143 q1c=q1(1+(i-1)*ixq1+(k1+0)*kxq1+(n-1)*nxq1)
2144 q1d=q1(1+(i-1)*ixq1+(k1+1)*kxq1+(n-1)*nxq1)
2145 q2s=ffa(i)*q1a+ffb(i)*q1b+ffc(i)*q1c+ffd(i)*q1d
2147 IF(q2s.LT.min(q1b,q1c))
THEN 2150 ELSEIF(q2s.GT.max(q1b,q1c))
THEN 2155 q2(1+(i-1)*ixq2+(k2-1)*kxq2+(n-1)*nxq2)=q2s
2162 END SUBROUTINE terp3 2220 SUBROUTINE rsearch(IM,KM1,IXZ1,KXZ1,Z1,KM2,IXZ2,KXZ2,Z2,IXL2,KXL2,L2)
2223 INTEGER,
INTENT(IN) :: IM,KM1,IXZ1,KXZ1,KM2,IXZ2,KXZ2,IXL2,KXL2
2224 INTEGER,
INTENT(OUT) :: L2(1+(IM-1)*IXL2+(KM2-1)*KXL2)
2226 REAL(ESMF_KIND_R8),
INTENT(IN) :: Z1(1+(IM-1)*IXZ1+(KM1-1)*KXZ1)
2227 REAL(ESMF_KIND_R8),
INTENT(IN) :: Z2(1+(IM-1)*IXZ2+(KM2-1)*KXZ2)
2231 REAL(ESMF_KIND_R8) :: Z
2237 IF (z1(1+(i-1)*ixz1).LE.z1(1+(i-1)*ixz1+(km1-1)*kxz1))
THEN 2240 z=z2(1+(i-1)*ixz2+(k2-1)*kxz2)
2243 IF(z.LT.z1(1+(i-1)*ixz1+l*kxz1))
EXIT 2247 l2(1+(i-1)*ixl2+(k2-1)*kxl2)=l
2252 z=z2(1+(i-1)*ixz2+(k2-1)*kxz2)
2255 IF(z.GT.z1(1+(i-1)*ixz1+l*kxz1))
EXIT 2259 l2(1+(i-1)*ixl2+(k2-1)*kxl2)=l
2272 integer :: i,ii, j,k, rc, clb(2), cub(2)
2274 real(esmf_kind_r8),
allocatable :: pe0(:), pn0(:)
2275 real(esmf_kind_r8),
pointer :: psptr(:,:)
2276 real(esmf_kind_r8),
pointer :: zhsfcptr(:,:)
2277 real(esmf_kind_r8),
pointer :: zhptr(:,:,:)
2278 real(esmf_kind_r8),
pointer :: tptr(:,:,:)
2279 real(esmf_kind_r8),
pointer :: qptr(:,:,:)
2280 real(esmf_kind_r8) :: ak, bk, zvir, grd
2281 real(esmf_kind_r8),
parameter :: grav = 9.80665
2282 real(esmf_kind_r8),
parameter :: rdgas = 287.05
2283 real(esmf_kind_r8),
parameter :: rvgas = 461.50
2285 print*,
"- COMPUTE HEIGHT" 2287 print*,
"- CALL FieldGet FOR SURFACE PRESSURE" 2289 computationallbound=clb, &
2290 computationalubound=cub, &
2291 farrayptr=psptr, rc=rc)
2292 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2293 call error_handler(
"IN FieldGet", rc)
2295 print*,
"- CALL FieldGet FOR TERRAIN HEIGHT" 2297 farrayptr=zhsfcptr, rc=rc)
2298 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2299 call error_handler(
"IN FieldGet", rc)
2301 print*,
"- CALL FieldGet FOR HEIGHT" 2303 farrayptr=zhptr, rc=rc)
2304 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2305 call error_handler(
"IN FieldGet", rc)
2307 print*,
"- CALL FieldGet FOR TEMPERATURE" 2309 farrayptr=tptr, rc=rc)
2310 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2311 call error_handler(
"IN FieldGet", rc)
2314 if (trim(
tracers(ii)) ==
"sphum")
exit 2317 print*,
"- CALL FieldGet FOR SPECIFIC HUMIDITY" 2319 farrayptr=qptr, rc=rc)
2320 if(esmf_logfounderror(rctocheck=rc,msg=esmf_logerr_passthru,line=__line__,file=__file__)) &
2321 call error_handler(
"IN FieldGet", rc)
2324 zvir = rvgas/rdgas - 1.0_esmf_kind_r8
2329 do j = clb(2), cub(2)
2330 do i = clb(1), cub(1)
2337 pe0(k) = ak + bk*psptr(i,j)
2338 pn0(k) = log(pe0(k))
2341 zhptr(i,j,1) = zhsfcptr(i,j)
2344 zhptr(i,j,k) = zhptr(i,j,k-1)+tptr(i,j,k-1)*(1.+zvir*qptr(i,j,k-1))* &
2345 (pn0(k-1)-pn0(k))/grd
2351 deallocate(pe0, pn0)
2364 print*,
"- DESTROY TARGET GRID ATMOSPHERIC BEFORE ADJUSTMENT FIELDS." 2393 print*,
"- DESTROY LOCAL TARGET GRID ATMOSPHERIC FIELDS." subroutine compute_zh
Compute vertical level height.
subroutine newps(localpet)
Computes adjusted surface pressure given a new terrain height.
type(esmf_field) ywind_w_target_grid
y-component wind, 'west' edge
This module contains code to read the setup namelist file, handle the varmap file for GRIB2 data...
integer, public num_tracers_input
Number of atmospheric tracers in input file.
type(esmf_field), public v_w_target_grid
V-wind, 'west' edge of grid cell.
integer, public lev_thomp_mp_climo
number of vert lvls of Thompson climo data
type(esmf_field), public longitude_w_target_grid
longitude of 'west' edge of grid box, target grid
subroutine cleanup_target_atm_b4adj_data
Cleanup atmospheric field (before adjustment) objects.
subroutine create_atm_esmf_fields
Create target grid field objects.
subroutine terp3(IM, IXZ1, IXQ1, IXZ2, IXQ2, NM, NXQ1, NXQ2, KM1, KXZ1, KXQ1, Z1, Q1, KM2, KXZ2, KXQ2, Z2, Q2)
Cubically interpolate in one dimension.
integer, public cycle_mon
Cycle month.
type(esmf_field) temp_b4adj_target_grid
temp before vert adj
integer, public regional
For regional target grids.
type(esmf_field), public qnifa_climo_input_grid
number concentration of ice friendly nuclei.
character(len=20), dimension(max_tracers), public tracers
Name of each atmos tracer to be processed.
real(esmf_kind_r8), dimension(:,:), allocatable, public vcoord_target
Vertical coordinate.
subroutine vintg_thomp_mp_climo
Vertically interpolate atmospheric fields to target FV3 grid.
type(esmf_field) zwind_w_target_grid
z-component wind, 'west' edge
subroutine, public atmosphere_driver(localpet)
Driver routine to process for atmospheric fields.
type(esmf_field), public qnwfa_climo_input_grid
number concentration of water friendly nuclei.
integer, public cycle_year
Cycle year.
subroutine, public read_thomp_mp_climo_data
Read Thompson climatological MP data file and time interpolate data to current cycle time...
subroutine, public read_vcoord_info
Reads model vertical coordinate definition file (as specified by namelist variable vcoord_file_target...
type(esmf_field), public longitude_s_target_grid
longitude of 'south' edge of grid box, target grid
Sets up the ESMF grid objects for the input data grid and target FV3 grid.
type(esmf_field), public qnifa_climo_target_grid
Number concentration of ice friendly aerosols.
type(esmf_field) zwind_target_grid
z-component wind, grid box center
subroutine vintg
Vertically interpolate upper-air fields.
integer, public cycle_day
Cycle day.
type(esmf_field), public latitude_s_target_grid
latitude of 'south' edge of grid box, target grid
type(esmf_field), public zh_target_grid
3-d height.
type(esmf_field) pres_b4adj_target_grid
3-d pres before terrain adj
type(esmf_grid), public target_grid
target grid esmf grid object.
type(esmf_field) xwind_w_target_grid
x-component wind, 'west' edge
type(esmf_field), public latitude_w_target_grid
latitude of 'west' edge of grid box, target grid
type(esmf_field), public delp_target_grid
Pressure thickness.
integer, public lev_target
Number of vertical levels.
Module to read the Thompson climatological MP data file and set up the associated esmf field and grid...
subroutine cleanup_all_target_atm_data
Cleanup target grid atmospheric field objects.
logical, public wam_cold_start
When true, cold start for whole atmosphere model.
subroutine horiz_interp_thomp_mp_climo
Horizontally interpolate thompson microphysics data to the target model grid.
character(len=500), public vcoord_file_target_grid
Vertical coordinate definition file.
Module to hold variables and ESMF fields associated with the target grid atmospheric data...
subroutine newpr1(localpet)
Computes 3-D pressure given an adjusted surface pressure.
type(esmf_field) pres_target_grid
3-d pressure
type(esmf_field) zwind_s_target_grid
z-component wind, 'south' edge
type(esmf_field) ywind_s_target_grid
y-component wind, 'south' edge
type(esmf_field) terrain_interp_to_target_grid
Input grid terrain interpolated to target grid.
subroutine convert_winds_to_uv
Convert 3-d component winds to u and v.
type(esmf_field) xwind_s_target_grid
x-component wind, 'south' edge
character(len=500), public atm_weight_file
File containing pre-computed weights to horizontally interpolate atmospheric fields.
type(esmf_field), public qnwfa_climo_target_grid
Number concentration of water friendly aerosols.
type(esmf_field), public v_s_target_grid
V-wind, 'south' edge of grid cell.
type(esmf_field) zwind_b4adj_target_grid
z-component wind, before vert adj
type(esmf_field) thomp_pres_climo_b4adj_target_grid
pressure of each level on target grid
integer, public nvcoord_target
Number of vertical coordinate variables.
type(esmf_field) xwind_target_grid
x-component wind, grid box center
subroutine gettemp(iday, xlat, pr, np, pf, temp, n_o, n_o2, n_n2)
Routine that computes temperature and neutral density values utilizing MSIS 2.1.
type(esmf_field) ywind_target_grid
y-component wind, grid box center
type(esmf_field), public u_s_target_grid
U-wind, 'south' edge of grid cell.
type(esmf_field), public ps_target_grid
Surface pressure.
type(esmf_field), dimension(:), allocatable tracers_b4adj_target_grid
tracers before vert adj
type(esmf_field), public u_w_target_grid
U-wind, 'west' edge of grid cell.
type(esmf_field), public thomp_pres_climo_input_grid
3-d pressure of the Thompson climo data points
Process atmospheric fields.
subroutine, public cleanup_thomp_mp_climo_input_data
Free up memory associated with this module.
integer, public num_tracers
Number of atmospheric tracers to be processed.
type(esmf_field), public terrain_target_grid
terrain height target grid
type(esmf_field) ps_b4adj_target_grid
sfc pres before terrain adj
type(esmf_field), public temp_target_grid
Temperautre.
integer, public levp1_target
Number of vertical levels plus 1.
character(len=500), public wam_parm_file
Full path to msis21.parm for WAM initialization.
subroutine vintg_wam(YEAR, MONTH, DAY, HOUR, PF)
Vertically extend model top into thermosphere for whole atmosphere model.
logical, public use_thomp_mp_climo
When true, read and process Thompson MP climatological tracers.
type(esmf_field), dimension(:), allocatable, public tracers_target_grid
Tracers.
integer, public cycle_hour
Cycle hour.
subroutine rsearch(IM, KM1, IXZ1, KXZ1, Z1, KM2, IXZ2, KXZ2, Z2, IXL2, KXL2, L2)
Search for a surrounding real interval.
type(esmf_field), public dzdt_target_grid
Vertical velocity.
type(esmf_field) qnifa_climo_b4adj_target_grid
number concentration of ice friendly aerosols before vert adj
type(esmf_field) xwind_b4adj_target_grid
x-component wind, before vert adj
subroutine, public cleanup_atmosphere_target_data
Free up memory for fields and variables in this module.
subroutine create_atm_b4adj_esmf_fields
Create target grid field objects to hold data before vertical interpolation.
type(esmf_field) ywind_b4adj_target_grid
y-component wind, before vert adj
type(esmf_field) dzdt_b4adj_target_grid
vertical vel before vert adj
type(esmf_field) qnwfa_climo_b4adj_target_grid
number concentration of water friendly aerosols before vert adj