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)
470 call vintg_thomp_mp_climo
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)
1403 SUBROUTINE vintg_thomp_mp_climo
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)
1511 END SUBROUTINE vintg_thomp_mp_climo
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)
1748 END SUBROUTINE vintg_wam
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
2264 END SUBROUTINE rsearch
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.
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.
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
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.
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.
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