From 9dc1a64b8e0786f92646f4cd791a24867797971a Mon Sep 17 00:00:00 2001 From: George Gayno Date: Fri, 25 Feb 2022 21:10:56 +0000 Subject: [PATCH 01/19] Replace 4-dimensional wind fields with 3-dimensional component winds. Fixes #633 --- sorc/chgres_cube.fd/atmosphere.F90 | 412 +++++++++++++++++++++++++---- sorc/chgres_cube.fd/input_data.F90 | 94 +++++-- 2 files changed, 437 insertions(+), 69 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index e00568a8a..c92c44aa8 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -25,7 +25,9 @@ module atmosphere tracers_input_grid, & dzdt_input_grid, & ps_input_grid, & - wind_input_grid, & + xwind_input_grid, & + ywind_input_grid, & + zwind_input_grid, & temp_input_grid, & pres_input_grid, & terrain_input_grid, & @@ -81,11 +83,23 @@ module atmosphere type(esmf_field), public :: u_s_target_grid !< u-wind, 'south' edge type(esmf_field), public :: v_s_target_grid !< v-wind, 'south' edge type(esmf_field) :: wind_target_grid !< 3-d wind, grid box center + type(esmf_field) :: xwind_target_grid !< 3-d wind, grid box center + type(esmf_field) :: ywind_target_grid !< 3-d wind, grid box center + type(esmf_field) :: zwind_target_grid !< 3-d wind, grid box center type(esmf_field) :: wind_b4adj_target_grid !< 3-d wind before vert adj + type(esmf_field) :: xwind_b4adj_target_grid !< 3-d wind before vert adj + type(esmf_field) :: ywind_b4adj_target_grid !< 3-d wind before vert adj + type(esmf_field) :: zwind_b4adj_target_grid !< 3-d wind before vert adj type(esmf_field) :: wind_s_target_grid !< 3-d wind, 'south' edge + type(esmf_field) :: xwind_s_target_grid !< 3-d wind, 'south' edge + type(esmf_field) :: ywind_s_target_grid !< 3-d wind, 'south' edge + type(esmf_field) :: zwind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field), public :: u_w_target_grid !< u-wind, 'west' edge type(esmf_field), public :: v_w_target_grid !< v-wind, 'west' edge type(esmf_field) :: wind_w_target_grid !< 3-d wind, 'west' edge + type(esmf_field) :: xwind_w_target_grid !< 3-d wind, 'west' edge + type(esmf_field) :: ywind_w_target_grid !< 3-d wind, 'west' edge + type(esmf_field) :: zwind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field), public :: zh_target_grid !< 3-d height ! Fields associated with thompson microphysics climatological tracers. @@ -284,14 +298,40 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR 3-D WIND." - call ESMF_FieldRegrid(wind_input_grid, & - wind_b4adj_target_grid, & +!print*,"- CALL Field_Regrid FOR 3-D WIND." +!call ESMF_FieldRegrid(wind_input_grid, & +! wind_b4adj_target_grid, & +! routehandle=regrid_bl, & +! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR x WIND." + call ESMF_FieldRegrid(xwind_input_grid, & + xwind_b4adj_target_grid, & routehandle=regrid_bl, & termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) + print*,"- CALL Field_Regrid FOR y WIND." + call ESMF_FieldRegrid(ywind_input_grid, & + ywind_b4adj_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR z WIND." + call ESMF_FieldRegrid(zwind_input_grid, & + zwind_b4adj_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + + print*,"- CALL FieldRegridRelease." call ESMF_FieldRegridRelease(routehandle=regrid_bl, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & @@ -351,8 +391,8 @@ subroutine atmosphere_driver(localpet) method=ESMF_REGRIDMETHOD_BILINEAR print*,"- CALL FieldRegridStore FOR 3D-WIND WEST EDGE." - call ESMF_FieldRegridStore(wind_target_grid, & - wind_w_target_grid, & + call ESMF_FieldRegridStore(xwind_target_grid, & + xwind_w_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & srctermprocessing=isrctermprocessing, & routehandle=regrid_bl, & @@ -361,14 +401,40 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) - print*,"- CALL Field_Regrid FOR 3-D WIND WEST EDGE." - call ESMF_FieldRegrid(wind_target_grid, & - wind_w_target_grid, & +!print*,"- CALL Field_Regrid FOR 3-D WIND WEST EDGE." +!call ESMF_FieldRegrid(wind_target_grid, & +! wind_w_target_grid, & +! routehandle=regrid_bl, & +! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." + call ESMF_FieldRegrid(xwind_target_grid, & + xwind_w_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." + call ESMF_FieldRegrid(ywind_target_grid, & + ywind_w_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." + call ESMF_FieldRegrid(zwind_target_grid, & + zwind_w_target_grid, & routehandle=regrid_bl, & termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) + + print*,"- CALL FieldRegridRelease." call ESMF_FieldRegridRelease(routehandle=regrid_bl, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & @@ -378,8 +444,8 @@ subroutine atmosphere_driver(localpet) method=ESMF_REGRIDMETHOD_BILINEAR print*,"- CALL FieldRegridStore FOR 3D-WIND SOUTH EDGE." - call ESMF_FieldRegridStore(wind_target_grid, & - wind_s_target_grid, & + call ESMF_FieldRegridStore(xwind_target_grid, & + xwind_s_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & srctermprocessing=isrctermprocessing, & routehandle=regrid_bl, & @@ -388,9 +454,33 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) - print*,"- CALL Field_Regrid FOR 3-D WIND SOUTH EDGE." - call ESMF_FieldRegrid(wind_target_grid, & - wind_s_target_grid, & +!print*,"- CALL Field_Regrid FOR 3-D WIND SOUTH EDGE." +!call ESMF_FieldRegrid(wind_target_grid, & +! wind_s_target_grid, & +! routehandle=regrid_bl, & +! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR xWIND SOUTH EDGE." + call ESMF_FieldRegrid(xwind_target_grid, & + xwind_s_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR yWIND SOUTH EDGE." + call ESMF_FieldRegrid(ywind_target_grid, & + ywind_s_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + + print*,"- CALL Field_Regrid FOR zWIND SOUTH EDGE." + call ESMF_FieldRegrid(zwind_target_grid, & + zwind_s_target_grid, & routehandle=regrid_bl, & termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & @@ -484,15 +574,42 @@ subroutine create_atm_b4adj_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET GRID UNSTAGGERED WINDS BEFORE ADJUSTMENT." - wind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & + print*,"- CALL FieldCreate FOR TARGET GRID xwind." + xwind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & staggerloc=ESMF_STAGGERLOC_CENTER, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_input,3/), rc=rc) + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET GRID ywind." + ywind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET GRID zwind." + zwind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + +!print*,"- CALL FieldCreate FOR TARGET GRID UNSTAGGERED WINDS BEFORE ADJUSTMENT." +!wind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & +! typekind=ESMF_TYPEKIND_R8, & +! staggerloc=ESMF_STAGGERLOC_CENTER, & +! ungriddedLBound=(/1,1/), & +! ungriddedUBound=(/lev_input,3/), rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET TERRAIN." terrain_interp_to_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -567,24 +684,51 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET HEIGHT." - zh_target_grid = ESMF_FieldCreate(target_grid, & + print*,"- CALL FieldCreate FOR TARGET GRID xwind." + xwind_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & staggerloc=ESMF_STAGGERLOC_CENTER, & ungriddedLBound=(/1/), & - ungriddedUBound=(/levp1_target/), rc=rc) + ungriddedUBound=(/lev_target/), rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET UNSTAGGERED 3D-WIND." - wind_target_grid = ESMF_FieldCreate(target_grid, & + print*,"- CALL FieldCreate FOR TARGET GRID ywind." + ywind_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & staggerloc=ESMF_STAGGERLOC_CENTER, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_target,3/), rc=rc) + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET GRID zwind." + zwind_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET HEIGHT." + zh_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/levp1_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + +!print*,"- CALL FieldCreate FOR TARGET UNSTAGGERED 3D-WIND." +!wind_target_grid = ESMF_FieldCreate(target_grid, & +! typekind=ESMF_TYPEKIND_R8, & +! staggerloc=ESMF_STAGGERLOC_CENTER, & +! ungriddedLBound=(/1,1/), & +! ungriddedUBound=(/lev_target,3/), rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET U_S." u_s_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -603,6 +747,33 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET xwind_S." + xwind_s_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE2, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET ywind_S." + ywind_s_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE2, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET zwind_S." + zwind_s_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE2, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET 3D-WIND_S." wind_s_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -630,6 +801,33 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET xwind_W." + xwind_w_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE1, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET ywind_W." + ywind_w_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE1, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR TARGET zwind_W." + zwind_w_target_grid = ESMF_FieldCreate(target_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_EDGE1, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_target/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR TARGET 3D-WIND_W." wind_w_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -663,6 +861,9 @@ subroutine convert_winds real(esmf_kind_r8), pointer :: uptr(:,:,:) real(esmf_kind_r8), pointer :: vptr(:,:,:) real(esmf_kind_r8), pointer :: windptr(:,:,:,:) + real(esmf_kind_r8), pointer :: xwindptr(:,:,:) + real(esmf_kind_r8), pointer :: ywindptr(:,:,:) + real(esmf_kind_r8), pointer :: zwindptr(:,:,:) real(esmf_kind_r8) :: latrad, lonrad !----------------------------------------------------------------------------------- @@ -679,6 +880,24 @@ subroutine convert_winds if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) + print*,"- CALL FieldGet FOR xwind_S." + call ESMF_FieldGet(xwind_s_target_grid, & + farrayPtr=xwindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR ywind_S." + call ESMF_FieldGet(ywind_s_target_grid, & + farrayPtr=ywindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR zwind_S." + call ESMF_FieldGet(zwind_s_target_grid, & + farrayPtr=zwindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + print*,"- CALL FieldGet FOR U_S." call ESMF_FieldGet(u_s_target_grid, & farrayPtr=uptr, rc=rc) @@ -708,10 +927,14 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) - uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) - vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & - windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & - windptr(i,j,k,3) * cos(latrad) +! uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) + uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad) +! vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & +! windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & +! windptr(i,j,k,3) * cos(latrad) + vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + & + ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + & + zwindptr(i,j,k) * cos(latrad) enddo enddo enddo @@ -725,6 +948,24 @@ subroutine convert_winds if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) + print*,"- CALL FieldGet FOR xwind_w." + call ESMF_FieldGet(xwind_w_target_grid, & + farrayPtr=xwindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR ywind_w." + call ESMF_FieldGet(ywind_w_target_grid, & + farrayPtr=ywindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR zwind_w." + call ESMF_FieldGet(zwind_w_target_grid, & + farrayPtr=zwindptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + print*,"- CALL FieldGet FOR U_W." call ESMF_FieldGet(u_w_target_grid, & farrayPtr=uptr, rc=rc) @@ -754,10 +995,14 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) - uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) - vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & - windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & - windptr(i,j,k,3) * cos(latrad) +! uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) + uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad) +! vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & +! windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & +! windptr(i,j,k,3) * cos(latrad) + vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + & + ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + & + zwindptr(i,j,k) * cos(latrad) enddo enddo enddo @@ -1473,10 +1718,10 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) ! wind print*,"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED WIND." - call ESMF_FieldGet(wind_target_grid, & - farrayPtr=WIND2PTR, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldGet", rc) +!call ESMF_FieldGet(wind_target_grid, & +! farrayPtr=WIND2PTR, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) ! ! determine vertical blending point and modified extrapolation values @@ -1624,7 +1869,13 @@ SUBROUTINE VINTG REAL(ESMF_KIND_R8), POINTER :: Q1PTR(:,:,:) ! input tracer REAL(ESMF_KIND_R8), POINTER :: Q2PTR(:,:,:) ! output tracer REAL(ESMF_KIND_R8), POINTER :: WIND1PTR(:,:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: xWIND1PTR(:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: yWIND1PTR(:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: zWIND1PTR(:,:,:) ! input wind (x,y,z components) REAL(ESMF_KIND_R8), POINTER :: WIND2PTR(:,:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: xWIND2PTR(:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: yWIND2PTR(:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: zWIND2PTR(:,:,:) ! input wind (x,y,z components) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! COMPUTE LOG PRESSURE INTERPOLATING COORDINATE @@ -1662,16 +1913,40 @@ SUBROUTINE VINTG Z2 = -LOG(P2PTR) - print*,"- CALL FieldGet FOR 3-D WIND." - call ESMF_FieldGet(wind_b4adj_target_grid, & - farrayPtr=WIND1PTR, rc=rc) +!print*,"- CALL FieldGet FOR 3-D WIND." +!call ESMF_FieldGet(wind_b4adj_target_grid, & +! farrayPtr=WIND1PTR, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) + +!C1(:,:,:,1) = WIND1PTR(:,:,:,1) +!C1(:,:,:,2) = WIND1PTR(:,:,:,2) +!C1(:,:,:,3) = WIND1PTR(:,:,:,3) + + print*,"- CALL FieldGet FOR x WIND." + call ESMF_FieldGet(xwind_b4adj_target_grid, & + farrayPtr=xWIND1PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - C1(:,:,:,1) = WIND1PTR(:,:,:,1) - C1(:,:,:,2) = WIND1PTR(:,:,:,2) - C1(:,:,:,3) = WIND1PTR(:,:,:,3) - + C1(:,:,:,1) = xWIND1PTR(:,:,:) + + print*,"- CALL FieldGet FOR y WIND." + call ESMF_FieldGet(ywind_b4adj_target_grid, & + farrayPtr=yWIND1PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + C1(:,:,:,2) = yWIND1PTR(:,:,:) + + print*,"- CALL FieldGet FOR z WIND." + call ESMF_FieldGet(zwind_b4adj_target_grid, & + farrayPtr=zWIND1PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + C1(:,:,:,3) = zWIND1PTR(:,:,:) + print*,"- CALL FieldGet FOR VERTICAL VELOCITY." call ESMF_FieldGet(dzdt_b4adj_target_grid, & farrayPtr=DZDT1PTR, rc=rc) @@ -1732,18 +2007,39 @@ SUBROUTINE VINTG if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - print*,"- CALL FieldGet FOR 3-D ADJUSTED WIND." - call ESMF_FieldGet(wind_target_grid, & - farrayPtr=WIND2PTR, rc=rc) + print*,"- CALL FieldGet FOR ADJUSTED xwind." + call ESMF_FieldGet(xwind_target_grid, & + farrayPtr=xwind2PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR ADJUSTED ywind." + call ESMF_FieldGet(ywind_target_grid, & + farrayPtr=ywind2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) + print*,"- CALL FieldGet FOR ADJUSTED zwind." + call ESMF_FieldGet(zwind_target_grid, & + farrayPtr=zwind2PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + +!print*,"- CALL FieldGet FOR 3-D ADJUSTED WIND." +!call ESMF_FieldGet(wind_target_grid, & +! farrayPtr=WIND2PTR, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) + DO K=1,LEV_TARGET DO I=CLB(1),CUB(1) DO J=CLB(2),CUB(2) - WIND2PTR(I,J,K,1)=C2(I,J,K,1) - WIND2PTR(I,J,K,2)=C2(I,J,K,2) - WIND2PTR(I,J,K,3)=C2(I,J,K,3) + xWIND2PTR(I,J,K)=C2(I,J,K,1) + yWIND2PTR(I,J,K)=C2(I,J,K,2) + zWIND2PTR(I,J,K)=C2(I,J,K,3) +! WIND2PTR(I,J,K,1)=C2(I,J,K,1) +! WIND2PTR(I,J,K,2)=C2(I,J,K,2) +! WIND2PTR(I,J,K,3)=C2(I,J,K,3) DZDT2PTR(I,J,K)=C2(I,J,K,4) DZ=Z2(I,J,K)-Z1(I,J,1) IF(DZ.GE.0) THEN @@ -2172,7 +2468,10 @@ subroutine cleanup_target_atm_b4adj_data print*,"- DESTROY TARGET GRID ATMOSPHERIC BEFORE ADJUSTMENT FIELDS." - call ESMF_FieldDestroy(wind_b4adj_target_grid, rc=rc) +!call ESMF_FieldDestroy(wind_b4adj_target_grid, rc=rc) + call ESMF_FieldDestroy(xwind_b4adj_target_grid, rc=rc) + call ESMF_FieldDestroy(ywind_b4adj_target_grid, rc=rc) + call ESMF_FieldDestroy(zwind_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(dzdt_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(ps_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(pres_b4adj_target_grid, rc=rc) @@ -2204,9 +2503,18 @@ subroutine cleanup_target_atm_data call ESMF_FieldDestroy(temp_target_grid, rc=rc) call ESMF_FieldDestroy(u_s_target_grid, rc=rc) call ESMF_FieldDestroy(v_s_target_grid, rc=rc) - call ESMF_FieldDestroy(wind_target_grid, rc=rc) +!call ESMF_FieldDestroy(wind_target_grid, rc=rc) + call ESMF_FieldDestroy(xwind_target_grid, rc=rc) + call ESMF_FieldDestroy(ywind_target_grid, rc=rc) + call ESMF_FieldDestroy(zwind_target_grid, rc=rc) call ESMF_FieldDestroy(wind_s_target_grid, rc=rc) + call ESMF_FieldDestroy(xwind_s_target_grid, rc=rc) + call ESMF_FieldDestroy(ywind_s_target_grid, rc=rc) + call ESMF_FieldDestroy(zwind_s_target_grid, rc=rc) call ESMF_FieldDestroy(wind_w_target_grid, rc=rc) + call ESMF_FieldDestroy(xwind_w_target_grid, rc=rc) + call ESMF_FieldDestroy(ywind_w_target_grid, rc=rc) + call ESMF_FieldDestroy(zwind_w_target_grid, rc=rc) call ESMF_FieldDestroy(u_w_target_grid, rc=rc) call ESMF_FieldDestroy(v_w_target_grid, rc=rc) call ESMF_FieldDestroy(zh_target_grid, rc=rc) diff --git a/sorc/chgres_cube.fd/input_data.F90 b/sorc/chgres_cube.fd/input_data.F90 index 965c37df1..f2a9cfa32 100644 --- a/sorc/chgres_cube.fd/input_data.F90 +++ b/sorc/chgres_cube.fd/input_data.F90 @@ -59,7 +59,10 @@ module input_data type(esmf_field), public :: u_input_grid !< u/v wind at grid type(esmf_field), public :: v_input_grid !< box center - type(esmf_field), public :: wind_input_grid !< 3-component wind +!type(esmf_field), public :: wind_input_grid !< 3-component wind + type(esmf_field), public :: xwind_input_grid !< 3-component wind + type(esmf_field), public :: ywind_input_grid !< 3-component wind + type(esmf_field), public :: zwind_input_grid !< 3-component wind type(esmf_field), allocatable, public :: tracers_input_grid(:) !< tracers integer, public :: lev_input !< number of atmospheric layers @@ -452,14 +455,14 @@ subroutine init_atm_esmf_fields print*,"- INITIALIZE ATMOSPHERIC ESMF FIELDS." - print*,"- CALL FieldCreate FOR INPUT GRID 3-D WIND." - wind_input_grid = ESMF_FieldCreate(input_grid, & - typekind=ESMF_TYPEKIND_R8, & - staggerloc=ESMF_STAGGERLOC_CENTER, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_input,3/), rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldCreate", rc) +!print*,"- CALL FieldCreate FOR INPUT GRID 3-D WIND." +!wind_input_grid = ESMF_FieldCreate(input_grid, & +! typekind=ESMF_TYPEKIND_R8, & +! staggerloc=ESMF_STAGGERLOC_CENTER, & +! ungriddedLBound=(/1,1/), & +! ungriddedUBound=(/lev_input,3/), rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldCreate", rc) print*,"- CALL FieldCreate FOR INPUT GRID SURFACE PRESSURE." ps_input_grid = ESMF_FieldCreate(input_grid, & @@ -475,6 +478,34 @@ subroutine init_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) + print*,"- CALL FieldCreate FOR INPUT GRID xwind." + xwind_input_grid = ESMF_FieldCreate(input_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR INPUT GRID ywind." + ywind_input_grid = ESMF_FieldCreate(input_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR INPUT GRID zwind." + zwind_input_grid = ESMF_FieldCreate(input_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldCreate", rc) + + print*,"- CALL FieldCreate FOR INPUT GRID TEMPERATURE." temp_input_grid = ESMF_FieldCreate(input_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -6306,21 +6337,44 @@ subroutine convert_winds implicit none - integer :: clb(4), cub(4) + integer :: clb(3), cub(3) integer :: i, j, k, rc real(esmf_kind_r8) :: latrad, lonrad real(esmf_kind_r8), pointer :: windptr(:,:,:,:) + real(esmf_kind_r8), pointer :: xptr(:,:,:) + real(esmf_kind_r8), pointer :: yptr(:,:,:) + real(esmf_kind_r8), pointer :: zptr(:,:,:) real(esmf_kind_r8), pointer :: uptr(:,:,:) real(esmf_kind_r8), pointer :: vptr(:,:,:) real(esmf_kind_r8), pointer :: latptr(:,:) real(esmf_kind_r8), pointer :: lonptr(:,:) - print*,"- CALL FieldGet FOR 3-D WIND." - call ESMF_FieldGet(wind_input_grid, & +!print*,"- CALL FieldGet FOR 3-D WIND." +!call ESMF_FieldGet(wind_input_grid, & +! computationalLBound=clb, & +! computationalUBound=cub, & +! farrayPtr=windptr, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR x." + call ESMF_FieldGet(xwind_input_grid, & computationalLBound=clb, & computationalUBound=cub, & - farrayPtr=windptr, rc=rc) + farrayPtr=xptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR y." + call ESMF_FieldGet(ywind_input_grid, & + farrayPtr=yptr, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + print*,"- CALL FieldGet FOR z." + call ESMF_FieldGet(zwind_input_grid, & + farrayPtr=zptr, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) @@ -6353,9 +6407,12 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) - windptr(i,j,k,1) = uptr(i,j,k) * cos(lonrad) - vptr(i,j,k) * sin(latrad) * sin(lonrad) - windptr(i,j,k,2) = uptr(i,j,k) * sin(lonrad) + vptr(i,j,k) * sin(latrad) * cos(lonrad) - windptr(i,j,k,3) = vptr(i,j,k) * cos(latrad) +! windptr(i,j,k,1) = uptr(i,j,k) * cos(lonrad) - vptr(i,j,k) * sin(latrad) * sin(lonrad) + xptr(i,j,k) = uptr(i,j,k) * cos(lonrad) - vptr(i,j,k) * sin(latrad) * sin(lonrad) +! windptr(i,j,k,2) = uptr(i,j,k) * sin(lonrad) + vptr(i,j,k) * sin(latrad) * cos(lonrad) + yptr(i,j,k) = uptr(i,j,k) * sin(lonrad) + vptr(i,j,k) * sin(latrad) * cos(lonrad) +! windptr(i,j,k,3) = vptr(i,j,k) * cos(latrad) + zptr(i,j,k) = vptr(i,j,k) * cos(latrad) enddo enddo enddo @@ -6608,7 +6665,10 @@ subroutine cleanup_input_atm_data call ESMF_FieldDestroy(pres_input_grid, rc=rc) call ESMF_FieldDestroy(dzdt_input_grid, rc=rc) call ESMF_FieldDestroy(temp_input_grid, rc=rc) - call ESMF_FieldDestroy(wind_input_grid, rc=rc) +!call ESMF_FieldDestroy(wind_input_grid, rc=rc) + call ESMF_FieldDestroy(xwind_input_grid, rc=rc) + call ESMF_FieldDestroy(ywind_input_grid, rc=rc) + call ESMF_FieldDestroy(zwind_input_grid, rc=rc) call ESMF_FieldDestroy(ps_input_grid, rc=rc) do n = 1, num_tracers_input From 60ab18743100d9c7d4242d886dfdcdc39959cdb6 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 28 Feb 2022 15:56:24 +0000 Subject: [PATCH 02/19] Comment out all 4-d wind fields. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 72 +++++++++++++++--------------- sorc/chgres_cube.fd/input_data.F90 | 2 +- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index c92c44aa8..22184a78a 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -86,17 +86,17 @@ module atmosphere type(esmf_field) :: xwind_target_grid !< 3-d wind, grid box center type(esmf_field) :: ywind_target_grid !< 3-d wind, grid box center type(esmf_field) :: zwind_target_grid !< 3-d wind, grid box center - type(esmf_field) :: wind_b4adj_target_grid !< 3-d wind before vert adj +!type(esmf_field) :: wind_b4adj_target_grid !< 3-d wind before vert adj type(esmf_field) :: xwind_b4adj_target_grid !< 3-d wind before vert adj type(esmf_field) :: ywind_b4adj_target_grid !< 3-d wind before vert adj type(esmf_field) :: zwind_b4adj_target_grid !< 3-d wind before vert adj - type(esmf_field) :: wind_s_target_grid !< 3-d wind, 'south' edge +!type(esmf_field) :: wind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field) :: xwind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field) :: ywind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field) :: zwind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field), public :: u_w_target_grid !< u-wind, 'west' edge type(esmf_field), public :: v_w_target_grid !< v-wind, 'west' edge - type(esmf_field) :: wind_w_target_grid !< 3-d wind, 'west' edge +!type(esmf_field) :: wind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: xwind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: ywind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: zwind_w_target_grid !< 3-d wind, 'west' edge @@ -774,14 +774,14 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET 3D-WIND_S." - wind_s_target_grid = ESMF_FieldCreate(target_grid, & - typekind=ESMF_TYPEKIND_R8, & - staggerloc=ESMF_STAGGERLOC_EDGE2, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_target,3/), rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldCreate", rc) +!print*,"- CALL FieldCreate FOR TARGET 3D-WIND_S." +!wind_s_target_grid = ESMF_FieldCreate(target_grid, & +! typekind=ESMF_TYPEKIND_R8, & +! staggerloc=ESMF_STAGGERLOC_EDGE2, & +! ungriddedLBound=(/1,1/), & +! ungriddedUBound=(/lev_target,3/), rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldCreate", rc) print*,"- CALL FieldCreate FOR TARGET U_W." u_w_target_grid = ESMF_FieldCreate(target_grid, & @@ -828,14 +828,14 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET 3D-WIND_W." - wind_w_target_grid = ESMF_FieldCreate(target_grid, & - typekind=ESMF_TYPEKIND_R8, & - staggerloc=ESMF_STAGGERLOC_EDGE1, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_target,3/), rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldCreate", rc) +!print*,"- CALL FieldCreate FOR TARGET 3D-WIND_W." +!wind_w_target_grid = ESMF_FieldCreate(target_grid, & +! typekind=ESMF_TYPEKIND_R8, & +! staggerloc=ESMF_STAGGERLOC_EDGE1, & +! ungriddedLBound=(/1,1/), & +! ungriddedUBound=(/lev_target,3/), rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldCreate", rc) print*,"- CALL FieldCreate FOR TARGET SURFACE PRESSURE." ps_target_grid = ESMF_FieldCreate(target_grid, & @@ -860,7 +860,7 @@ subroutine convert_winds real(esmf_kind_r8), pointer :: lonptr(:,:) real(esmf_kind_r8), pointer :: uptr(:,:,:) real(esmf_kind_r8), pointer :: vptr(:,:,:) - real(esmf_kind_r8), pointer :: windptr(:,:,:,:) +!real(esmf_kind_r8), pointer :: windptr(:,:,:,:) real(esmf_kind_r8), pointer :: xwindptr(:,:,:) real(esmf_kind_r8), pointer :: ywindptr(:,:,:) real(esmf_kind_r8), pointer :: zwindptr(:,:,:) @@ -872,13 +872,13 @@ subroutine convert_winds print*,'- CONVERT WINDS.' - print*,"- CALL FieldGet FOR 3-D WIND_S." - call ESMF_FieldGet(wind_s_target_grid, & - computationalLBound=clb, & - computationalUBound=cub, & - farrayPtr=windptr, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldGet", rc) +!print*,"- CALL FieldGet FOR 3-D WIND_S." +!call ESMF_FieldGet(wind_s_target_grid, & +! computationalLBound=clb, & +! computationalUBound=cub, & +! farrayPtr=windptr, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) print*,"- CALL FieldGet FOR xwind_S." call ESMF_FieldGet(xwind_s_target_grid, & @@ -940,13 +940,13 @@ subroutine convert_winds enddo - print*,"- CALL FieldGet FOR 3-D WIND_W." - call ESMF_FieldGet(wind_w_target_grid, & - computationalLBound=clb, & - computationalUBound=cub, & - farrayPtr=windptr, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldGet", rc) +!print*,"- CALL FieldGet FOR 3-D WIND_W." +!call ESMF_FieldGet(wind_w_target_grid, & +! computationalLBound=clb, & +! computationalUBound=cub, & +! farrayPtr=windptr, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldGet", rc) print*,"- CALL FieldGet FOR xwind_w." call ESMF_FieldGet(xwind_w_target_grid, & @@ -2507,11 +2507,11 @@ subroutine cleanup_target_atm_data call ESMF_FieldDestroy(xwind_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_target_grid, rc=rc) - call ESMF_FieldDestroy(wind_s_target_grid, rc=rc) +!call ESMF_FieldDestroy(wind_s_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_s_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_s_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_s_target_grid, rc=rc) - call ESMF_FieldDestroy(wind_w_target_grid, rc=rc) +!call ESMF_FieldDestroy(wind_w_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_w_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_w_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_w_target_grid, rc=rc) diff --git a/sorc/chgres_cube.fd/input_data.F90 b/sorc/chgres_cube.fd/input_data.F90 index f2a9cfa32..cc00768f0 100644 --- a/sorc/chgres_cube.fd/input_data.F90 +++ b/sorc/chgres_cube.fd/input_data.F90 @@ -6341,7 +6341,7 @@ subroutine convert_winds integer :: i, j, k, rc real(esmf_kind_r8) :: latrad, lonrad - real(esmf_kind_r8), pointer :: windptr(:,:,:,:) +!real(esmf_kind_r8), pointer :: windptr(:,:,:,:) real(esmf_kind_r8), pointer :: xptr(:,:,:) real(esmf_kind_r8), pointer :: yptr(:,:,:) real(esmf_kind_r8), pointer :: zptr(:,:,:) From f584c91d8eb91bba579ee269015d7a6848ed8bd4 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 28 Feb 2022 19:20:10 +0000 Subject: [PATCH 03/19] Fix bug. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 22184a78a..bae9f07d4 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -853,7 +853,7 @@ subroutine convert_winds implicit none - integer :: clb(4), cub(4) + integer :: clb(3), cub(3) integer :: i, j, k, rc real(esmf_kind_r8), pointer :: latptr(:,:) @@ -882,6 +882,8 @@ subroutine convert_winds print*,"- CALL FieldGet FOR xwind_S." call ESMF_FieldGet(xwind_s_target_grid, & + computationalLBound=clb, & + computationalUBound=cub, & farrayPtr=xwindptr, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) @@ -950,6 +952,8 @@ subroutine convert_winds print*,"- CALL FieldGet FOR xwind_w." call ESMF_FieldGet(xwind_w_target_grid, & + computationalLBound=clb, & + computationalUBound=cub, & farrayPtr=xwindptr, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) From e121d0da153d8c7ffdee624591dfc2015de40ff2 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 7 Nov 2022 20:29:02 +0000 Subject: [PATCH 04/19] Add variable declaration. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index cd2da3357..88e75319a 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -2492,7 +2492,7 @@ subroutine cleanup_all_target_atm_data implicit none - integer :: rc + integer :: rc, i print*,"- DESTROY LOCAL TARGET GRID ATMOSPHERIC FIELDS." From 95f3bca91d5da3c92bfa73baf128f1811d5b293d Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Wed, 9 Nov 2022 15:12:19 +0000 Subject: [PATCH 05/19] Fix some bugs from the last merge. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 41 +++++++++++++++--------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 88e75319a..4f92602c1 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -94,13 +94,13 @@ module atmosphere type(esmf_field) :: xwind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field) :: ywind_s_target_grid !< 3-d wind, 'south' edge type(esmf_field) :: zwind_s_target_grid !< 3-d wind, 'south' edge - type(esmf_field), public :: u_w_target_grid !< u-wind, 'west' edge - type(esmf_field), public :: v_w_target_grid !< v-wind, 'west' edge +!type(esmf_field), public :: u_w_target_grid !< u-wind, 'west' edge +!type(esmf_field), public :: v_w_target_grid !< v-wind, 'west' edge !type(esmf_field) :: wind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: xwind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: ywind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: zwind_w_target_grid !< 3-d wind, 'west' edge - type(esmf_field), public :: zh_target_grid !< 3-d height +!type(esmf_field), public :: zh_target_grid !< 3-d height ! Fields associated with thompson microphysics climatological tracers. @@ -2492,17 +2492,18 @@ subroutine cleanup_all_target_atm_data implicit none - integer :: rc, i +!integer :: rc, i + integer :: rc print*,"- DESTROY LOCAL TARGET GRID ATMOSPHERIC FIELDS." - call ESMF_FieldDestroy(delp_target_grid, rc=rc) - call ESMF_FieldDestroy(dzdt_target_grid, rc=rc) - call ESMF_FieldDestroy(ps_target_grid, rc=rc) +!call ESMF_FieldDestroy(delp_target_grid, rc=rc) +!call ESMF_FieldDestroy(dzdt_target_grid, rc=rc) +!call ESMF_FieldDestroy(ps_target_grid, rc=rc) call ESMF_FieldDestroy(pres_target_grid, rc=rc) - call ESMF_FieldDestroy(temp_target_grid, rc=rc) - call ESMF_FieldDestroy(u_s_target_grid, rc=rc) - call ESMF_FieldDestroy(v_s_target_grid, rc=rc) +!call ESMF_FieldDestroy(temp_target_grid, rc=rc) +!call ESMF_FieldDestroy(u_s_target_grid, rc=rc) +!call ESMF_FieldDestroy(v_s_target_grid, rc=rc) !call ESMF_FieldDestroy(wind_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_target_grid, rc=rc) @@ -2515,19 +2516,19 @@ subroutine cleanup_all_target_atm_data call ESMF_FieldDestroy(xwind_w_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_w_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_w_target_grid, rc=rc) - call ESMF_FieldDestroy(u_w_target_grid, rc=rc) - call ESMF_FieldDestroy(v_w_target_grid, rc=rc) - call ESMF_FieldDestroy(zh_target_grid, rc=rc) +!call ESMF_FieldDestroy(u_w_target_grid, rc=rc) +!call ESMF_FieldDestroy(v_w_target_grid, rc=rc) +!call ESMF_FieldDestroy(zh_target_grid, rc=rc) - do i = 1, num_tracers - call ESMF_FieldDestroy(tracers_target_grid(i), rc=rc) - enddo +!do i = 1, num_tracers +! call ESMF_FieldDestroy(tracers_target_grid(i), rc=rc) +!enddo - deallocate(tracers_target_grid) +!deallocate(tracers_target_grid) - if (ESMF_FieldIsCreated(qnifa_climo_target_grid)) then - call ESMF_FieldDestroy(qnifa_climo_target_grid, rc=rc) - endif +!if (ESMF_FieldIsCreated(qnifa_climo_target_grid)) then +! call ESMF_FieldDestroy(qnifa_climo_target_grid, rc=rc) +!endif call cleanup_atmosphere_target_data From dde77c15b73f264de6791b2d3c770eac5f42772f Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Thu, 10 Nov 2022 13:05:08 +0000 Subject: [PATCH 06/19] Update to esmf v8.4 on wcoss2. Fixes #633. --- modulefiles/build.wcoss2.intel.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modulefiles/build.wcoss2.intel.lua b/modulefiles/build.wcoss2.intel.lua index e3869cc8a..7fa476848 100644 --- a/modulefiles/build.wcoss2.intel.lua +++ b/modulefiles/build.wcoss2.intel.lua @@ -73,7 +73,7 @@ load(pathJoin("nco", nco_ver)) setenv("HPC_OPT","/apps/ops/para/libs") prepend_path("MODULEPATH", "/apps/ops/para/libs/modulefiles/compiler/intel/19.1.3.304") prepend_path("MODULEPATH", "/apps/ops/para/libs/modulefiles/mpi/intel/19.1.3.304/cray-mpich/8.1.7") -esmf_ver=os.getenv("esmf_ver") or "8.2.1b04" +esmf_ver=os.getenv("esmf_ver") or "8.4.0b08" load(pathJoin("esmf", esmf_ver)) whatis("Description: UFS_UTILS build environment") From 57792e34e38dff0b67aa47cd17581ad02587eff4 Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Thu, 10 Nov 2022 13:07:20 +0000 Subject: [PATCH 07/19] Updates to run gdas init utility at C3072 C128. Fixes #633. --- util/gdas_init/config | 16 ++++++++-------- util/gdas_init/driver.wcoss2.sh | 7 ++++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/util/gdas_init/config b/util/gdas_init/config index 5ca148541..2321ff521 100644 --- a/util/gdas_init/config +++ b/util/gdas_init/config @@ -52,18 +52,18 @@ EXTRACT_DATA=no RUN_CHGRES=yes -yy=2022 -mm=05 -dd=06 -hh=06 +yy=2021 +mm=03 +dd=01 +hh=00 -use_v16retro=no +use_v16retro=yes -LEVS=65 +LEVS=128 -CDUMP=gdas +CDUMP=gfs -CRES_HIRES=C192 +CRES_HIRES=C3072 CRES_ENKF=C96 UFS_DIR=$PWD/../.. diff --git a/util/gdas_init/driver.wcoss2.sh b/util/gdas_init/driver.wcoss2.sh index 76a3bb329..8d9f6ced5 100755 --- a/util/gdas_init/driver.wcoss2.sh +++ b/util/gdas_init/driver.wcoss2.sh @@ -127,10 +127,15 @@ if [ $RUN_CHGRES == yes ]; then if [ $CRES_HIRES == 'C768' ] ; then MEM=250GB elif [ $CRES_HIRES == 'C1152' ] ; then - MEM=350GB + MEM=500GB NODES=1 TASKS_PER_NODE=48 WALLT="0:20:00" + elif [ $CRES_HIRES == 'C3072' ] ; then + MEM=500GB + NODES=8 + TASKS_PER_NODE=18 + WALLT="0:45:00" fi NCPUS=${TASKS_PER_NODE} (( TASKS = NODES * TASKS_PER_NODE )) From 707ff4f9ec3af11a2cfcb11a978437f20173ebf5 Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Thu, 10 Nov 2022 13:14:35 +0000 Subject: [PATCH 08/19] Removed some unused code/variables from atmosphere.F90 Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 4f92602c1..53484dbbe 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -100,7 +100,6 @@ module atmosphere type(esmf_field) :: xwind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: ywind_w_target_grid !< 3-d wind, 'west' edge type(esmf_field) :: zwind_w_target_grid !< 3-d wind, 'west' edge -!type(esmf_field), public :: zh_target_grid !< 3-d height ! Fields associated with thompson microphysics climatological tracers. @@ -2492,43 +2491,20 @@ subroutine cleanup_all_target_atm_data implicit none -!integer :: rc, i integer :: rc print*,"- DESTROY LOCAL TARGET GRID ATMOSPHERIC FIELDS." -!call ESMF_FieldDestroy(delp_target_grid, rc=rc) -!call ESMF_FieldDestroy(dzdt_target_grid, rc=rc) -!call ESMF_FieldDestroy(ps_target_grid, rc=rc) call ESMF_FieldDestroy(pres_target_grid, rc=rc) -!call ESMF_FieldDestroy(temp_target_grid, rc=rc) -!call ESMF_FieldDestroy(u_s_target_grid, rc=rc) -!call ESMF_FieldDestroy(v_s_target_grid, rc=rc) -!call ESMF_FieldDestroy(wind_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_target_grid, rc=rc) -!call ESMF_FieldDestroy(wind_s_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_s_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_s_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_s_target_grid, rc=rc) -!call ESMF_FieldDestroy(wind_w_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_w_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_w_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_w_target_grid, rc=rc) -!call ESMF_FieldDestroy(u_w_target_grid, rc=rc) -!call ESMF_FieldDestroy(v_w_target_grid, rc=rc) -!call ESMF_FieldDestroy(zh_target_grid, rc=rc) - -!do i = 1, num_tracers -! call ESMF_FieldDestroy(tracers_target_grid(i), rc=rc) -!enddo - -!deallocate(tracers_target_grid) - -!if (ESMF_FieldIsCreated(qnifa_climo_target_grid)) then -! call ESMF_FieldDestroy(qnifa_climo_target_grid, rc=rc) -!endif call cleanup_atmosphere_target_data From 9a863543e6a0dd509a68f9296f7002334e64b005 Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Fri, 9 Dec 2022 13:24:51 +0000 Subject: [PATCH 09/19] Update the WAM vertical interpolation to use xyz wind components. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 53484dbbe..36b87333b 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -1644,7 +1644,10 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) REAL(ESMF_KIND_R8), POINTER :: QOPTR(:,:,:) ! output tracer REAL(ESMF_KIND_R8), POINTER :: O2PTR(:,:,:) ! output tracer REAL(ESMF_KIND_R8), POINTER :: O3PTR(:,:,:) ! output tracer - REAL(ESMF_KIND_R8), POINTER :: WIND2PTR(:,:,:,:) ! output wind (x,y,z components) +!REAL(ESMF_KIND_R8), POINTER :: WIND2PTR(:,:,:,:) ! output wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: xWIND2PTR(:,:,:) ! output wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: yWIND2PTR(:,:,:) ! output wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: zWIND2PTR(:,:,:) ! output wind (x,y,z components) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1720,6 +1723,21 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) !if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & ! call error_handler("IN FieldGet", rc) + call ESMF_FieldGet(xwind_target_grid, & + farrayPtr=xWIND2PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + call ESMF_FieldGet(ywind_target_grid, & + farrayPtr=yWIND2PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + + call ESMF_FieldGet(zwind_target_grid, & + farrayPtr=zWIND2PTR, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldGet", rc) + ! ! determine vertical blending point and modified extrapolation values ! @@ -1737,9 +1755,12 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) ! DO K=KREF,LEV_TARGET COE = P2PTR(I,J,K) / P2PTR(I,J,KREF) - WIND2PTR(I,J,K,1) = COE*WIND2PTR(I,J,K,1) - WIND2PTR(I,J,K,2) = COE*WIND2PTR(I,J,K,2) - WIND2PTR(I,J,K,3) = COE*WIND2PTR(I,J,K,3) + xWIND2PTR(I,J,K) = COE*xWIND2PTR(I,J,K) + yWIND2PTR(I,J,K) = COE*yWIND2PTR(I,J,K) + zWIND2PTR(I,J,K) = COE*zWIND2PTR(I,J,K) +! WIND2PTR(I,J,K,1) = COE*WIND2PTR(I,J,K,1) +! WIND2PTR(I,J,K,2) = COE*WIND2PTR(I,J,K,2) +! WIND2PTR(I,J,K,3) = COE*WIND2PTR(I,J,K,3) DZDT2PTR(I,J,K) = COE*DZDT2PTR(I,J,K) ENDDO From 91710f68fe7722403d7f3334ceb8ed065dabf91b Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Fri, 9 Dec 2022 16:13:05 +0000 Subject: [PATCH 10/19] Interpolate winds to west edge using a field bundle. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 73 +++++++++++++++++++----------- 1 file changed, 46 insertions(+), 27 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 36b87333b..9836f3ef2 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -82,7 +82,7 @@ module atmosphere type(esmf_field) :: pres_b4adj_target_grid !< 3-d pres before terrain adj type(esmf_field) :: temp_b4adj_target_grid !< temp before vert adj type(esmf_field) :: terrain_interp_to_target_grid !< Input grid terrain interpolated to target grid. - type(esmf_field) :: wind_target_grid !< 3-d wind, grid box center +!type(esmf_field) :: wind_target_grid !< 3-d wind, grid box center type(esmf_field) :: xwind_target_grid !< 3-d wind, grid box center type(esmf_field) :: ywind_target_grid !< 3-d wind, grid box center type(esmf_field) :: zwind_target_grid !< 3-d wind, grid box center @@ -143,6 +143,9 @@ subroutine atmosphere_driver(localpet) real(esmf_kind_r8), pointer :: psptr(:,:), tempptr(:,:,:) + type(esmf_fieldbundle) :: wind_target_grid + type(esmf_fieldbundle) :: wind_w_target_grid + !----------------------------------------------------------------------------------- ! Read atmospheric fields on the input grid. !----------------------------------------------------------------------------------- @@ -380,12 +383,28 @@ subroutine atmosphere_driver(localpet) ! Interpolate winds to 'd' grid. !----------------------------------------------------------------------------------- + wind_target_grid = ESMF_FieldBundleCreate(name="wind_target_grid", rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegridStore", rc) + + call ESMF_FieldBundleAdd(wind_target_grid, (/xwind_target_grid,ywind_target_grid,zwind_target_grid/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegridStore", rc) + + wind_w_target_grid = ESMF_FieldBundleCreate(name="wind_w_target_grid", rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegridStore", rc) + + call ESMF_FieldBundleAdd(wind_w_target_grid, (/xwind_w_target_grid,ywind_w_target_grid,zwind_w_target_grid/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegridStore", rc) + isrctermprocessing = 1 method=ESMF_REGRIDMETHOD_BILINEAR print*,"- CALL FieldRegridStore FOR 3D-WIND WEST EDGE." - call ESMF_FieldRegridStore(xwind_target_grid, & - xwind_w_target_grid, & + call ESMF_FieldBundleRegridStore(wind_target_grid, & + wind_w_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & srctermprocessing=isrctermprocessing, & routehandle=regrid_bl, & @@ -395,36 +414,36 @@ subroutine atmosphere_driver(localpet) call error_handler("IN FieldRegridStore", rc) !print*,"- CALL Field_Regrid FOR 3-D WIND WEST EDGE." -!call ESMF_FieldRegrid(wind_target_grid, & -! wind_w_target_grid, & + call ESMF_FieldBundleRegrid(wind_target_grid, & + wind_w_target_grid, & + routehandle=regrid_bl, & + termorderflag=(/ESMF_TERMORDER_SRCSEQ/), rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + +!print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." +!call ESMF_FieldRegrid(xwind_target_grid, & +! xwind_w_target_grid, & ! routehandle=regrid_bl, & ! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) !if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & ! call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." - call ESMF_FieldRegrid(xwind_target_grid, & - xwind_w_target_grid, & - routehandle=regrid_bl, & - termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegrid", rc) - - print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." - call ESMF_FieldRegrid(ywind_target_grid, & - ywind_w_target_grid, & - routehandle=regrid_bl, & - termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegrid", rc) +!print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." +!call ESMF_FieldRegrid(ywind_target_grid, & +! ywind_w_target_grid, & +! routehandle=regrid_bl, & +! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." - call ESMF_FieldRegrid(zwind_target_grid, & - zwind_w_target_grid, & - routehandle=regrid_bl, & - termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegrid", rc) +!print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." +!call ESMF_FieldRegrid(zwind_target_grid, & +! zwind_w_target_grid, & +! routehandle=regrid_bl, & +! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) +!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & +! call error_handler("IN FieldRegrid", rc) From 0a7be3f2dd8753607879fc7dec0e853baa09ac04 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 30 Jan 2023 17:51:57 +0000 Subject: [PATCH 11/19] Remove old code. Fix comments. Fixes #633. --- sorc/chgres_cube.fd/atm_input_data.F90 | 26 +--- sorc/chgres_cube.fd/atmosphere.F90 | 202 ++++--------------------- 2 files changed, 36 insertions(+), 192 deletions(-) diff --git a/sorc/chgres_cube.fd/atm_input_data.F90 b/sorc/chgres_cube.fd/atm_input_data.F90 index fa47ca422..f4faa8ae5 100644 --- a/sorc/chgres_cube.fd/atm_input_data.F90 +++ b/sorc/chgres_cube.fd/atm_input_data.F90 @@ -54,10 +54,9 @@ module atm_input_data type(esmf_field), public :: u_input_grid !< u/v wind at grid type(esmf_field), public :: v_input_grid !< box center -!type(esmf_field), public :: wind_input_grid !< 3-component wind - type(esmf_field), public :: xwind_input_grid !< 3-component wind - type(esmf_field), public :: ywind_input_grid !< 3-component wind - type(esmf_field), public :: zwind_input_grid !< 3-component wind + type(esmf_field), public :: xwind_input_grid !< x-component wind + type(esmf_field), public :: ywind_input_grid !< y-component wind + type(esmf_field), public :: zwind_input_grid !< z-component wind type(esmf_field), allocatable, public :: tracers_input_grid(:) !< tracers integer, public :: lev_input !< number of atmospheric layers @@ -153,15 +152,6 @@ subroutine init_atm_esmf_fields print*,"- INITIALIZE ATMOSPHERIC ESMF FIELDS." -!print*,"- CALL FieldCreate FOR INPUT GRID 3-D WIND." -!wind_input_grid = ESMF_FieldCreate(input_grid, & -! typekind=ESMF_TYPEKIND_R8, & -! staggerloc=ESMF_STAGGERLOC_CENTER, & -! ungriddedLBound=(/1,1/), & -! ungriddedUBound=(/lev_input,3/), rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR INPUT GRID SURFACE PRESSURE." ps_input_grid = ESMF_FieldCreate(input_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -3121,7 +3111,6 @@ subroutine convert_winds integer :: i, j, k, rc real(esmf_kind_r8) :: latrad, lonrad -!real(esmf_kind_r8), pointer :: windptr(:,:,:,:) real(esmf_kind_r8), pointer :: xptr(:,:,:) real(esmf_kind_r8), pointer :: yptr(:,:,:) real(esmf_kind_r8), pointer :: zptr(:,:,:) @@ -3130,14 +3119,6 @@ subroutine convert_winds real(esmf_kind_r8), pointer :: latptr(:,:) real(esmf_kind_r8), pointer :: lonptr(:,:) -!print*,"- CALL FieldGet FOR 3-D WIND." -!call ESMF_FieldGet(wind_input_grid, & -! computationalLBound=clb, & -! computationalUBound=cub, & -! farrayPtr=windptr, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) - print*,"- CALL FieldGet FOR x." call ESMF_FieldGet(xwind_input_grid, & computationalLBound=clb, & @@ -3307,7 +3288,6 @@ subroutine cleanup_input_atm_data call ESMF_FieldDestroy(pres_input_grid, rc=rc) call ESMF_FieldDestroy(dzdt_input_grid, rc=rc) call ESMF_FieldDestroy(temp_input_grid, rc=rc) -!call ESMF_FieldDestroy(wind_input_grid, rc=rc) call ESMF_FieldDestroy(xwind_input_grid, rc=rc) call ESMF_FieldDestroy(ywind_input_grid, rc=rc) call ESMF_FieldDestroy(zwind_input_grid, rc=rc) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 930c52d77..a2c6d3469 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -72,6 +72,7 @@ module atmosphere write_fv3_atm_data_netcdf use utilities, only : error_handler + implicit none private @@ -83,24 +84,18 @@ module atmosphere type(esmf_field) :: pres_b4adj_target_grid !< 3-d pres before terrain adj type(esmf_field) :: temp_b4adj_target_grid !< temp before vert adj type(esmf_field) :: terrain_interp_to_target_grid !< Input grid terrain interpolated to target grid. -!type(esmf_field) :: wind_target_grid !< 3-d wind, grid box center - type(esmf_field) :: xwind_target_grid !< 3-d wind, grid box center - type(esmf_field) :: ywind_target_grid !< 3-d wind, grid box center - type(esmf_field) :: zwind_target_grid !< 3-d wind, grid box center -!type(esmf_field) :: wind_b4adj_target_grid !< 3-d wind before vert adj - type(esmf_field) :: xwind_b4adj_target_grid !< 3-d wind before vert adj - type(esmf_field) :: ywind_b4adj_target_grid !< 3-d wind before vert adj - type(esmf_field) :: zwind_b4adj_target_grid !< 3-d wind before vert adj -!type(esmf_field) :: wind_s_target_grid !< 3-d wind, 'south' edge - type(esmf_field) :: xwind_s_target_grid !< 3-d wind, 'south' edge - type(esmf_field) :: ywind_s_target_grid !< 3-d wind, 'south' edge - type(esmf_field) :: zwind_s_target_grid !< 3-d wind, 'south' edge -!type(esmf_field), public :: u_w_target_grid !< u-wind, 'west' edge -!type(esmf_field), public :: v_w_target_grid !< v-wind, 'west' edge -!type(esmf_field) :: wind_w_target_grid !< 3-d wind, 'west' edge - type(esmf_field) :: xwind_w_target_grid !< 3-d wind, 'west' edge - type(esmf_field) :: ywind_w_target_grid !< 3-d wind, 'west' edge - type(esmf_field) :: zwind_w_target_grid !< 3-d wind, 'west' edge + type(esmf_field) :: xwind_target_grid !< x-component wind, grid box center + type(esmf_field) :: ywind_target_grid !< y-component wind, grid box center + type(esmf_field) :: zwind_target_grid !< z-component wind, grid box center + type(esmf_field) :: xwind_b4adj_target_grid !< x-component wind, before vert adj + type(esmf_field) :: ywind_b4adj_target_grid !< y-component wind, before vert adj + type(esmf_field) :: zwind_b4adj_target_grid !< z-component wind, before vert adj + type(esmf_field) :: xwind_s_target_grid !< x-component wind, 'south' edge + type(esmf_field) :: ywind_s_target_grid !< y-component wind, 'south' edge + type(esmf_field) :: zwind_s_target_grid !< z-component wind, 'south' edge + type(esmf_field) :: xwind_w_target_grid !< x-component wind, 'west' edge + type(esmf_field) :: ywind_w_target_grid !< y-component wind, 'west' edge + type(esmf_field) :: zwind_w_target_grid !< z-component wind, 'west' edge ! Fields associated with thompson microphysics climatological tracers. @@ -144,9 +139,6 @@ subroutine atmosphere_driver(localpet) real(esmf_kind_r8), pointer :: psptr(:,:), tempptr(:,:,:) - type(esmf_fieldbundle) :: wind_target_grid - type(esmf_fieldbundle) :: wind_w_target_grid - !----------------------------------------------------------------------------------- ! Read atmospheric fields on the input grid. !----------------------------------------------------------------------------------- @@ -295,14 +287,6 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) -!print*,"- CALL Field_Regrid FOR 3-D WIND." -!call ESMF_FieldRegrid(wind_input_grid, & -! wind_b4adj_target_grid, & -! routehandle=regrid_bl, & -! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR x WIND." call ESMF_FieldRegrid(xwind_input_grid, & xwind_b4adj_target_grid, & @@ -384,28 +368,12 @@ subroutine atmosphere_driver(localpet) ! Interpolate winds to 'd' grid. !----------------------------------------------------------------------------------- - wind_target_grid = ESMF_FieldBundleCreate(name="wind_target_grid", rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegridStore", rc) - - call ESMF_FieldBundleAdd(wind_target_grid, (/xwind_target_grid,ywind_target_grid,zwind_target_grid/), rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegridStore", rc) - - wind_w_target_grid = ESMF_FieldBundleCreate(name="wind_w_target_grid", rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegridStore", rc) - - call ESMF_FieldBundleAdd(wind_w_target_grid, (/xwind_w_target_grid,ywind_w_target_grid,zwind_w_target_grid/), rc=rc) - if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & - call error_handler("IN FieldRegridStore", rc) - isrctermprocessing = 1 method=ESMF_REGRIDMETHOD_BILINEAR print*,"- CALL FieldRegridStore FOR 3D-WIND WEST EDGE." - call ESMF_FieldBundleRegridStore(wind_target_grid, & - wind_w_target_grid, & + call ESMF_FieldRegridStore(xwind_target_grid, & + xwind_w_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & srctermprocessing=isrctermprocessing, & routehandle=regrid_bl, & @@ -414,39 +382,29 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) -!print*,"- CALL Field_Regrid FOR 3-D WIND WEST EDGE." - call ESMF_FieldBundleRegrid(wind_target_grid, & - wind_w_target_grid, & + print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." + call ESMF_FieldRegrid(xwind_target_grid, & + xwind_w_target_grid, & routehandle=regrid_bl, & - termorderflag=(/ESMF_TERMORDER_SRCSEQ/), rc=rc) + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) -!print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." -!call ESMF_FieldRegrid(xwind_target_grid, & -! xwind_w_target_grid, & -! routehandle=regrid_bl, & -! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldRegrid", rc) - -!print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." -!call ESMF_FieldRegrid(ywind_target_grid, & -! ywind_w_target_grid, & -! routehandle=regrid_bl, & -! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldRegrid", rc) - -!print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." -!call ESMF_FieldRegrid(zwind_target_grid, & -! zwind_w_target_grid, & -! routehandle=regrid_bl, & -! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldRegrid", rc) - + print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." + call ESMF_FieldRegrid(ywind_target_grid, & + ywind_w_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) + print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." + call ESMF_FieldRegrid(zwind_target_grid, & + zwind_w_target_grid, & + routehandle=regrid_bl, & + termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) + if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & + call error_handler("IN FieldRegrid", rc) print*,"- CALL FieldRegridRelease." call ESMF_FieldRegridRelease(routehandle=regrid_bl, rc=rc) @@ -467,14 +425,6 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) -!print*,"- CALL Field_Regrid FOR 3-D WIND SOUTH EDGE." -!call ESMF_FieldRegrid(wind_target_grid, & -! wind_s_target_grid, & -! routehandle=regrid_bl, & -! termorderflag=ESMF_TERMORDER_SRCSEQ, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR xWIND SOUTH EDGE." call ESMF_FieldRegrid(xwind_target_grid, & xwind_s_target_grid, & @@ -614,15 +564,6 @@ subroutine create_atm_b4adj_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) -!print*,"- CALL FieldCreate FOR TARGET GRID UNSTAGGERED WINDS BEFORE ADJUSTMENT." -!wind_b4adj_target_grid = ESMF_FieldCreate(target_grid, & -! typekind=ESMF_TYPEKIND_R8, & -! staggerloc=ESMF_STAGGERLOC_CENTER, & -! ungriddedLBound=(/1,1/), & -! ungriddedUBound=(/lev_input,3/), rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET TERRAIN." terrain_interp_to_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -733,15 +674,6 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) -!print*,"- CALL FieldCreate FOR TARGET UNSTAGGERED 3D-WIND." -!wind_target_grid = ESMF_FieldCreate(target_grid, & -! typekind=ESMF_TYPEKIND_R8, & -! staggerloc=ESMF_STAGGERLOC_CENTER, & -! ungriddedLBound=(/1,1/), & -! ungriddedUBound=(/lev_target,3/), rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET U_S." u_s_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -787,15 +719,6 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) -!print*,"- CALL FieldCreate FOR TARGET 3D-WIND_S." -!wind_s_target_grid = ESMF_FieldCreate(target_grid, & -! typekind=ESMF_TYPEKIND_R8, & -! staggerloc=ESMF_STAGGERLOC_EDGE2, & -! ungriddedLBound=(/1,1/), & -! ungriddedUBound=(/lev_target,3/), rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET U_W." u_w_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -841,15 +764,6 @@ subroutine create_atm_esmf_fields if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldCreate", rc) -!print*,"- CALL FieldCreate FOR TARGET 3D-WIND_W." -!wind_w_target_grid = ESMF_FieldCreate(target_grid, & -! typekind=ESMF_TYPEKIND_R8, & -! staggerloc=ESMF_STAGGERLOC_EDGE1, & -! ungriddedLBound=(/1,1/), & -! ungriddedUBound=(/lev_target,3/), rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldCreate", rc) - print*,"- CALL FieldCreate FOR TARGET SURFACE PRESSURE." ps_target_grid = ESMF_FieldCreate(target_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -873,7 +787,6 @@ subroutine convert_winds real(esmf_kind_r8), pointer :: lonptr(:,:) real(esmf_kind_r8), pointer :: uptr(:,:,:) real(esmf_kind_r8), pointer :: vptr(:,:,:) -!real(esmf_kind_r8), pointer :: windptr(:,:,:,:) real(esmf_kind_r8), pointer :: xwindptr(:,:,:) real(esmf_kind_r8), pointer :: ywindptr(:,:,:) real(esmf_kind_r8), pointer :: zwindptr(:,:,:) @@ -885,14 +798,6 @@ subroutine convert_winds print*,'- CONVERT WINDS.' -!print*,"- CALL FieldGet FOR 3-D WIND_S." -!call ESMF_FieldGet(wind_s_target_grid, & -! computationalLBound=clb, & -! computationalUBound=cub, & -! farrayPtr=windptr, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) - print*,"- CALL FieldGet FOR xwind_S." call ESMF_FieldGet(xwind_s_target_grid, & computationalLBound=clb, & @@ -942,26 +847,13 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) -! uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad) -! vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & -! windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & -! windptr(i,j,k,3) * cos(latrad) vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + & ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + & zwindptr(i,j,k) * cos(latrad) enddo enddo enddo - - -!print*,"- CALL FieldGet FOR 3-D WIND_W." -!call ESMF_FieldGet(wind_w_target_grid, & -! computationalLBound=clb, & -! computationalUBound=cub, & -! farrayPtr=windptr, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) print*,"- CALL FieldGet FOR xwind_w." call ESMF_FieldGet(xwind_w_target_grid, & @@ -1012,11 +904,7 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) -! uptr(i,j,k) = windptr(i,j,k,1) * cos(lonrad) + windptr(i,j,k,2) * sin(lonrad) uptr(i,j,k) = xwindptr(i,j,k) * cos(lonrad) + ywindptr(i,j,k) * sin(lonrad) -! vptr(i,j,k) = -windptr(i,j,k,1) * sin(latrad) * sin(lonrad) + & -! windptr(i,j,k,2) * sin(latrad) * cos(lonrad) + & -! windptr(i,j,k,3) * cos(latrad) vptr(i,j,k) = -xwindptr(i,j,k) * sin(latrad) * sin(lonrad) + & ywindptr(i,j,k) * sin(latrad) * cos(lonrad) + & zwindptr(i,j,k) * cos(latrad) @@ -1738,10 +1626,6 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) ! wind print*,"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED WIND." -!call ESMF_FieldGet(wind_target_grid, & -! farrayPtr=WIND2PTR, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) call ESMF_FieldGet(xwind_target_grid, & farrayPtr=xWIND2PTR, rc=rc) @@ -1950,16 +1834,6 @@ SUBROUTINE VINTG call error_handler("IN FieldGet", rc) Z2 = -LOG(P2PTR) - -!print*,"- CALL FieldGet FOR 3-D WIND." -!call ESMF_FieldGet(wind_b4adj_target_grid, & -! farrayPtr=WIND1PTR, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) - -!C1(:,:,:,1) = WIND1PTR(:,:,:,1) -!C1(:,:,:,2) = WIND1PTR(:,:,:,2) -!C1(:,:,:,3) = WIND1PTR(:,:,:,3) print*,"- CALL FieldGet FOR x WIND." call ESMF_FieldGet(xwind_b4adj_target_grid, & @@ -2063,21 +1937,12 @@ SUBROUTINE VINTG if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) -!print*,"- CALL FieldGet FOR 3-D ADJUSTED WIND." -!call ESMF_FieldGet(wind_target_grid, & -! farrayPtr=WIND2PTR, rc=rc) -!if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & -! call error_handler("IN FieldGet", rc) - DO K=1,LEV_TARGET DO I=CLB(1),CUB(1) DO J=CLB(2),CUB(2) xWIND2PTR(I,J,K)=C2(I,J,K,1) yWIND2PTR(I,J,K)=C2(I,J,K,2) zWIND2PTR(I,J,K)=C2(I,J,K,3) -! WIND2PTR(I,J,K,1)=C2(I,J,K,1) -! WIND2PTR(I,J,K,2)=C2(I,J,K,2) -! WIND2PTR(I,J,K,3)=C2(I,J,K,3) DZDT2PTR(I,J,K)=C2(I,J,K,4) DZ=Z2(I,J,K)-Z1(I,J,1) IF(DZ.GE.0) THEN @@ -2506,7 +2371,6 @@ subroutine cleanup_target_atm_b4adj_data print*,"- DESTROY TARGET GRID ATMOSPHERIC BEFORE ADJUSTMENT FIELDS." -!call ESMF_FieldDestroy(wind_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(xwind_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(ywind_b4adj_target_grid, rc=rc) call ESMF_FieldDestroy(zwind_b4adj_target_grid, rc=rc) From 5e6bcf839dc5e2509330031b6b5c0364140633d8 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 30 Jan 2023 19:58:39 +0000 Subject: [PATCH 12/19] Upgrade to esmf v8.4 on Hera. Fixes #633. --- modulefiles/build.hera.gnu.lua | 2 +- modulefiles/build.hera.intel.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modulefiles/build.hera.gnu.lua b/modulefiles/build.hera.gnu.lua index 331aefe85..3756fd3e0 100644 --- a/modulefiles/build.hera.gnu.lua +++ b/modulefiles/build.hera.gnu.lua @@ -22,7 +22,7 @@ load(pathJoin("hpc-mpich", mpich_ver)) netcdf_ver=os.getenv("netcdf_ver") or "4.7.4" load(pathJoin("netcdf", netcdf_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.2.1b04" +esmf_ver=os.getenv("esmf_ver") or "8.4.0b08" load(pathJoin("esmf", esmf_ver)) bacio_ver=os.getenv("bacio_ver") or "2.4.1" diff --git a/modulefiles/build.hera.intel.lua b/modulefiles/build.hera.intel.lua index d82571889..6637da08a 100644 --- a/modulefiles/build.hera.intel.lua +++ b/modulefiles/build.hera.intel.lua @@ -58,7 +58,7 @@ load(pathJoin("netcdf", netcdf_ver)) nccmp_ver=os.getenv("nccmp_ver") or "1.8.9.0" load(pathJoin("nccmp", nccmp_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.2.1b04" +esmf_ver=os.getenv("esmf_ver") or "8.4.0b08" load(pathJoin("esmf", esmf_ver)) nco_ver=os.getenv("nco_ver") or "4.9.1" From d45f3c80bb416bbd68397c5a41f7d9688099ee21 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Mon, 30 Jan 2023 21:39:22 +0000 Subject: [PATCH 13/19] Give the two convert wind routines unique names. Update unit tests for new specification of wind fields. Fixes #633. --- sorc/chgres_cube.fd/atm_input_data.F90 | 23 ++++---- sorc/chgres_cube.fd/atmosphere.F90 | 6 +-- tests/chgres_cube/ftst_convert_winds.F90 | 52 ++++++++++++++----- .../ftst_read_atm_gaussian_netcdf.F90 | 24 +++++---- tests/chgres_cube/ftst_read_atm_grib2.F90 | 23 ++++---- 5 files changed, 77 insertions(+), 51 deletions(-) diff --git a/sorc/chgres_cube.fd/atm_input_data.F90 b/sorc/chgres_cube.fd/atm_input_data.F90 index f4faa8ae5..1cf075a85 100644 --- a/sorc/chgres_cube.fd/atm_input_data.F90 +++ b/sorc/chgres_cube.fd/atm_input_data.F90 @@ -66,7 +66,7 @@ module atm_input_data public :: read_input_atm_data public :: cleanup_input_atm_data - public :: convert_winds + public :: convert_winds_to_xyz contains @@ -428,7 +428,7 @@ subroutine read_input_atm_gfs_sigio_file(localpet) ! Convert from 2-d to 3-d component winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute 3-d pressure from 'ak' and 'bk'. @@ -688,7 +688,7 @@ subroutine read_input_atm_gfs_gaussian_nemsio_file(localpet) ! Convert from 2-d to 3-d component winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute 3-d pressure from 'ak' and 'bk'. @@ -953,7 +953,7 @@ subroutine read_input_atm_gaussian_nemsio_file(localpet) ! Convert from 2-d to 3-d component winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute 3-d pressure. Mid-layer and surface pressure are computed @@ -1237,7 +1237,7 @@ subroutine read_input_atm_restart_file(localpet) ! Convert from 2-d to 3-d cartesian winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute pressures @@ -1607,7 +1607,7 @@ subroutine read_input_atm_gaussian_netcdf_file(localpet) ! Convert from 2-d to 3-d cartesian winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute pressure. @@ -1913,7 +1913,7 @@ subroutine read_input_atm_tiled_history_file(localpet) ! Convert from 2-d to 3-d cartesian winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Compute pressure. @@ -2868,7 +2868,7 @@ subroutine read_input_atm_grib2_file(localpet) ! Convert from 2-d to 3-d component winds. !--------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_xyz !--------------------------------------------------------------------------- ! Convert dpdt to dzdt if needed @@ -3103,7 +3103,7 @@ end subroutine read_winds !> Convert winds from 2-d to 3-d components. !! !! @author George Gayno NCEP/EMC - subroutine convert_winds + subroutine convert_winds_to_xyz implicit none @@ -3168,11 +3168,8 @@ subroutine convert_winds latrad = latptr(i,j) * acos(-1.) / 180.0 lonrad = lonptr(i,j) * acos(-1.) / 180.0 do k = clb(3), cub(3) -! windptr(i,j,k,1) = uptr(i,j,k) * cos(lonrad) - vptr(i,j,k) * sin(latrad) * sin(lonrad) xptr(i,j,k) = uptr(i,j,k) * cos(lonrad) - vptr(i,j,k) * sin(latrad) * sin(lonrad) -! windptr(i,j,k,2) = uptr(i,j,k) * sin(lonrad) + vptr(i,j,k) * sin(latrad) * cos(lonrad) yptr(i,j,k) = uptr(i,j,k) * sin(lonrad) + vptr(i,j,k) * sin(latrad) * cos(lonrad) -! windptr(i,j,k,3) = vptr(i,j,k) * cos(latrad) zptr(i,j,k) = vptr(i,j,k) * cos(latrad) enddo enddo @@ -3181,7 +3178,7 @@ subroutine convert_winds call ESMF_FieldDestroy(u_input_grid, rc=rc) call ESMF_FieldDestroy(v_input_grid, rc=rc) - end subroutine convert_winds + end subroutine convert_winds_to_xyz !> Compute grid rotation angle for non-latlon grids. !! diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index a2c6d3469..10ef26fe7 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -458,7 +458,7 @@ subroutine atmosphere_driver(localpet) ! Convert from 3-d to 2-d cartesian winds. !----------------------------------------------------------------------------------- - call convert_winds + call convert_winds_to_uv !----------------------------------------------------------------------------------- ! If selected, process thompson microphysics climatological fields. @@ -776,7 +776,7 @@ end subroutine create_atm_esmf_fields !> Convert 3-d component winds to u and v. !! !! @author George Gayno - subroutine convert_winds + subroutine convert_winds_to_uv implicit none @@ -912,7 +912,7 @@ subroutine convert_winds enddo enddo - end subroutine convert_winds + end subroutine convert_winds_to_uv !> Computes 3-D pressure given an adjusted surface pressure. !! diff --git a/tests/chgres_cube/ftst_convert_winds.F90 b/tests/chgres_cube/ftst_convert_winds.F90 index dd675c58c..1af237570 100644 --- a/tests/chgres_cube/ftst_convert_winds.F90 +++ b/tests/chgres_cube/ftst_convert_winds.F90 @@ -14,8 +14,10 @@ program winds latitude_input_grid, & longitude_input_grid - use atm_input_data, only : lev_input, convert_winds, & - wind_input_grid, & + use atm_input_data, only : lev_input, convert_winds_to_xyz, & + xwind_input_grid, & + ywind_input_grid, & + zwind_input_grid, & u_input_grid, & v_input_grid @@ -26,7 +28,7 @@ program winds real, parameter :: EPSILON=0.0001 - integer :: clb(4), cub(4) + integer :: clb(3), cub(3) integer :: ierr, localpet, npets, rc integer :: i, j, k @@ -34,7 +36,9 @@ program winds real(esmf_kind_r8), allocatable :: longitude(:,:) real(esmf_kind_r8), allocatable :: u_wind(:,:,:) real(esmf_kind_r8), allocatable :: v_wind(:,:,:) - real(esmf_kind_r8), pointer :: windptr(:,:,:,:) + real(esmf_kind_r8), pointer :: xwindptr(:,:,:) + real(esmf_kind_r8), pointer :: ywindptr(:,:,:) + real(esmf_kind_r8), pointer :: zwindptr(:,:,:) real :: expected_x_component(IPTS,JPTS) real :: expected_y_component(IPTS,JPTS) @@ -95,11 +99,23 @@ program winds name="input_grid_longitude", & rc=rc) - wind_input_grid = ESMF_FieldCreate(input_grid, & + xwind_input_grid = ESMF_FieldCreate(input_grid, & typekind=ESMF_TYPEKIND_R8, & staggerloc=ESMF_STAGGERLOC_CENTER, & - ungriddedLBound=(/1,1/), & - ungriddedUBound=(/lev_input,3/), rc=rc) + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + + ywind_input_grid = ESMF_FieldCreate(input_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) + + zwind_input_grid = ESMF_FieldCreate(input_grid, & + typekind=ESMF_TYPEKIND_R8, & + staggerloc=ESMF_STAGGERLOC_CENTER, & + ungriddedLBound=(/1/), & + ungriddedUBound=(/lev_input/), rc=rc) u_input_grid = ESMF_FieldCreate(input_grid, & typekind=ESMF_TYPEKIND_R8, & @@ -210,21 +226,31 @@ program winds ! Call the routine to unit test. - call convert_winds + call convert_winds_to_xyz + + call ESMF_FieldGet(xwind_input_grid, & + computationalLBound=clb, & + computationalUBound=cub, & + farrayPtr=xwindptr, rc=rc) + + call ESMF_FieldGet(ywind_input_grid, & + computationalLBound=clb, & + computationalUBound=cub, & + farrayPtr=ywindptr, rc=rc) - call ESMF_FieldGet(wind_input_grid, & + call ESMF_FieldGet(zwind_input_grid, & computationalLBound=clb, & computationalUBound=cub, & - farrayPtr=windptr, rc=rc) + farrayPtr=zwindptr, rc=rc) print*,"Check results." do j = clb(2), cub(2) do i = clb(1), cub(1) do k = clb(3), cub(3) - if (abs(windptr(i,j,k,1) - expected_x_component(i,j)) > EPSILON) stop 2 - if (abs(windptr(i,j,k,2) - expected_y_component(i,j)) > EPSILON) stop 3 - if (abs(windptr(i,j,k,3) - expected_z_component(i,j)) > EPSILON) stop 4 + if (abs(xwindptr(i,j,k) - expected_x_component(i,j)) > EPSILON) stop 2 + if (abs(ywindptr(i,j,k) - expected_y_component(i,j)) > EPSILON) stop 3 + if (abs(zwindptr(i,j,k) - expected_z_component(i,j)) > EPSILON) stop 4 enddo enddo enddo diff --git a/tests/chgres_cube/ftst_read_atm_gaussian_netcdf.F90 b/tests/chgres_cube/ftst_read_atm_gaussian_netcdf.F90 index 95300c988..755bf7b0b 100644 --- a/tests/chgres_cube/ftst_read_atm_gaussian_netcdf.F90 +++ b/tests/chgres_cube/ftst_read_atm_gaussian_netcdf.F90 @@ -26,7 +26,9 @@ program read_atm_gaussian_netcdf dzdt_input_grid, & ps_input_grid, & pres_input_grid, & - wind_input_grid, & + xwind_input_grid, & + ywind_input_grid, & + zwind_input_grid, & terrain_input_grid, & tracers_input_grid @@ -67,7 +69,6 @@ program read_atm_gaussian_netcdf real(esmf_kind_r8), allocatable :: data_one_tile(:,:) real(esmf_kind_r8), allocatable :: data3d_one_tile(:,:,:) - real(esmf_kind_r8), allocatable :: data4d_one_tile(:,:,:,:) real(esmf_kind_r8), allocatable :: latitude(:,:) real(esmf_kind_r8), allocatable :: longitude(:,:) @@ -151,7 +152,6 @@ program read_atm_gaussian_netcdf if (lev_input /= EXPECTED_LEV_INPUT) stop 2 if (levp1_input /= EXPECTED_LEVP1_INPUT) stop 3 - allocate(data4d_one_tile(i_input,j_input,lev_input,3)) allocate(data3d_one_tile(i_input,j_input,lev_input)) allocate(data_one_tile(i_input,j_input)) @@ -187,13 +187,15 @@ program read_atm_gaussian_netcdf if (abs(data3d_one_tile(1,1,1) - expected_values_pres(1)) > EPSILON) stop 18 if (abs(data3d_one_tile(i_input,j_input,lev_input) - expected_values_pres(2)) > EPSILON) stop 19 - call ESMF_FieldGather(wind_input_grid, data4d_one_tile, rootPet=0, rc=rc) - if (abs(data4d_one_tile(1,1,1,1) - expected_values_xwind(1)) > EPSILON) stop 20 - if (abs(data4d_one_tile(1,1,lev_input,1) - expected_values_xwind(2)) > EPSILON) stop 21 - if (abs(data4d_one_tile(1,1,1,2) - expected_values_ywind(1)) > EPSILON) stop 22 - if (abs(data4d_one_tile(1,1,lev_input,2) - expected_values_ywind(2)) > EPSILON) stop 23 - if (abs(data4d_one_tile(1,1,1,3) - expected_values_zwind(1)) > EPSILON) stop 24 - if (abs(data4d_one_tile(1,1,lev_input,3) - expected_values_zwind(2)) > EPSILON) stop 25 + call ESMF_FieldGather(xwind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(1,1,1) - expected_values_xwind(1)) > EPSILON) stop 20 + if (abs(data3d_one_tile(1,1,lev_input) - expected_values_xwind(2)) > EPSILON) stop 21 + call ESMF_FieldGather(ywind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(1,1,1) - expected_values_ywind(1)) > EPSILON) stop 22 + if (abs(data3d_one_tile(1,1,lev_input) - expected_values_ywind(2)) > EPSILON) stop 23 + call ESMF_FieldGather(zwind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(1,1,1) - expected_values_zwind(1)) > EPSILON) stop 24 + if (abs(data3d_one_tile(1,1,lev_input) - expected_values_zwind(2)) > EPSILON) stop 25 call ESMF_FieldGather(terrain_input_grid, data_one_tile, rootPet=0, rc=rc) if (abs(data_one_tile(1,1) - expected_values_terrain(1)) > EPSILON) stop 26 @@ -201,7 +203,7 @@ program read_atm_gaussian_netcdf print*,"OK" - deallocate(latitude, longitude, data4d_one_tile, data3d_one_tile, data_one_tile) + deallocate(latitude, longitude, data3d_one_tile, data_one_tile) call ESMF_finalize(endflag=ESMF_END_KEEPMPI) diff --git a/tests/chgres_cube/ftst_read_atm_grib2.F90 b/tests/chgres_cube/ftst_read_atm_grib2.F90 index 907180cb9..7d19ffeb9 100644 --- a/tests/chgres_cube/ftst_read_atm_grib2.F90 +++ b/tests/chgres_cube/ftst_read_atm_grib2.F90 @@ -16,7 +16,8 @@ program read_atm_grib2 levp1_input, & temp_input_grid, tracers_input_grid, & dzdt_input_grid, pres_input_grid, & - ps_input_grid, wind_input_grid, & + ps_input_grid, xwind_input_grid, & + ywind_input_grid, zwind_input_grid, & terrain_input_grid use program_setup, only : input_type, data_dir_input_grid, & @@ -52,7 +53,6 @@ program read_atm_grib2 real(esmf_kind_r8), allocatable :: longitude(:,:) real(esmf_kind_r8), allocatable :: data_one_tile(:,:) real(esmf_kind_r8), allocatable :: data3d_one_tile(:,:,:) - real(esmf_kind_r8), allocatable :: data4d_one_tile(:,:,:,:) real :: expected_values_tmp(NUM_VALUES) real :: expected_values_sphum(NUM_VALUES) @@ -174,7 +174,6 @@ program read_atm_grib2 if (levp1_input /= EXPECTED_LEVP1_INPUT) stop 3 allocate(data3d_one_tile(i_input,j_input,lev_input)) - allocate(data4d_one_tile(i_input,j_input,lev_input,3)) allocate(data_one_tile(i_input,j_input)) ! The i/j/k of the points to be checked. @@ -231,13 +230,15 @@ program read_atm_grib2 if (abs(data3d_one_tile(i_check(1),j_check(1),k_check(1)) - expected_values_pres(1)) > EPSILON) stop 22 if (abs(data3d_one_tile(i_check(2),j_check(2),k_check(2)) - expected_values_pres(2)) > EPSILON) stop 23 - call ESMF_FieldGather(wind_input_grid, data4d_one_tile, rootPet=0, rc=rc) - if (abs(data4d_one_tile(i_check(1),j_check(1),k_check(1),1) - expected_values_xwind(1)) > EPSILON) stop 24 - if (abs(data4d_one_tile(i_check(2),j_check(2),k_check(2),1) - expected_values_xwind(2)) > EPSILON) stop 25 - if (abs(data4d_one_tile(i_check(1),j_check(1),k_check(1),2) - expected_values_ywind(1)) > EPSILON) stop 26 - if (abs(data4d_one_tile(i_check(2),j_check(2),k_check(2),2) - expected_values_ywind(2)) > EPSILON) stop 27 - if (abs(data4d_one_tile(i_check(1),j_check(1),k_check(1),3) - expected_values_zwind(1)) > EPSILON) stop 28 - if (abs(data4d_one_tile(i_check(2),j_check(2),k_check(2),3) - expected_values_zwind(2)) > EPSILON) stop 29 + call ESMF_FieldGather(xwind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(i_check(1),j_check(1),k_check(1)) - expected_values_xwind(1)) > EPSILON) stop 24 + if (abs(data3d_one_tile(i_check(2),j_check(2),k_check(2)) - expected_values_xwind(2)) > EPSILON) stop 25 + call ESMF_FieldGather(ywind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(i_check(1),j_check(1),k_check(1)) - expected_values_ywind(1)) > EPSILON) stop 26 + if (abs(data3d_one_tile(i_check(2),j_check(2),k_check(2)) - expected_values_ywind(2)) > EPSILON) stop 27 + call ESMF_FieldGather(zwind_input_grid, data3d_one_tile, rootPet=0, rc=rc) + if (abs(data3d_one_tile(i_check(1),j_check(1),k_check(1)) - expected_values_zwind(1)) > EPSILON) stop 28 + if (abs(data3d_one_tile(i_check(2),j_check(2),k_check(2)) - expected_values_zwind(2)) > EPSILON) stop 29 call ESMF_FieldGather(ps_input_grid, data_one_tile, rootPet=0, rc=rc) if (abs(data_one_tile(i_check(1),j_check(1)) - expected_values_ps(1)) > EPSILON) stop 32 @@ -245,7 +246,7 @@ program read_atm_grib2 call ESMF_FieldGather(terrain_input_grid, data_one_tile, rootPet=0, rc=rc) if (abs(data_one_tile(i_check(1),j_check(1)) - expected_values_terrain(1)) > EPSILON) stop 34 - deallocate(latitude, longitude, data3d_one_tile, data4d_one_tile, data_one_tile) + deallocate(latitude, longitude, data3d_one_tile, data_one_tile) call ESMF_finalize(endflag=ESMF_END_KEEPMPI) From ec274206395cc6fedfc16b4702b5dcd8e2306e93 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Tue, 31 Jan 2023 15:00:25 +0000 Subject: [PATCH 14/19] Remove unused variables from atmosphere.F90 Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 60 ++++++++++++++---------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 10ef26fe7..9ae9ef981 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -1552,10 +1552,9 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) REAL(ESMF_KIND_R8), POINTER :: QOPTR(:,:,:) ! output tracer REAL(ESMF_KIND_R8), POINTER :: O2PTR(:,:,:) ! output tracer REAL(ESMF_KIND_R8), POINTER :: O3PTR(:,:,:) ! output tracer -!REAL(ESMF_KIND_R8), POINTER :: WIND2PTR(:,:,:,:) ! output wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: xWIND2PTR(:,:,:) ! output wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: yWIND2PTR(:,:,:) ! output wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: zWIND2PTR(:,:,:) ! output wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: XWIND2PTR(:,:,:) ! output wind (x component) + REAL(ESMF_KIND_R8), POINTER :: YWIND2PTR(:,:,:) ! output wind (y component) + REAL(ESMF_KIND_R8), POINTER :: ZWIND2PTR(:,:,:) ! output wind (z component) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1628,17 +1627,17 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) print*,"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED WIND." call ESMF_FieldGet(xwind_target_grid, & - farrayPtr=xWIND2PTR, rc=rc) + farrayPtr=XWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) call ESMF_FieldGet(ywind_target_grid, & - farrayPtr=yWIND2PTR, rc=rc) + farrayPtr=YWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) call ESMF_FieldGet(zwind_target_grid, & - farrayPtr=zWIND2PTR, rc=rc) + farrayPtr=ZWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) @@ -1659,12 +1658,9 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) ! DO K=KREF,LEV_TARGET COE = P2PTR(I,J,K) / P2PTR(I,J,KREF) - xWIND2PTR(I,J,K) = COE*xWIND2PTR(I,J,K) - yWIND2PTR(I,J,K) = COE*yWIND2PTR(I,J,K) - zWIND2PTR(I,J,K) = COE*zWIND2PTR(I,J,K) -! WIND2PTR(I,J,K,1) = COE*WIND2PTR(I,J,K,1) -! WIND2PTR(I,J,K,2) = COE*WIND2PTR(I,J,K,2) -! WIND2PTR(I,J,K,3) = COE*WIND2PTR(I,J,K,3) + XWIND2PTR(I,J,K) = COE*XWIND2PTR(I,J,K) + YWIND2PTR(I,J,K) = COE*YWIND2PTR(I,J,K) + ZWIND2PTR(I,J,K) = COE*ZWIND2PTR(I,J,K) DZDT2PTR(I,J,K) = COE*DZDT2PTR(I,J,K) ENDDO @@ -1790,14 +1786,12 @@ SUBROUTINE VINTG REAL(ESMF_KIND_R8), POINTER :: T2PTR(:,:,:) ! output temperature REAL(ESMF_KIND_R8), POINTER :: Q1PTR(:,:,:) ! input tracer REAL(ESMF_KIND_R8), POINTER :: Q2PTR(:,:,:) ! output tracer - REAL(ESMF_KIND_R8), POINTER :: WIND1PTR(:,:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: xWIND1PTR(:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: yWIND1PTR(:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: zWIND1PTR(:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: WIND2PTR(:,:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: xWIND2PTR(:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: yWIND2PTR(:,:,:) ! input wind (x,y,z components) - REAL(ESMF_KIND_R8), POINTER :: zWIND2PTR(:,:,:) ! input wind (x,y,z components) + REAL(ESMF_KIND_R8), POINTER :: XWIND1PTR(:,:,:) ! input wind (x component) + REAL(ESMF_KIND_R8), POINTER :: YWIND1PTR(:,:,:) ! input wind (y component) + REAL(ESMF_KIND_R8), POINTER :: ZWIND1PTR(:,:,:) ! input wind (z component) + REAL(ESMF_KIND_R8), POINTER :: XWIND2PTR(:,:,:) ! output wind (x component) + REAL(ESMF_KIND_R8), POINTER :: YWIND2PTR(:,:,:) ! output wind (y component) + REAL(ESMF_KIND_R8), POINTER :: ZWIND2PTR(:,:,:) ! output wind (z component) ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! COMPUTE LOG PRESSURE INTERPOLATING COORDINATE @@ -1837,27 +1831,27 @@ SUBROUTINE VINTG print*,"- CALL FieldGet FOR x WIND." call ESMF_FieldGet(xwind_b4adj_target_grid, & - farrayPtr=xWIND1PTR, rc=rc) + farrayPtr=XWIND1PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - C1(:,:,:,1) = xWIND1PTR(:,:,:) + C1(:,:,:,1) = XWIND1PTR(:,:,:) print*,"- CALL FieldGet FOR y WIND." call ESMF_FieldGet(ywind_b4adj_target_grid, & - farrayPtr=yWIND1PTR, rc=rc) + farrayPtr=YWIND1PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - C1(:,:,:,2) = yWIND1PTR(:,:,:) + C1(:,:,:,2) = YWIND1PTR(:,:,:) print*,"- CALL FieldGet FOR z WIND." call ESMF_FieldGet(zwind_b4adj_target_grid, & - farrayPtr=zWIND1PTR, rc=rc) + farrayPtr=ZWIND1PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - C1(:,:,:,3) = zWIND1PTR(:,:,:) + C1(:,:,:,3) = ZWIND1PTR(:,:,:) print*,"- CALL FieldGet FOR VERTICAL VELOCITY." call ESMF_FieldGet(dzdt_b4adj_target_grid, & @@ -1921,28 +1915,28 @@ SUBROUTINE VINTG print*,"- CALL FieldGet FOR ADJUSTED xwind." call ESMF_FieldGet(xwind_target_grid, & - farrayPtr=xwind2PTR, rc=rc) + farrayPtr=XWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) print*,"- CALL FieldGet FOR ADJUSTED ywind." call ESMF_FieldGet(ywind_target_grid, & - farrayPtr=ywind2PTR, rc=rc) + farrayPtr=YWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) print*,"- CALL FieldGet FOR ADJUSTED zwind." call ESMF_FieldGet(zwind_target_grid, & - farrayPtr=zwind2PTR, rc=rc) + farrayPtr=ZWIND2PTR, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) DO K=1,LEV_TARGET DO I=CLB(1),CUB(1) DO J=CLB(2),CUB(2) - xWIND2PTR(I,J,K)=C2(I,J,K,1) - yWIND2PTR(I,J,K)=C2(I,J,K,2) - zWIND2PTR(I,J,K)=C2(I,J,K,3) + XWIND2PTR(I,J,K)=C2(I,J,K,1) + YWIND2PTR(I,J,K)=C2(I,J,K,2) + ZWIND2PTR(I,J,K)=C2(I,J,K,3) DZDT2PTR(I,J,K)=C2(I,J,K,4) DZ=Z2(I,J,K)-Z1(I,J,1) IF(DZ.GE.0) THEN From e4b0d2768b759de267885af84c0778ee980ef469 Mon Sep 17 00:00:00 2001 From: George Gayno Date: Tue, 31 Jan 2023 15:33:23 +0000 Subject: [PATCH 15/19] Update to esmf 8.4 on Jet. Fixes #633. --- modulefiles/build.jet.intel.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modulefiles/build.jet.intel.lua b/modulefiles/build.jet.intel.lua index fbf9d8024..bc716c79d 100644 --- a/modulefiles/build.jet.intel.lua +++ b/modulefiles/build.jet.intel.lua @@ -28,7 +28,7 @@ load(pathJoin("netcdf", netcdf_ver)) nccmp_ver=os.getenv("nccmp_ver") or "1.8.9.0" load(pathJoin("nccmp", nccmp_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.2.0" +esmf_ver=os.getenv("esmf_ver") or "8.4.0b08" load(pathJoin("esmf", esmf_ver)) w3nco_ver=os.getenv("w3nco_ver") or "2.4.1" From 220ca481ad67902995ed3ef49b2f0da3d3e86a9e Mon Sep 17 00:00:00 2001 From: George Gayno Date: Tue, 31 Jan 2023 09:42:59 -0600 Subject: [PATCH 16/19] Update to esmf v8.4 on orion. Fixes #633. --- modulefiles/build.orion.intel.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modulefiles/build.orion.intel.lua b/modulefiles/build.orion.intel.lua index 80e5986d1..b2efc0045 100644 --- a/modulefiles/build.orion.intel.lua +++ b/modulefiles/build.orion.intel.lua @@ -55,7 +55,7 @@ load(pathJoin("netcdf", netcdf_ver)) nccmp_ver=os.getenv("nccmp_ver") or "1.8.9.0" load(pathJoin("nccmp", nccmp_ver)) -esmf_ver=os.getenv("esmf_ver") or "8.2.0" +esmf_ver=os.getenv("esmf_ver") or "8.4.0b08" load(pathJoin("esmf", esmf_ver)) nco_ver=os.getenv("nco_ver") or "4.9.3" From e12ca40b3890601635936a0261e5c5a79f4bd9fb Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Wed, 1 Feb 2023 13:48:09 +0000 Subject: [PATCH 17/19] Update some print statements. Fixes #633. --- sorc/chgres_cube.fd/atm_input_data.F90 | 6 +++--- util/gdas_init/config | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sorc/chgres_cube.fd/atm_input_data.F90 b/sorc/chgres_cube.fd/atm_input_data.F90 index 1cf075a85..753ae6b61 100644 --- a/sorc/chgres_cube.fd/atm_input_data.F90 +++ b/sorc/chgres_cube.fd/atm_input_data.F90 @@ -3119,7 +3119,7 @@ subroutine convert_winds_to_xyz real(esmf_kind_r8), pointer :: latptr(:,:) real(esmf_kind_r8), pointer :: lonptr(:,:) - print*,"- CALL FieldGet FOR x." + print*,"- CALL FieldGet FOR xwind." call ESMF_FieldGet(xwind_input_grid, & computationalLBound=clb, & computationalUBound=cub, & @@ -3127,13 +3127,13 @@ subroutine convert_winds_to_xyz if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - print*,"- CALL FieldGet FOR y." + print*,"- CALL FieldGet FOR ywind." call ESMF_FieldGet(ywind_input_grid, & farrayPtr=yptr, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldGet", rc) - print*,"- CALL FieldGet FOR z." + print*,"- CALL FieldGet FOR zwind." call ESMF_FieldGet(zwind_input_grid, & farrayPtr=zptr, rc=rc) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & diff --git a/util/gdas_init/config b/util/gdas_init/config index 6b0181605..cb8cfe0a5 100644 --- a/util/gdas_init/config +++ b/util/gdas_init/config @@ -57,13 +57,13 @@ mm=03 dd=01 hh=00 -use_v16retro=yes +use_v16retro=no -LEVS=128 +LEVS=65 CDUMP=gfs -CRES_HIRES=C3072 +CRES_HIRES=C192 CRES_ENKF=C96 UFS_DIR=$PWD/../.. From 6cd48c0ff69398c8a7ca4f9653a7fe1a7129a598 Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Thu, 2 Feb 2023 13:14:57 +0000 Subject: [PATCH 18/19] Update more print statements. Fixes #633. --- sorc/chgres_cube.fd/atmosphere.F90 | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sorc/chgres_cube.fd/atmosphere.F90 b/sorc/chgres_cube.fd/atmosphere.F90 index 9ae9ef981..b5fd465dc 100644 --- a/sorc/chgres_cube.fd/atmosphere.F90 +++ b/sorc/chgres_cube.fd/atmosphere.F90 @@ -371,7 +371,7 @@ subroutine atmosphere_driver(localpet) isrctermprocessing = 1 method=ESMF_REGRIDMETHOD_BILINEAR - print*,"- CALL FieldRegridStore FOR 3D-WIND WEST EDGE." + print*,"- CALL FieldRegridStore FOR X-WIND WEST EDGE." call ESMF_FieldRegridStore(xwind_target_grid, & xwind_w_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & @@ -382,7 +382,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) - print*,"- CALL Field_Regrid FOR xWIND WEST EDGE." + print*,"- CALL Field_Regrid FOR X-WIND WEST EDGE." call ESMF_FieldRegrid(xwind_target_grid, & xwind_w_target_grid, & routehandle=regrid_bl, & @@ -390,7 +390,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR yWIND WEST EDGE." + print*,"- CALL Field_Regrid FOR Y-WIND WEST EDGE." call ESMF_FieldRegrid(ywind_target_grid, & ywind_w_target_grid, & routehandle=regrid_bl, & @@ -398,7 +398,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR zWIND WEST EDGE." + print*,"- CALL Field_Regrid FOR Z-WIND WEST EDGE." call ESMF_FieldRegrid(zwind_target_grid, & zwind_w_target_grid, & routehandle=regrid_bl, & @@ -414,7 +414,7 @@ subroutine atmosphere_driver(localpet) isrctermprocessing = 1 method=ESMF_REGRIDMETHOD_BILINEAR - print*,"- CALL FieldRegridStore FOR 3D-WIND SOUTH EDGE." + print*,"- CALL FieldRegridStore FOR X-WIND SOUTH EDGE." call ESMF_FieldRegridStore(xwind_target_grid, & xwind_s_target_grid, & polemethod=ESMF_POLEMETHOD_ALLAVG, & @@ -425,7 +425,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegridStore", rc) - print*,"- CALL Field_Regrid FOR xWIND SOUTH EDGE." + print*,"- CALL Field_Regrid FOR X-WIND SOUTH EDGE." call ESMF_FieldRegrid(xwind_target_grid, & xwind_s_target_grid, & routehandle=regrid_bl, & @@ -433,7 +433,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR yWIND SOUTH EDGE." + print*,"- CALL Field_Regrid FOR Y-WIND SOUTH EDGE." call ESMF_FieldRegrid(ywind_target_grid, & ywind_s_target_grid, & routehandle=regrid_bl, & @@ -441,7 +441,7 @@ subroutine atmosphere_driver(localpet) if(ESMF_logFoundError(rcToCheck=rc,msg=ESMF_LOGERR_PASSTHRU,line=__LINE__,file=__FILE__)) & call error_handler("IN FieldRegrid", rc) - print*,"- CALL Field_Regrid FOR zWIND SOUTH EDGE." + print*,"- CALL Field_Regrid FOR Z-WIND SOUTH EDGE." call ESMF_FieldRegrid(zwind_target_grid, & zwind_s_target_grid, & routehandle=regrid_bl, & @@ -1624,7 +1624,7 @@ SUBROUTINE VINTG_WAM (YEAR,MONTH,DAY,HOUR) call error_handler("IN FieldGet", rc) ! wind - print*,"VINTG_WAM:- CALL FieldGet FOR 3-D ADJUSTED WIND." + print*,"VINTG_WAM:- CALL FieldGet FOR ADJUSTED WIND COMPONENTS." call ESMF_FieldGet(xwind_target_grid, & farrayPtr=XWIND2PTR, rc=rc) From 2686c9f1b6747b4d3f038374888342b995e87642 Mon Sep 17 00:00:00 2001 From: "George.Gayno" Date: Thu, 2 Feb 2023 13:15:38 +0000 Subject: [PATCH 19/19] Revert GDAS init configuration file to the version in develop. Fixes #633. --- util/gdas_init/config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/util/gdas_init/config b/util/gdas_init/config index cb8cfe0a5..a67f75c35 100644 --- a/util/gdas_init/config +++ b/util/gdas_init/config @@ -52,16 +52,16 @@ EXTRACT_DATA=no RUN_CHGRES=yes -yy=2021 -mm=03 -dd=01 -hh=00 +yy=2022 +mm=05 +dd=06 +hh=06 use_v16retro=no LEVS=65 -CDUMP=gfs +CDUMP=gdas CRES_HIRES=C192 CRES_ENKF=C96