160 likes | 359 Views
RAMS Customization. Example customizations. Higher-resolution topography Topography steepness Vegetation parameters SST modifications (lakes, bays, rivers) Idealized runs initial perturbation external tendency over time period. RAMS Custom Topography. Create your own dataset
E N D
Example customizations • Higher-resolution topography • Topography steepness • Vegetation parameters • SST modifications (lakes, bays, rivers) • Idealized runs • initial perturbation • external tendency over time period
RAMS Custom Topography • Create your own dataset • Use new program mk_blocks (on our web site soon, contact me if needed)… • …or older program mktopo.f (on our web site) • Need to convert data to regular latitude-longitude grid
RAMS Custom Topography • Sometimes topography is too “steep” • really, dependent on ratio ztopo/z • If this occurs, model can “blow up” or very cold temperatures can be found. • Helps most of the time to make topography smoother or to increase z. • Smoothing for an entire grid can be done in namelist: TOPTWVL and ITOPSFLG • Sometimes, only smoothing for a portion of the domain is needed. For example, a simulation for Colombia, but the Andes mountains are in the southern part of the domain.
RAMS Custom Topography ruser.f90: subroutine toptinit_user(n2,n3,ifm,topt) include 'rcommons.h' dimension topt(n2,n3) ! This subroutine is the intended location for a user to customize TOPT, ! the surface topography array. It is called after all other types of ! initialization of this field, so this subroutine has the last word. ! By default the subroutine makes no change to the field. The commented ! lines below serve as a template for user-designed changes; the example ! shown is the Witch of Agnesi mountain, a common test case. Note that ! this routine is called for each grid separately, so attention to the ! current value of ngrid in this routine may be required by the user. ! if(ifm.eq.1)then call toptsmth( …,…,…,…,…) elseif(ifm.eq.2)then endif return end
RAMS Vegetation Parameters – v4.4 • If you are using the default USGS land use files, make sure the land use type is correct. • This can be viewed with REVU. • If it is not correct: • Modify incorrect grid points in ruser.f90 (best if only a small area is incorrect) • Modify the input dataset block (best if most of a block is incorrect) • Create your own dataset (best if entire country could be better, or if you have higher resolution)
RAMS Vegetation Parameters – v4.4 • Modify incorrect grid points in ruser.f90 • best if only a small area is incorrect ruser.f90: subroutine sfcinit_user(n1,n2,n3,n4,n5,ifm,theta,pi0,pp,rv & ,tgp,wgp,schar,gsf,rvs,prss,pis,vt2da,vt2db,vnam,ivtime) ! The SCHAR array contains the following information according to the ! value of its 3rd index and patch number (the 4th index): ! For Soil Regions (ipatch > 1): ! 1: fractional coverage of patch (land percentage) ! 2: soil roughness length ! 3: vegetation type ! 4: vegetation fractional coverage ! 5: vegetation leaf area index ! 6: net roughness length (resultant for soil/snow plus veg) ! 7: vegetation roughness length ! 8: vegetation displacement height ! 9: patch wetness index ! 10: k index of top snow layer ! 11: datq vegetation class
RAMS Vegetation Parameters – v4.4 • Modify incorrect grid points in ruser.f90 elseif (vnam .eq. 'FILEDATA') then ! if (ifm .eq. 1) then ! do j = 1,n3 ! do i = 1,n2 ! schar(i,j,1,1) = ! schar(i,j,1,2) = ! do ipatch = 3,n5 ! schar(i,j,1,ipatch) = ! enddo ! ! do ipatch = 2,n5 ! do k = 1,nzg ! gsf(i,j,k,ipatch) = ! enddo ! schar(i,j,3,ipatch) = ! schar(i,j,11,ipatch) = ! enddo ! ! enddo ! enddo ! elseif (ifm .eq. 2) then ! endif schar dimensioned by: nx – number of x points ny – number of y points nv – parameter number np – patch number
RAMS Vegetation Parameters – v4.4 • Modify the input dataset block • best if most of a block is incorrect • Small program available to: • Read a block • Modify values • Write out new block • Code will need to be modified manually • Contact me if this is needed
RAMS Vegetation Parameters – v4.4 • Create your own dataset • Best if entire country could be better • If you have higher resolution data • Use new program mk_blocks. • Need to convert data to regular latitude-longitude grid
RAMS Vegetation Parameters – v4.4 ! LEAF-2 BIOPHYSICAL PARAMETERS BY LANDUSE CLASS NUMBER data bioparms/ & !----------------------------------------------------------------------------- !albedo lai vfrac zo rootdep LEAF-2 CLASS # ! emiss dlai dvfrac zdisp AND DESCRIPTION !----------------------------------------------------------------------------- ! BATS LSPs .14, .99, 0.0, 0.0, .00, .00, .00, 0.1, .0 & ! 0 Ocean ,.14, .99, 0.0, 0.0, .00, .00, .00, 0.1, .0 & ! 1 Lakes,rivers,streams (inland water) ,.40, .82, 0.0, 0.0, .00, .00, .01, 0.1, .0 & ! 2 Ice cap/glacier ,.10, .97, 6.0, 1.0, .80, .10, 1.00, 15.0, 1.5 & ! 3 Evergreen needleleaf tree ,.10, .95, 6.0, 5.0, .80, .30, 1.00, 20.0, 1.5 & ! 4 Deciduous needleleaf tree ,.20, .95, 6.0, 5.0, .80, .30, .80, 15.0, 2.0 & ! 5 Deciduous broadleaf tree ,.15, .95, 6.0, 1.0, .90, .50, 2.00, 20.0, 1.5 & ! 6 Evergreen broadleaf tree ,.26, .96, 2.0, 1.5, .80, .10, .02, .2, 1.0 & ! 7 Short grass ,.16, .96, 6.0, 5.5, .80, .30, .10, 1.0, 1.0 & ! 8 Tall grass ,.30, .86, 0.0, 0.0, .00, .00, .05, .1, 1.0 & ! 9 Desert ,.25, .96, 6.0, 5.5, .10, .10, .10, .5, 1.0 & ! 10 Semi-desert ,.20, .95, 6.0, 5.5, .60, .20, .04, .1, 1.0 & ! 11 Tundra ,.10, .97, 6.0, 1.0, .80, .20, .10, 1.0, 1.0 & ! 12 Evergreen shrub ,.20, .97, 6.0, 5.0, .80, .30, .10, 1.0, 1.0 & ! 13 Deciduous shrub ,.15, .96, 6.0, 3.0, .80, .20, .80, 20.0, 2.0 & ! 14 Mixed woodland ,.20, .95, 6.0, 5.5, .85, .60, .06, .7, 1.0 & ! 15 Crop/mixed farming ,.18, .95, 6.0, 5.5, .80, .60, .06, .7, 1.0 & ! 16 Irrigated crop ,.12, .98, 6.0, 5.5, .80, .40, .03, 1.0, 1.0 & ! 17 Bog or marsh
RAMS SST Modifications • Distributed dataset is 1-degree (111 km) resolution, 1955-1985 monthly average. • Some near-real time, some higher resolution datasets exist • Create your own dataset • Use new program mk_blocks • Need to convert data to regular latitude-longitude grid
RAMS SST Modifications • However, most SST datasets are only applicable to ocean regions. • Values over continents are interpolations between oceans, even for larger bays, seas, lakes, etc. • Temperatures are not correct. • So, if there is significant inland water regions in your domain, you may want to consider customizing: • Create a new dataset at higher resolution • Modify existing blocks • Or… ruser.f90 again!
RAMS SST Modifications ruser.f90: subroutine sfcinit_user(n1,n2,n3,n4,n5,ifm,theta,pi0,pp,rv & ,tgp,wgp,schar,gsf,rvs,prss,pis,vt2da,vt2db,vnam,ivtime) ! The TGP array contains the following information according to the ! value of its 3rd index and patch number (the 4th index): ! For Water Regions (ipatch = 1): ! nzg: temperature of ocean, lake, or river surface ! nzg+1: past ocean, lake, or river temperature (for time updating) ! nzg+2: future ocean, lake, or river temperature (for time updating) if (vnam .eq. 'SSTDATA') then ! if (ifm .eq. 1) then ! ! do j = 1,n3 ! do i = 1,n2 ! tgp(i,j,nzg+1,1) = ! tgp(i,j,nzg+2,1) = ! enddo ! enddo ! ! elseif (ifm .eq. 2) then ! endif
Idealized Runs – Initial Perturbation • Some idealized runs, initialized from a single sounding, may need an initial perturbation to generate a circulation. • Example: flat terrain or ocean, generate a convective cell • To initialize the perturbation, a custom subroutine is required, since all perturbations will most likely be different. • An example subroutine is in ruser.f90 (subroutine bubble). subroutine bubble(m1,m2,m3,thp,rtp) dimension thp(m1,m2,m3),rtp(m1,m2,m3) ! do j = 1,1 do i = 17,26 do k = 2,7 !e thp(k,i,j) = thp(k,i,j) + 5. !e rtp(k,i,j) = rtp(k,i,j) * 1.2 enddo enddo enddo return end • Adds 5 deg to potential temperature and increases total water mixing ratio by 20% over specified grid points • The call to this routine then needs to be inserted into subroutine INITLZ (rdint.f90, about line 202).
Idealized Runs – Perturbation tendency • It may be better in some idealized runs to introduce a perturbation over a period of time (e.g., with a tendency) • To specify the tendency, a custom subroutine is required, since all perturbations will most likely be different. • An example subroutine is in ruser.f90 (subroutine trtend). • Adds 10 deg to potential temperature and increases total water mixing ratio by 10 g/kg over specified grid points over 1 hour • The call to this routine then needs to be inserted into subroutine TIMESTEP (rtimh.f90, about line 107). SUBROUTINE TRTEND(M1,M2,M3,K1,K2,I1,I2,J1,J2,RTT,THT) DIMENSION RTT(M1,M2,M3),THT(M1,M2,M3) DO J=J1,J2 DO I=I1,I2 DO K=K1,K2 RTT(K,I,J)=RTT(K,I,J)+0.010/3600. THT(K,I,J)=THT(K,I,J)+10./3600. ENDDO ENDDO ENDDO