From 8c75d8dbdfbb4860bee0bf8953c455d569d883dd Mon Sep 17 00:00:00 2001 From: smileMchen Date: Mon, 23 Jan 2017 14:17:13 -0700 Subject: [PATCH] Add WPS capability to process rotated lat-lon grid data (#3) This PR adds the capability in the WPS to process RAP 'wrfout' data on a rotated lat-lon grid. Utility programs ( rd_intermediate and g2print) are also updated to work with rotated lat-lon data. A new Vtable, Vtable.raphrrr, is also added. --- geogrid/src/llxy_module.F | 23 ++++++- metgrid/METGRID.TBL.ARW | 119 ++++++++++++++++++++++++++++++++++ metgrid/src/met_data_module.F | 2 + metgrid/src/process_domain_module.F | 19 ++++-- metgrid/src/read_met_module.F | 24 +++++++ ungrib/Variable_Tables/Vtable.raphrrr | 52 +++++++++++++++ ungrib/src/gridinfo.F | 3 + ungrib/src/output.F | 3 + ungrib/src/rd_grib2.F | 35 ++++++++++ ungrib/src/rrpr.F | 3 + util/src/rd_intermediate.F | 11 ++++ 11 files changed, 286 insertions(+), 8 deletions(-) create mode 100755 ungrib/Variable_Tables/Vtable.raphrrr diff --git a/geogrid/src/llxy_module.F b/geogrid/src/llxy_module.F index 2e94739..7d482af 100644 --- a/geogrid/src/llxy_module.F +++ b/geogrid/src/llxy_module.F @@ -38,7 +38,11 @@ module llxy_module !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! subroutine push_source_projection(iprojection, user_stand_lon, user_truelat1, user_truelat2, & user_dxkm, user_dykm, user_dlat, user_dlon, user_known_x, & - user_known_y, user_known_lat, user_known_lon, earth_radius) + user_known_y, user_known_lat, user_known_lon, & + user_pole_lat, user_pole_lon, & + user_centerlat, user_centerlon, & + user_centeri, user_centerj, & + earth_radius) implicit none @@ -48,6 +52,9 @@ module llxy_module user_dlat, user_dlon, & user_known_x, user_known_y, user_known_lat, user_known_lon real, intent(in), optional :: earth_radius + real, intent(in), optional :: user_centerlon, user_centerlat, user_pole_lat, user_pole_lon + real, intent(in), optional :: user_centerj, user_centeri + SOURCE_PROJ = SOURCE_PROJ-1 if (SOURCE_PROJ < -MAX_SOURCE_LEVELS) then @@ -82,8 +89,18 @@ module llxy_module //'source data in push_source_projection()') else if (iprojection == PROJ_CASSINI) then - call mprintf(.true.,ERROR,'Should not have PROJ_CASSINI as projection for ' & - //'source data in push_source_projection()') + + call map_set(iprojection, proj_stack(SOURCE_PROJ), & + latinc=user_dlat, & + loninc=user_dlon, & + stdlon=user_stand_lon, & + lat1=user_centerlat, & + lon1=user_centerlon, & + lat0=user_pole_lat, & + lon0=user_pole_lon, & + knowni=user_centeri, & + knownj=user_centerj, & + r_earth=earth_radius) else if (iprojection == PROJ_LC) then call map_set(iprojection, proj_stack(SOURCE_PROJ), & diff --git a/metgrid/METGRID.TBL.ARW b/metgrid/METGRID.TBL.ARW index da17e9b..4bf9020 100644 --- a/metgrid/METGRID.TBL.ARW +++ b/metgrid/METGRID.TBL.ARW @@ -70,6 +70,13 @@ name=SOILM fill_lev = 40 : SOILM040(200100) fill_lev = 160 : SOILM160(200100) fill_lev = 300 : SOILM300(200100) +# HRRR + fill_lev = 1 : SOILM001(200100) + fill_lev = 4 : SOILM004(200100) + fill_lev = 10 : SOILM010(200100) + fill_lev = 30 : SOILM030(200100) + fill_lev = 60 : SOILM060(200100) + fill_lev = 100 : SOILM100(200100) ======================================== name=SOILT z_dim_name=num_soilt_levels @@ -82,6 +89,13 @@ name=SOILT fill_lev = 300 : SOILT300(200100) fill_lev = 49 : SOILT050(200100) fill_lev = 51 : SOILT050(200100) +#HRRR + fill_lev = 1 : SOILT001(200100) + fill_lev = 4 : SOILT004(200100) + fill_lev = 10 : SOILT010(200100) + fill_lev = 30 : SOILT030(200100) + fill_lev = 60 : SOILT060(200100) + fill_lev = 100 : SOILT100(200100) ======================================== name=SOIL_LEVELS derived=yes @@ -377,6 +391,20 @@ name=SOILM000 fill_missing=1. flag_in_output=FLAG_SOILM000 ======================================== +name=SOILM001 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM001 +======================================== +name=SOILM004 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM004 +======================================== name=SOILM005 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -384,6 +412,13 @@ name=SOILM005 fill_missing=1. flag_in_output=FLAG_SOILM005 ======================================== +name=SOILM010 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM010 +======================================== name=SOILM020 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -391,6 +426,13 @@ name=SOILM020 fill_missing=1. flag_in_output=FLAG_SOILM020 ======================================== +name=SOILM030 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM030 +======================================== name=SOILM040 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -398,6 +440,20 @@ name=SOILM040 fill_missing=1. flag_in_output=FLAG_SOILM040 ======================================== +name=SOILM060 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM060 +======================================== +name=SOILM100 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=1. + flag_in_output=FLAG_SOILM100 +======================================== name=SOILM160 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -419,6 +475,20 @@ name=SOILT000 fill_missing=285. flag_in_output=FLAG_SOILT000 ======================================== +name=SOILT001 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT001 +======================================== +name=SOILT004 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT004 +======================================== name=SOILT005 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -426,6 +496,13 @@ name=SOILT005 fill_missing=285. flag_in_output=FLAG_SOILT005 ======================================== +name=SOILT010 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT010 +======================================== name=SOILT020 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -433,6 +510,13 @@ name=SOILT020 fill_missing=285. flag_in_output=FLAG_SOILT020 ======================================== +name=SOILT030 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT030 +======================================== name=SOILT040 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -440,6 +524,20 @@ name=SOILT040 fill_missing=285. flag_in_output=FLAG_SOILT040 ======================================== +name=SOILT060 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT060 +======================================== +name=SOILT100 + interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search + masked=water + interp_mask=LANDSEA(0) + fill_missing=285. + flag_in_output=FLAG_SOILT100 +======================================== name=SOILT160 interp_option=sixteen_pt+four_pt+wt_average_4pt+wt_average_16pt+search masked=water @@ -576,6 +674,19 @@ name=QNI fill_lev=200100:const(0.) flag_in_output=FLAG_QNI ======================================== +name=QNC + output=no + interp_option=four_pt+average_4pt + fill_missing=0. + fill_lev=200100:const(0.) + flag_in_output=FLAG_QNI +======================================== +name=QNR + interp_option=four_pt+average_4pt + fill_missing=0. + fill_lev=200100:const(0.) + flag_in_output=FLAG_QNI +======================================== name=VPTMP interp_option=sixteen_pt+four_pt+average_4pt fill_missing=0. @@ -883,3 +994,11 @@ name=HGTMAXW interp_option=four_pt flag_in_output=FLAG_HGTMAXW ======================================== +name=QNWFA + z_dim_name=num_qnwfa_levels + interp_option=four_pt+average_4pt +======================================== +name=QNIFA + z_dim_name=num_qnwfa_levels + interp_option=four_pt+average_4pt +======================================== diff --git a/metgrid/src/met_data_module.F b/metgrid/src/met_data_module.F index c7151bd..10ed885 100644 --- a/metgrid/src/met_data_module.F +++ b/metgrid/src/met_data_module.F @@ -5,6 +5,8 @@ module met_data_module integer :: version, nx, ny, iproj real :: xfcst, xlvl, startlat, startlon, starti, startj, & deltalat, deltalon, dx, dy, xlonc, & + centerlat, centerlon, & + pole_lat, pole_lon, & truelat1, truelat2, earth_radius real, pointer, dimension(:,:) :: slab logical :: is_wind_grid_rel diff --git a/metgrid/src/process_domain_module.F b/metgrid/src/process_domain_module.F index 18df07e..df2c5f5 100644 --- a/metgrid/src/process_domain_module.F +++ b/metgrid/src/process_domain_module.F @@ -601,8 +601,8 @@ module process_domain_module end do - end if - end do + end if ! if (istatus == 0) + end do ! do while (istatus == 0) static_list_array => list_get_keys(static_list) call list_init(flag_list) @@ -827,7 +827,11 @@ integer, parameter :: BDR_WIDTH = 3 call push_source_projection(fg_data%iproj, fg_data%xlonc, fg_data%truelat1, & fg_data%truelat2, fg_data%dx, fg_data%dy, fg_data%deltalat, & fg_data%deltalon, fg_data%starti, fg_data%startj, & - fg_data%startlat, fg_data%startlon, earth_radius=fg_data%earth_radius*1000.) + fg_data%startlat, fg_data%startlon, & + fg_data%pole_lat, fg_data%pole_lon, & + fg_data%centerlat, fg_data%centerlon, & + real(fg_data%nx+1)/2., real(fg_data%ny+1)/2., & + earth_radius=fg_data%earth_radius*1000.) ! Initialize fg_input structure to store the field field%header%version = 1 @@ -1054,11 +1058,16 @@ integer, parameter :: BDR_WIDTH = 3 end do call read_met_close() - + call push_source_projection(fg_data%iproj, fg_data%xlonc, fg_data%truelat1, & fg_data%truelat2, fg_data%dx, fg_data%dy, fg_data%deltalat, & fg_data%deltalon, fg_data%starti, fg_data%startj, & - fg_data%startlat, fg_data%startlon, earth_radius=fg_data%earth_radius*1000.) + fg_data%startlat, fg_data%startlon, & + fg_data%pole_lat, fg_data%pole_lon, & + fg_data%centerlat, fg_data%centerlon, & + real(fg_data%nx+1)/2., real(fg_data%ny+1)/2., & + earth_radius=fg_data%earth_radius*1000.) + ! ! If necessary, rotate winds to earth-relative for this fg source diff --git a/metgrid/src/read_met_module.F b/metgrid/src/read_met_module.F index 3c8b4e0..269ebb9 100644 --- a/metgrid/src/read_met_module.F +++ b/metgrid/src/read_met_module.F @@ -327,6 +327,30 @@ module read_met_module fg_data % truelat1, & fg_data % earth_radius + ! CASSINI + else if (fg_data % iproj == 6) then + fg_data % iproj = PROJ_CASSINI + read(unit=input_unit,err=1001,end=1001) startloc, & + fg_data % startlat, & + fg_data % startlon, & + fg_data % dx, & + fg_data % dy, & + fg_data % centerlat, & + fg_data % centerlon, & + fg_data % earth_radius + + if ( fg_data % centerlat > 0. ) then + fg_data % pole_lat = 90. - fg_data % centerlat + fg_data % pole_lon = 180. + fg_data % xlonc = -fg_data % centerlon + else + fg_data % pole_lat = 90. + fg_data % centerlat + fg_data % pole_lon = 0. + fg_data % xlonc = 180. - fg_data % centerlon + end if + fg_data % deltalon = fg_data % dx + fg_data % deltalat = fg_data % dy + ! ????????? else call mprintf(.true.,ERROR,'Unrecognized projection code %i when reading from %s', & diff --git a/ungrib/Variable_Tables/Vtable.raphrrr b/ungrib/Variable_Tables/Vtable.raphrrr new file mode 100755 index 0000000..2c96fd4 --- /dev/null +++ b/ungrib/Variable_Tables/Vtable.raphrrr @@ -0,0 +1,52 @@ +GRIB1| Level| From | To | metgrid | metgrid | metgrid |GRIB2|GRIB2|GRIB2|GRIB2| +Param| Type |Level1|Level2| Name | Units | Description |Discp|Catgy|Param|Level| +-----+------+------+------+----------+----------+-----------------------------------------+-----------------------+ + 7 | 109 | * | | HGT | m | Height | 0 | 3 | 5 | 105 | + 1 | 109 | * | | PRESSURE | Pa | Pressure | 0 | 3 | 0 | 105 | + 11 | 109 | * | | TT | K | Temperature | 0 | 0 | 0 | 105 | + 51 | 109 | * | | SPECHUMD | kg kg-1 | Specific Humidity | 0 | 1 | 0 | 105 | + 33 | 109 | * | | UU | m s-1 | U | 0 | 2 | 2 | 105 | + 34 | 109 | * | | VV | m s-1 | V | 0 | 2 | 3 | 105 | + 153 | 109 | * | | QC | kg kg-1 | Cloud water mixing ratio | 0 | 1 | 22 | 105 | + 170 | 109 | * | | QR | kg kg-1 | Rain water mixing ratio | 0 | 1 | 24 | 105 | + 58 | 109 | * | | QI | kg kg-1 | Ice mixing ratio | 0 | 6 | 0 | 105 | + 171 | 109 | * | | QS | kg kg-1 | Snow water mixing ratio | 0 | 1 | 25 | 105 | + 179 | 109 | * | | QG | kg kg-1 | Graupel mixing ratio | 0 | 1 | 32 | 105 | + 153 | 109 | * | | QNR | kg-1 | Rain number concentration | 0 | 1 | 100 | 105 | + 255 | 109 | * | | QNC | kg-1 | Cloud number concentration | 0 | 6 | 28 | 105 | + 198 | 109 | * | | QNI | kg-1 | Ice number concentration | 0 | 6 | 29 | 105 | + 157 | 107 | * | | QNWFA | kg-1 | Water-fr. aerosol number concentration | 0 | 13 | 193 | 105 | + 156 | 107 | * | | QNIFA | kg-1 | Ice-fr. aerosol number concentration | 0 | 13 | 192 | 105 | + 11 | 105 | 2 | | TT | K | Temperature at 2 m | 0 | 0 | 0 | 103 | + 51 | 105 | 2 | | SPECHUMD | kg kg-1 | Specific Humidity at 2 m | 0 | 1 | 0 | 103 | + 52 | 105 | 2 | | RH | % | Relative Humidity at 2 m | 0 | 1 | | 103 | + 33 | 105 | 10 | | UU | m s-1 | U at 10 m | 0 | 2 | 2 | 103 | + 34 | 105 | 10 | | VV | m s-1 | V at 10 m | 0 | 2 | 3 | 103 | + 1 | 1 | 0 | | PSFC | Pa | Surface Pressure | 0 | 3 | 0 | 1 | + 129 | 102 | 0 | | PMSL | Pa | Sea-level Pressure | 0 | 3 | 198 | 101 | + 65 | 1 | 0 | | SNOW | kg m-2 | Water equivalent snow depth | 0 | 1 | 13 | 1 | + 66 | 1 | 0 | | SNOWH | m | Snow depth | 0 | 1 | 11 | 1 | + 11 | 1 | 0 | | SKINTEMP | K | Skin Temp ( = TSK ) | 0 | 0 | 0 | 1 | + 223 | 1 | 0 | | CANWAT | kg m-2 | Plant Canopy Surface Water | 2 | 0 | 196 | 1 | + 144 | 111 | 0 | | SOILM000 | fraction | Soil Moist 0 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 1 | | SOILM001 | fraction | Soil Moist 1 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 4 | | SOILM004 | fraction | Soil Moist 4 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 10 | | SOILM010 | fraction | Soil Moist 10 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 30 | | SOILM030 | fraction | Soil Moist 30 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 60 | | SOILM060 | fraction | Soil Moist 60 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 100 | | SOILM100 | fraction | Soil Moist 100 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 160 | | SOILM160 | fraction | Soil Moist 160 cm below ground | 2 | 0 | 192 | 106 | + 144 | 111 | 300 | | SOILM300 | fraction | Soil Moist 300 cm below ground | 2 | 0 | 192 | 106 | + 85 | 111 | 0 | | SOILT000 | K | Soil Temp 0 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 1 | | SOILT001 | K | Soil Temp 1 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 4 | | SOILT004 | K | Soil Temp 4 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 10 | | SOILT010 | K | Soil Temp 10 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 30 | | SOILT030 | K | Soil Temp 30 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 60 | | SOILT060 | K | Soil Temp 60 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 100 | | SOILT100 | K | Soil Temp 100 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 160 | | SOILT160 | K | Soil Temp 160 cm below ground | 2 | 0 | 2 | 106 | + 85 | 111 | 300 | | SOILT300 | K | Soil Temp 300 cm below ground | 2 | 0 | 2 | 106 | + 91 | 1 | 0 | | SEAICE | | Ice flag | 10 | 2 | 0 | 1 | + 81 | 1 | 0 | | LANDSEA | proprtn | Land/Sea flag (1=land, 0 or 2=sea) | 2 | 0 | 0 | 1 | + 7 | 1 | 0 | | SOILHGT | m | Terrain field of source analysis | 0 | 3 | 5 | 1 | +-----+------+------+------+----------+----------+-----------------------------------------+-----------------------+ diff --git a/ungrib/src/gridinfo.F b/ungrib/src/gridinfo.F index 8661fbc..bc9a4fd 100644 --- a/ungrib/src/gridinfo.F +++ b/ungrib/src/gridinfo.F @@ -17,6 +17,7 @@ module gridinfo ! 0 = lat/lon ! 3 = Lambert Conformal ! 5 = Polar Stereographic grid. + ! 6 = Cassini grid. integer :: nx ! Number of points in the X direction. integer :: ny ! Number of points in the Y direction. real :: truelat1 ! First true latitude (for Polar Stereo. and Lam. Conf.) @@ -25,6 +26,8 @@ module gridinfo character (len=8) :: startloc ! "CENTER " or "SWCORNER" real :: lat1 ! Starting latitude real :: lon1 ! Starting longitude + real :: lat0 ! central latitude + real :: lon0 ! central longitude real :: dx ! grid-spacing in the X direction (km or degrees) real :: dy ! grid-spacing in the Y direction (km or degrees) ! diff --git a/ungrib/src/output.F b/ungrib/src/output.F index c1673f6..2c802fd 100644 --- a/ungrib/src/output.F +++ b/ungrib/src/output.F @@ -236,6 +236,9 @@ subroutine output(hdate, nlvl, maxlvl, plvl, interval, iflag, out_format, prefix elseif (map%igrid.eq.1)then ! Mercator write (iunit) map%startloc, map%lat1, map%lon1, map%dy, map%dx, & map%truelat1, map%r_earth + elseif (map%igrid.eq.6)then ! CASSINI + write (iunit) map%startloc, map%lat1, map%lon1, map%dy, map%dx, & + map%lat0, map%lon0, map%r_earth ! refer to gridinfo.F else call mprintf(.true.,ERROR, & "Unrecognized map%%igrid: %i in subroutine output 1",i1=map%igrid) diff --git a/ungrib/src/rd_grib2.F b/ungrib/src/rd_grib2.F index 1946985..b4d3cdf 100644 --- a/ungrib/src/rd_grib2.F +++ b/ungrib/src/rd_grib2.F @@ -490,6 +490,41 @@ C SET ARGUMENTS & newline=.true.,f1=map%dx,f2=map%dy,f3=map%lat1,f4=map%lon1, & i1=nint(map%dy)) end if + elseif (gfld%igdtnum.eq.32769) then ! Arakawa Non-E Staggered grid. + map%igrid = 6 + map%nx = gfld%igdtmpl(8) + map%ny = gfld%igdtmpl(9) + map%dx = gfld%igdtmpl(17) + map%dy = gfld%igdtmpl(18) + map%lat1 = gfld%igdtmpl(12) + map%lon1 = gfld%igdtmpl(13) + map%lat0 = gfld%igdtmpl(15) + map%lon0 = gfld%igdtmpl(16) + map%r_earth = earth_radius (gfld%igdtmpl(1), + & gfld%igdtmpl(2),gfld%igdtmpl(3)) + if ((gfld%igdtmpl(10) .eq. 0).OR. + & (gfld%igdtmpl(10) .eq. 255)) THEN + map%lat1 = map%lat1/scale_factor + map%lon1 = map%lon1/scale_factor + map%lat0 = map%lat0/scale_factor + map%lon0 = map%lon0/scale_factor + map%dx = map%dx/scale_factor/1.e3 + map%dy = map%dy/scale_factor/1.e3 + else + ! Basic angle and subdivisions are non-zero (not tested) + map%lat1 = map%lat1 * + & (gfld%igdtmpl(11)/gfld%igdtmpl(10)) + map%lon1 = map%lon1 * + & (gfld%igdtmpl(11)/gfld%igdtmpl(10)) + map%dx = map%dx * + & (gfld%igdtmpl(11)/gfld%igdtmpl(10)) + map%dy = map%dy * + & (gfld%igdtmpl(11)/gfld%igdtmpl(10)) + call mprintf(.true.,STDOUT,"WARNING - Basic angle option + &has not been tested, continuing anyway") + call mprintf(.true.,LOGFILE,"WARNING - Basic angle option + & has not been tested, continuing anyway") + endif else call mprintf(.true.,STDOUT,"GRIB2 Unknown Projection: %i", diff --git a/ungrib/src/rrpr.F b/ungrib/src/rrpr.F index 6ec37a7..50ba18b 100644 --- a/ungrib/src/rrpr.F +++ b/ungrib/src/rrpr.F @@ -134,6 +134,9 @@ subroutine rrpr(hstart, ntimes, interval, nlvl, maxlvl, plvl, debug_level, out_f case (1) read (iunit) map%startloc, map%lat1, map%lon1, map%dy, map%dx, & map%truelat1, map%r_earth + case (6) + read (iunit) map%startloc, map%lat1, map%lon1, map%dy, map%dx, & + map%lat0,map%lon0, map%r_earth case default call mprintf(.true.,ERROR, & "Unrecognized map%%igrid: %i in RRPR 1",i1=map%igrid) diff --git a/util/src/rd_intermediate.F b/util/src/rd_intermediate.F index 9d01927..c5e4bed 100644 --- a/util/src/rd_intermediate.F +++ b/util/src/rd_intermediate.F @@ -78,6 +78,17 @@ PROGRAM rd_intermediate CALL mprintf(.true.,STDOUT,' STAND_LON = %f', f1=fg_data%xlonc) CALL mprintf(.true.,STDOUT,' TRUELAT1 = %f', f1=fg_data%truelat1) CALL mprintf(.true.,STDOUT,' EARTH_RADIUS = %f', f1=fg_data%earth_radius) + CASE (PROJ_CASSINI) + CALL mprintf(.true.,STDOUT, 'IPROJ = %i PROJECTION = %s', i1=6, s1='PROJ_CASSINI') + CALL mprintf(.true.,STDOUT,' REF_X, REF_Y = %f, %f', f1=fg_data%starti, f2=fg_data%startj) + CALL mprintf(.true.,STDOUT,' REF_LAT, REF_LON = %f, %f', f1=fg_data%startlat, f2=fg_data%startlon) + CALL mprintf(.true.,STDOUT,' DX, DY = %f, %f', f1=fg_data%dx, f2=fg_data%dy) + CALL mprintf(.true.,STDOUT,' STAND_LON = %f', f1=fg_data%xlonc) + CALL mprintf(.true.,STDOUT,' POLE_LAT = %f', f1=fg_data%pole_lat) + CALL mprintf(.true.,STDOUT,' POLE_LON = %f', f1=fg_data%pole_lon) + CALL mprintf(.true.,STDOUT,' CENTER_LAT = %f', f1=fg_data%centerlat) + CALL mprintf(.true.,STDOUT,' CENTER_LON = %f', f1=fg_data%centerlon) + CALL mprintf(.true.,STDOUT,' EARTH_RADIUS = %f', f1=fg_data%earth_radius) CASE default CALL mprintf(.true.,ERROR, ' Unknown iproj %i for version %i', i1=fg_data%iproj, i2=fg_data%version) END SELECT -- 2.11.4.GIT