New option for SLUCM to consider global distributed urban parameters#1881
New option for SLUCM to consider global distributed urban parameters#1881epn09 wants to merge 3 commits intowrf-model:developfrom
Conversation
|
This PR goes in pair with NCAR/noahmp#96. Without it, the code will not compile. |
|
I think @epn09 also modifies the Noah-MP driver part of the code, but the way of submitting this PR to include the Noah-MP submodule update may not be correct, which may be the cause for the regression test to fail. |
|
I will come back to this PR later for a more detailed review when I have more time. |
|
@tslin2, you may also want to review this urban code which is also related to Noah-MP PR I assigned you as a reviewer. Note that this is just for Noah-MP v4.5 not the latest refactored code. |
okay, will take a look. |
|
@cenlinhe May I ask if there's any update? |
|
This PR requires an update from Noah-MP driver part for v4.5 first and then connect the WRF update with the updated Noah-MP commit from Noah-MP GitHub in a new PR. I will need to update the Noah-MP GitHub commit first and then probably have to re-submit a PR with the updated Noah-MP commit for this. |
|
|
||
| state real ZD_URB2D ij misc 1 - i1 "ZD_URB2D" "Zero-plane Displacement" "m" | ||
| state real Z0_URB2D ij misc 1 - i01r "Z0_URB2D" "Roughness length for momentum" "m" | ||
| state real LF_URB2D_S ij misc 1 - i01r "LF_URB2D_S" "Frontal area index (no wind directional dependency)" "" |
There was a problem hiding this comment.
@epn09 what is the difference between LF_URB2D_S and LF_URB2D? Why do you need to create this new variable instead of using the existing LF_URB2D?
There was a problem hiding this comment.
@cenlinhe S in LF_URB2D_S means "single". If my understanding is right, LF_URB2D has 4 values for 4 wind direction, but our dataset only have one value for all wind direction. So, I created this new variable.
There was a problem hiding this comment.
OK, I see. This makes sense.
| state real LB_URB2D ij misc 1 - ir "BUILD_SURF_RATIO" "BUILDING SURFACE AREA TO PLAN AREA RATIO" "dimensionless" | ||
| state real HGT_URB2D ij misc 1 - ir "BUILD_HEIGHT" "AVERAGE BUILDING HEIGHT WEIGHTED BY BUILDING PLAN AREA" "m" | ||
| state real MH_URB2D ij misc 1 - ir "MH_URB2D" "Mean Building Height" "m" | ||
| state real MH_URB2D ij misc 1 - i01r "MH_URB2D" "Mean Building Height" "m" |
There was a problem hiding this comment.
@dudhia What is the difference between "i" and "i01"?
There was a problem hiding this comment.
@cenlinhe Here letter i represents input data. The number 0 means it is part of wrfinput, output from real, and input to the model, and 1 is the input to real program or the met_em output data.
There was a problem hiding this comment.
@weiwangncar If we do not specify "0" and/or "1" after "i", does it mean it can be in any input files or by default assume it is from wrfinput? For example, for variables like HGT_URB2D, they are only specified as "i" instead of "i01".
There was a problem hiding this comment.
@weiwangncar @dudhia Since these variables are optional (i.e., users may not provide these in their geo_em input file), I think it should be set to "i" instead of "i01". Otherwise, WRF will look for these variables in wrfinput or met_em files, and report errors? Is this correct?
There was a problem hiding this comment.
@cenlinhe Sorry I missed these comments. If you just have an 'i', that variable is only appearing in wrfinput - whether it has value will depend on what real does. If there is no input to real, the array may be all zero. If the data comes from geogrid and metgrid, it should be set to i01.
dyn_em/module_initialize_real.F
Outdated
|
|
||
| ! Split NUDAPT Urban Parameters | ||
|
|
||
| distributed_aerodynamics_if: IF (config_flags%use_distributed_aerodynamics) THEN |
There was a problem hiding this comment.
need to add config_flags%sf_urban_physics == 1 in the if-statement too.
| distributed_aerodynamics_if: IF (config_flags%use_distributed_aerodynamics) THEN | ||
| DO j = jts , MIN(jde-1,jte) | ||
| DO i = its , MIN(ide-1,ite) | ||
| IF (grid%ivgtyp(i, j) == model_config_rec%isurban(grid%id)) THEN |
There was a problem hiding this comment.
need to also include a treatment for urban LCZ type so that the model will not produce weird values for LCZ pixels. If this scheme does not work with LCZ, then add a if-statement here to show error message for this incompatibility.
There was a problem hiding this comment.
@cenlinhe I added if-statement and error messages to share/module_check_a_mundo.F.
| DO j = jts , MIN(jde-1,jte) | ||
| DO i = its , MIN(ide-1,ite) | ||
| IF (grid%ivgtyp(i, j) == model_config_rec%isurban(grid%id)) THEN | ||
| grid%frc_urb2d(i, j) = MAX(0.1, MIN(0.9, 1 - grid%shdavg(i, j) / 100.)) |
There was a problem hiding this comment.
@epn09 not sure if this is a good way to estimate urban fraction (=1-vegfrac), why not using the LAND_USE_F variable to read in the urban fraction? Also, I think the shdmax should be used instead of shdavg.
There was a problem hiding this comment.
@cenlinhe Please correct me if I'm wrong but LANDUSEF is not so good because it's derived from land use map (for example, MODIS). If a WRF grid will all MODIS grids classified as urban, the WRF grid will have LANDUSEF(urban) = 100. But from our experience and from reality, 100% urban cover is really rare. So we assume that urban fraction + vegetation fraction = 1, because even in 100% urban cover grid there is still some vegetation fraction in the input data.
As for the shdmax, I think if we do that urban fraction might be a little bit small because trees in its growth season can cover very high fraction of the ground. On the other hand, shdmin may make urban fraction too big. Hence, I use the value in the middle shdavg.
There was a problem hiding this comment.
OK, this makes sense, at least for now. more tests with the impact of shdavg vs shdmax are needed in the future.
There was a problem hiding this comment.
@tslin2 @epn09 OK, let me comment here since this is probably the first place where it showed up. I think I understood what Khanh is trying to do here. If there is no other data source for FRC_URB2D, one can come up with a few ways to assign FRC_URB2D values. It used to be that FRC_URB2D is prescribed in the URBPARM.TBL (e.g., 0.5 for low intensity residential urban etc). With NLCD data, FRC_URB2D is actually estimated from NLCD and is no longer using prescribed values from URBPARM.TBL. Now this part of code is trying to assign FRC_URB2D based on vegetation fraction, which is not a terrible idea. But this will limit the compatibility of this code with potentially new land use/land cover data that can provide FRC_URB2D.
Khanh (first of all, congratulations on becoming a doctor, way to go), regarding If a WRF grid will all MODIS grids classified as urban, the WRF grid will have LANDUSEF(urban) = 100, this is not true actually. LANDUSEF is always computed based on land use land cover data in WPS, and stored and passed to WRF. But it is not used when the mosaic approach is not enacted. In a somewhat similar way, FRC_URB2D can be also computed using land use land cover data (especially with high resolution data like NLCD) and it is actually used by WRF (at least before LCZ was introduced, I don't know the details after LCZ is introduced).
There was a problem hiding this comment.
@DanLi-BU Thanks for your note about NLCD. Well-noted.
| ENDIF | ||
|
|
||
|
|
||
| IF (PRESENT(ahe)) THEN |
There was a problem hiding this comment.
@epn09 This may not be the best place to add this anthropogenic heating flux. First, if putting it in this pbl driver module, should it be added to a place after land surface model and urban scheme is called? Second, it may be better to include this to the SLUCM code module instead of pbl driver to avoid messing up with other physics.
There was a problem hiding this comment.
@cenlinhe The reason we didn't add AH flux to the urban scheme is because the construction of the AH dataset did not assume that AH comes from only urban.
- Energy loss are distributed equally for all grids within a country.
- There are strong point sources of AH (power station, steel mills) that do not necessarily belong to urban grids.
What's your opinion on this?
The full paper is available here (https://www.nature.com/articles/s41597-021-00850-w).
There was a problem hiding this comment.
OK, I see. This makes sense to me, as the AH is not only for urban AH. power station may also belong to urban?
There was a problem hiding this comment.
@cenlinhe Power station may be in either rural or urban. When constructing the AH dataset we did not make that distinction.
| ! Distributed aerodynamics | ||
| lf_urb_s = lf_urb2d_s(I, J) | ||
| z0_urb = z0_urb2d(I, J) | ||
| vegfrac = vegfra(I, J) / 100 |
There was a problem hiding this comment.
double check consistency for the vegfrac used in urban fraction (=1-vegfrac) and the original vegfra used in Noah.
| IF (use_distributed_aerodynamics) THEN | ||
| IF (IVGTYP(I, J) == ISURBAN) THEN | ||
| UTYPE_URB = 2 | ||
| FRC_URB2D(I, J) = MAX(0.1, MIN(0.9, 1 - shdavg(I, J) / 100.)) |
There was a problem hiding this comment.
should this already be done above in the initialization and real part?
There was a problem hiding this comment.
@cenlinhe To be honest I also don't know why I must do this. But as you can see, the code just below this line for wudapt also do the same thing for FRC_URB2D so I just follow the way the existing code was written.
IF(UTYPE_URB==1) FRC_URB2D(I,J)=1.
IF(UTYPE_URB==2) FRC_URB2D(I,J)=0.99
IF(UTYPE_URB==3) FRC_URB2D(I,J)=1.00
IF(UTYPE_URB==4) FRC_URB2D(I,J)=0.65
IF(UTYPE_URB==5) FRC_URB2D(I,J)=0.7
IF(UTYPE_URB==6) FRC_URB2D(I,J)=0.65
IF(UTYPE_URB==7) FRC_URB2D(I,J)=0.3
IF(UTYPE_URB==8) FRC_URB2D(I,J)=0.85
IF(UTYPE_URB==9) FRC_URB2D(I,J)=0.3
IF(UTYPE_URB==10) FRC_URB2D(I,J)=0.55
IF(UTYPE_URB==11) FRC_URB2D(I,J)=1.There was a problem hiding this comment.
this part is the issue in mosaic where the 2d spatially urban fraction is not used. So after the first timestep, the urban fraction is different compared to the initial 2d data. It should already be done in the urban_init_var
There was a problem hiding this comment.
I will need to take a more detailed look at this. These FRC_URB2D assignments for each LCZ are supposed to be reading from the URBPARM_LCZ.TBL table values instead of hard-coded.
There was a problem hiding this comment.
@epn09 @tslin2 This original part of re-assigning FRC_URB2D is wrong. FRC_URB2D is initialized in module_physics_init.F and should only be read in as a intent(IN) variable without modifying. This has been done in both Noah and NoahMP driver. So this part should be removed from lsm_mosaic module.
@tslin2 you may want to test if removing this would solve your mosaic error.
There was a problem hiding this comment.
maybe @DanLi-BU can also comment on this.
Thanks
There was a problem hiding this comment.
I haven't read the WRF code this closely for such a long time but it's good to be back in the coding world. I don't think I added this line of FRC_URB2D(I, J) = MAX(0.1, MIN(0.9, 1 - shdavg(I, J) / 100.)) when I implemented the mosaic and I agree FRC_URB2D should not be changed (unless there is a strong justification).
There was a problem hiding this comment.
Khanh has to buy me a lot of coffee for me to review the entire code :) I'll try my best to comment here and there but I can't really promise.
| endif | ||
| if(alhoption==1) ALH = ALH*alhdiuprf(tloc2)*alhseason(Kalh) | ||
|
|
||
| IF (distributed_aerodynamics_option) THEN |
There was a problem hiding this comment.
also need to add a check for cases where distributed_aerodynamics_option is true but the input variables/data are not provided (i.e., MH_URB <=0 or LP_URB<=0).
There was a problem hiding this comment.
@cenlinhe Within this if statement, some default values for the parameters when they are not available are set.
ZR = MAX(MH_URB, 3.5)
Z0C = MAX(Z0_URB, 0.1)
lambda_p = MAX(0.05, MIN(1.0, LP_URB))
lambda_f = MAX(0.05, MIN(1.0, LF_URB_S))| DRGDTB=DRGDTB1+DRGDTB2 | ||
| DRGDTG=DRGDTG1+DRGDTG2 | ||
|
|
||
| IF (distributed_aerodynamics_option) THEN |
There was a problem hiding this comment.
@epn09 It seems you replaced original TCP related quantity with TA, why is this? based on assumptions for your distributed parameter generation?
There was a problem hiding this comment.
@cenlinhe According to the materials that I read, in this scheme, canopy temperature is not calculated (hence, TCP and TC are unused). Heat from all surfaces (roof, wall, roads) are released to the upper atmosphere directly. Therefore, TA is used.
References:
phys/module_sf_urban.F
Outdated
| PSIT10 = ALOG(10./Z0H) - PSIH10 | ||
|
|
||
| IF (distributed_aerodynamics_option .and. Z0C > 10.) THEN | ||
| U10 = 0. |
There was a problem hiding this comment.
@epn09 not sure if this is a good assumption. maybe still use the logscale decay? Is this assumption related to how you treat the roughness from your new input parameters?
There was a problem hiding this comment.
@cenlinhe Currently in this parameter database that we have, there is no grid with z0 higher than 10 m, so this if statement actually will never be executed. But the treatment of grid with z0 > 10 m (if exists) is something we also don't know how to properly handle because in my understanding log-law is not valid for z < z0. So if z = 10 m and z0 > 10 m, I don't really know what should be done. In the mean time, this if statement can be removed. Please let me know your opinion.
There was a problem hiding this comment.
I do not have a good solution to this either. The default treatment is using logscale decay. For Z0C > 10, the log law should give a relatively small value (close to 0) at z=10. Maybe for now, just follow the default treatment.
There was a problem hiding this comment.
@cenlinhe This is fixed. The if Z0C > 10 is removed.
|
|
||
| distributed_aerodynamics_check: IF (distributed_aerodynamics_option) THEN | ||
| IF (IVGTYP(I, J) == ISURBAN) THEN | ||
| UTYPE_URB2D(I, J) = 2 |
There was a problem hiding this comment.
@epn09 your distributed parameters are only for urban type = 2?
There was a problem hiding this comment.
@cenlinhe In my understanding, the difference between urban types (low intensity, high intensity, LCZ 1 to 10) in WRF right now are only the differences in the parameters in URBPARM.TBL. When we input a spatial map of these urban parameters from outside, the value of urban type doesn't matter any more. So, it's just set to 2 for no special reasons.
|
I have reviewed this PR and have provided a few comments and questions in some code lines. This new capability of reading in and using global spatially varying distributed urban parameters are very important. However, it seems that the current implementation in this PR has a few limitations (correct me if I am wrong): |
|
@cenlinhe Thank you very much for reviewing. Some of your comments need code modification so I'll address them separately. But below is my response for the 4 points you raised.
No, I haven't submit a PR. Please let me know the procedure and I'll do it promptly.
In my understanding, NUDAPT only change the urban parameters but do not change the physics. However, our scheme not only change the urban parameters but also represent the urban canopy as a whole and disregard the individual effects of the roof and canyon. More details can be found here (http://www.ide.titech.ac.jp/~kandalab/download/WRF_URBAN/add_improvements.html). Please ignore section II of the link because it's obsolete thanks to the implementation of WRF mosaic option. So, at the moment, I don't have an idea to synthesize the two approaches.
Yes. And I can't think of a valid use case of combining our approach with LCZ for now, even though both aims at the same goal of making more realistic urban representation in WRF.
Of course, the two approach can be compared against each other.
As mentioned in (3) and replied to your comment. Urban types play no role in this scheme. Type 2 is set in the code for no special reason. |
|
@cenlinhe I think I've addressed all of your comments. Please let me know if you have any further concern. |
|
@epn09 I am going to re-submit a PR with your modifications on urban part and refer back to this PR, because I need to update Noah-MP GitHub with your mods first and re-connect to the correct Noah-MP branch and commit. |
|
I have re-submitted this PR at: #1986, which includes the latest develop WRF branch and connect to the new Noah-MP v4.6 release branch. |
|
This has been replaced by PR-1986. |
…d urban aerodynamic parameters (#1986) TYPE: new feature KEYWORDS: SLUCM, urban parameters, anthropogenic heat SOURCE: Do Ngoc Khanh (Tokyo Institute of Technology) DESCRIPTION OF CHANGES: This PR adds a new feature to WRF SLUCM by allowing consideration of spatially varying global distributed urban parameters and spatially hourly monthly varying anthropogenic heat. LIST OF MODIFIED FILES: M Registry/Registry.EM_COMMON M Registry/registry.dimspec M dyn_em/module_first_rk_step_part1.F M dyn_em/module_initialize_real.F M phys/module_pbl_driver.F M phys/module_physics_init.F M phys/module_sf_clm.F M phys/module_sf_noahdrv.F M phys/module_sf_urban.F M phys/module_surface_driver.F M phys/noahmp M share/output_wrf.F TESTS CONDUCTED: - The modification has been tested and used in previous publications. Initial development: Varquez, A. C. G., Nakayoshi, M., & Kanda, M. (2015). The effects of highly detailed urban roughness parameters on a sea-breeze numerical simulation. Boundary-layer meteorology, 154, 449-469. https://doi.org/10.1007/s10546-014-9985-4 Global extension: Khanh, D. N., Varquez, A. C., & Kanda, M. (2023). Impact of urbanization on exposure to extreme warming in megacities. Heliyon, 9, e15511. https://doi.org/10.1016/j.heliyon.2023.e15511 - The Jenkins tests are all passing. RELEASE NOTE: This modification adds two options (use_distributed_aerodynamics and distributed_ahe_opt) to WRF SLUCM (sf_urban_physics = 1) so that spatially varying urban morphological parameters (building height, plan area index, frontal area index, roughness length for momentum, and displacement height) can be considered.
commit 0a11865f97680fdd6865b278ea29d910e5db3ed7
Merge: a8eb8468 b11c63ea
Author: Anthony Islas <aislas@ucar.edu>
Date: Wed May 8 17:33:15 2024 -0700
Merge branch 'release-v4.6.0' of github.com:wrf-model/WRF
commit b11c63ea97b8a5e565135b68ac7c1701cf4c251d
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Wed May 8 16:32:03 2024 -0700
Updating version for v4.6.0 (#2042)
TYPE: text only
KEYWORDS: v4.6.0, release, version_decl, README
SOURCE: internal
DESCRIPTION OF CHANGES:
Updated the top-level README and inc/version_decl files to reflect V4.6.0, in preparation for the v4.6.0 release
LIST OF MODIFIED FILES:
M README
M inc/version_decl
TESTS CONDUCTED:
No tests necessary - text only
commit c3a7139ae8ae088ca2c23f19856857b9e2a694f6
Author: weiwangncar <weiwang@ucar.edu>
Date: Mon May 6 17:31:54 2024 -0600
add texts to make routines exactly the same as in shared-physics (#2041)
TYPE: text only
KEYWORDS: doxygen comments, shared physics routines
SOURCE: internal
DESCRIPTION OF CHANGES:
Added some doxygen comments to make routines in physics_mmm/ the same as those in future MMM shared physics repository.
LIST OF MODIFIED FILES:
M phys/physics_mmm/cu_ntiedtke.F90
M phys/physics_mmm/mp_wsm6_effectRad.F90
TESTS CONDUCTED:
The Jenkins tests are all passing.
commit a977865db9a32a73b3bc4c50d29d4db175003f2f
Author: weiwangncar <weiwang@ucar.edu>
Date: Mon Apr 29 10:07:07 2024 -0600
Remove print max/min w in microphysics driver (#2040)
TYPE: almost text only
KEYWORDS: extra print, microphysics driver
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
PR-1876 accidentally turned on a diagnostic print for max and min vertical motions.
Solution:
The print is removed as in previous code.
LIST OF MODIFIED FILES:
M phys/module_microphysics_driver.F
TESTS CONDUCTED:
The Jenkins tests are all passing.
commit bbc791528f2ed202dc1fdfb8a8105d38bfcb5d2c
Author: dudhia <dudhia@ucar.edu>
Date: Wed Apr 17 09:53:20 2024 -0600
Correct diffusion coefficients for tke in LES (#2034)
TYPE: bug-fix
KEYWORDS: Diffusion of tke
SOURCE: internal (issue raised by Branko Kosovic)
DESCRIPTION OF CHANGES:
Problem:
Reported in #2026 For km_opt=2, tke diffusion should be twice momentum diffusion, but was twice heat diffusion (three times larger). For km_opt=5 it was 3 times momentum diffusion instead of twice.
Solution:
xkmv and xkmh passed into diffusion routines for tke calls instead of xkhv and xkhh.
ISSUE: For use when this PR closes an issue.
Fixes #2026
LIST OF MODIFIED FILES:
modified: dyn_em/module_diffusion_em.F
TESTS CONDUCTED:
1. LES case was run with shalconv sounding to verify the change.
2. The Jenkins tests are all passing.
RELEASE NOTE: km_opt=2 and km_opt=5 tke diffusion was reduced to one third its value to match theory.
commit dbbb563a144deb28fa6e0a85d5586261212cacda
Author: weiwangncar <weiwang@ucar.edu>
Date: Tue Apr 16 12:16:02 2024 -0600
Final bug fixes and tuning for MYNN PBL in v4.6 (#2037)
TYPE: bug fix + tuning
KEYWORDS: MYNN EDMF
SOURCE: Joseph Olson (NOAA-GSL)
DESCRIPTION OF CHANGES:
Problems:
1. overly diminished TKE in stable PBL - always dropping to the lower limit
2. negative mass flux area fractions found (rarely) with activation criteria change from flt to fltv.
3. edmf diagnostics erroneously included rho.
Solution:
1. retuning of mixing lengths and stability function for momentum - mostly just limit changes.
2. check for mf transfer of heat out of the lowest layer was modified
3. removed rho.
LIST OF MODIFIED FILES:
phys/module_bl_mynn.F
TESTS CONDUCTED:
1. Tested in RRFSv1.
2. The Jenkins tests are all passing.
This commit contains the final tuning of the MYNN for RRFSv1, and part of the update for 4.6 (together with PR-1938 and 1996).
commit 30e547cd447660743a9f0cfe06923b2cc92fe08f
Author: weiwangncar <weiwang@ucar.edu>
Date: Thu Apr 11 21:59:16 2024 -0600
Add PXLSM change from PR-2023 (#2035)
Pleim-Xiu LSM MODIS LCZ Compatibility & Surface Evaporation Update
TYPE: bug fix & physics refinement
KEYWORDS: MODIS, LCZ, P-X LSM, Latent Heat Flux
SOURCE: Robert Gilliam & Jon Pleim, US EPA
DESCRIPTION OF CHANGES:
Problem:
User indicated that the P-X LSM errored for MODIS LCZ 61 NUM_LAND_CAT configuration.
Currently, we account for evaporation from transpiration, soil in both vegetated and non-veg parts, and wet leaves. But we only account for the latent heat effects on Tg from transpiration and evaporation from non-veg soil.
This fix adds latent heat effects on Tg from soil in vegetated parts and from wet leaves.
Fix for rare case where GRDFLX goes NaN because of a divide by zero based on a soil parameter when a water cell turns to sea ice.
Solution:
Logic checks in module_physics_init.F and module_sf_pxlsm.F were adjusted for 61 category inputs. P-X LSM data table, module_sf_pxlsm_data.F was updated for MODIS 61 categories. Default for LCZ 51-61 was set to MODIS urban class. We also added updates for the evaporation from vegetation and wet canopy.
ISSUE:
Fixes: #1965
LIST OF MODIFIED FILES:
M phys/module_physics_init.F
M phys/module_sf_pxlsm.F
M phys/module_sf_pxlsm_data.F
TESTS CONDUCTED:
- Tested 61 class LCZ with PX LSM for a 1 day simulation with updated codes. Ran base MODIS 21 class scheme with same code before and after LCZ update. The results were identical after a 24 hour simulation. This confirms updates do not impact other MODIS settings in the P-X LSM. The MODIS 21 was by nature not identical to the MODIS 61, but similar enough and differences follow underlying differences in MODIS datasets.
- The Jenkins tests are all passing.
RELEASE NOTE:
Pleim-Xiu LSM is now compatible with 61 category MODIS LCZ landuse dataset. A mode of latent heat effects on Tg from vegetated parts and from wet leaves is added to Pleim-Xiu LSM.
commit 46dc7401bff616ae7740bd46be144abc28d57244
Author: tanyasmirnova <38667904+tanyasmirnova@users.noreply.github.com>
Date: Wed Apr 10 19:47:07 2024 -0600
Update RUC LSM to the latest version used in version 1 of RRFS. (#2028)
TYPE: bug fix, enhancement
KEYWORDS: snow model, irrigation, conductivities
SOURCE: Tanya Smirnova, NOAA/GSL
DESCRIPTION OF CHANGES:
1. Changes to the snow model. Added options to compute thermal snow conductivity and snow cover fraction:
isncond_opt = 1 or 2 (1 is default, 2 is recommended to use) isncov_opt = 1, 2 or 3 (1 is default, 2 is recommended to use for more accurate SCF)
2. Changes to irrigation scheme, use real-time vegetation fraction as an indicator of crops maturity.
3. Changes to soil diffusional and hydraulic conductivities.
LIST OF MODIFIED FILES:
M phys/module_sf_ruclsm.F
TESTS CONDUCTED:
- Tested in RRFS
- The Jenkins tests are all passing.
RELEASE NOTE: This PR modifies the RUC LSM to add options to the snow model, use real-time vegetation fraction as an indicator for irrigation scheme, and change soil diffusional and hydraulic conductivities.
commit f630b3d7d12bb703161d0605f85ae3974a03ce24
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Tue Apr 2 14:56:23 2024 -0700
Fix issue with generalized compiler version output using the wrong flags (#2030)
Fix issue with generalized compiler version output using the wrong flags
TYPE: bug fix
KEYWORDS: compile, version
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
A generalized compile version check was proposed in #1987. This logic was implemented in #1942 but the originating logic contains a bug where the `-V` and `--version` flag commands' output is flipped.
Solution:
Use `-V` in the appropriate spot when `$status` is zero for the `-V` check, and respectively for the `--version` check.
LIST OF MODIFIED FILES:
M compile
TESTS CONDUCTED:
1. With previous bad logic the compile log output shows a compiler error as the wrong flag is used to output version info. With the fix, the correct output now shows in the compile log.
commit 0b68af0d7f397ccee9a6402530a6f4927bf8a65f
Author: weiwangncar <weiwang@ucar.edu>
Date: Wed Mar 27 16:03:46 2024 -0600
correct the logic to use specific humidity or mixing ratio directly (#2031)
TYPE: bug fix
KEYWORDS: real, use_sh_qv
SOURCE: internal
DESCRIPTION OF CHANGES:
The logic to control whether specific humidity or mixing ratio is used instead of RH is wrong (PR-1959) when either SH or Qv is available. It is corrected in this PR.
LIST OF MODIFIED FILES:
M dyn_em/module_initialize_real.F
TESTS CONDUCTED:
Tested before and after this change. The data without SH is not affected, and the data with SH (EC model level data) is now used directly if use_sh_qv is set to true.
The Jenkins tests are all passing.
commit 9c09ef9ed4617a7daf0fd03d3556bca7f6b7e604
Author: weiwangncar <weiwang@ucar.edu>
Date: Tue Mar 26 16:11:54 2024 -0600
remove unneeded depends (#2029)
TYPE: bug fix, clean up
KEYWORDS: dependencies, unused
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
Some dependency is declared twice, some are no longer needed.
Solution:
Remove un-used dependencies. Complimentary to PR-1950.
LIST OF MODIFIED FILES:
M main/depend.common
TESTS CONDUCTED:
1. Tested on Derecho with 6 proc to compile
2. The Jenkins tests are all passing.
commit 9e265af51ddb41cd1993d55289e13a5bcb3ae0c4
Author: Soren Rasmussen <soren@ucar.edu>
Date: Fri Mar 15 14:10:23 2024 -0700
Hydro CMake and Updates (#2009)
TYPE: new feature, bug fixes, enhancement
KEYWORDS: CMake, Build System, Hydro
SOURCE: Soren Rasmussen and Ryan Cabell, NCAR
DESCRIPTION OF CHANGES:
- Build Systems:
- CMake build system added and renaming .F and .f90 files to .F90 so they automatically get preprocessed and the editor recognizes them as free-form
- added compiler info to all netcdf output files
- Alma support added
- Cray compiler fixes:
- Removes comma after write statement and changes A*-B*C statements to A*(-B)*C
- Use assumed shape / volatile arrays with ext libs - Replace timestep multiple check with mod operator
- Update CMake with proper MPI and PGI/NVHPC support
- General:
- whitespace cleanup
- MPI
- Optimized inefficient MPI routines. Converted MPP_LAND p2p MPI to collectives, Remove unneeded mpp_land_sync() calls
- Routing changes
- Add scrape of outer edge of domain so water doesn't pile up
- Remove 'FATAL ERROR' from SMCRT depletion message
- Add to retro IO option (NWM)
- routing bugfix: removed CHANN_K from debug print statement. The variable is unitialized and can change values every time executable is run.
- bugfix: unallocated variables
- Nudging
- Update nudging_io to NF90 API
- Since NetCDF subroutines have been converted to nf90 we can remove the 'include netcdf.inc' statements
- Config
- config debug: fixes in read_crocus_namelist subroutine
TESTS CONDUCTED:
1. Currently testing hydro's WRF testcase on new CMake and old Makefile build systems. PR will be draft until fully tested.
RELEASE NOTE: Hydro has added CMake build option. General bug fixes and code cleanup. MPI routine made more efficient. All hydro file suffixes are now `.F90`.
LIST OF MODIFIED FILES:
```
M CMakeLists.txt
A hydro/CMakeLists.txt
M hydro/CPL/WRF_cpl/Makefile
R094 hydro/CPL/WRF_cpl/module_wrf_HYDRO.F hydro/CPL/WRF_cpl/module_wrf_HYDRO.F90
R096 hydro/CPL/WRF_cpl/module_wrf_HYDRO_downscale.F hydro/CPL/WRF_cpl/module_wrf_HYDRO_downscale.F90
R093 hydro/CPL/WRF_cpl/wrf_drv_HYDRO.F hydro/CPL/WRF_cpl/wrf_drv_HYDRO.F90
A hydro/Data_Rec/CMakeLists.txt
M hydro/Data_Rec/Makefile
D hydro/Data_Rec/module_RT_data.F
R069 hydro/Data_Rec/module_gw_gw2d_data.F hydro/Data_Rec/module_RT_data.F90
A hydro/Data_Rec/module_gw_gw2d_data.F90
R099 hydro/Data_Rec/module_namelist.F hydro/Data_Rec/module_namelist.F90
A hydro/Data_Rec/module_namelist_inc.F90
A hydro/Data_Rec/module_rt_inc.F90
A hydro/Debug_Utilities/CMakeLists.txt
M hydro/Debug_Utilities/Makefile
R100 hydro/Debug_Utilities/debug_dump_variable.F hydro/Debug_Utilities/debug_dump_variable.F90
A hydro/HYDRO_drv/CMakeLists.txt
M hydro/HYDRO_drv/Makefile
R099 hydro/HYDRO_drv/module_HYDRO_drv.F hydro/HYDRO_drv/module_HYDRO_drv.F90
A hydro/IO/CMakeLists.txt
M hydro/IO/Makefile
R100 hydro/IO/netcdf_layer.f90 hydro/IO/netcdf_layer.F90
A hydro/MPP/CMakeLists.txt
R094 hydro/MPP/CPL_WRF.F hydro/MPP/CPL_WRF.F90
M hydro/MPP/Makefile
R099 hydro/MPP/hashtable.F hydro/MPP/hashtable.F90
R100 hydro/MPP/module_mpp_GWBUCKET.F hydro/MPP/module_mpp_GWBUCKET.F90
R100 hydro/MPP/module_mpp_ReachLS.F hydro/MPP/module_mpp_ReachLS.F90
D hydro/MPP/mpp_land.F
A hydro/MPP/mpp_land.F90
A hydro/OrchestratorLayer/CMakeLists.txt
M hydro/OrchestratorLayer/Makefile
R099 hydro/OrchestratorLayer/config.f90 hydro/OrchestratorLayer/config.F90
R098 hydro/OrchestratorLayer/io_manager.f90 hydro/OrchestratorLayer/io_manager.F90
R094 hydro/OrchestratorLayer/orchestrator.f90 hydro/OrchestratorLayer/orchestrator.F90
A hydro/Routing/CMakeLists.txt
M hydro/Routing/Makefile
R099 hydro/Routing/Noah_distr_routing.F hydro/Routing/Noah_distr_routing.F90
R100 hydro/Routing/Noah_distr_routing_overland.F hydro/Routing/Noah_distr_routing_overland.F90
R100 hydro/Routing/Noah_distr_routing_subsurface.F hydro/Routing/Noah_distr_routing_subsurface.F90
A hydro/Routing/Overland/CMakeLists.txt
M hydro/Routing/Overland/Makefile
R099 hydro/Routing/Noah_distr_routing.F hydro/Routing/Noah_distr_routing.F90
R100 hydro/Routing/Noah_distr_routing_overland.F hydro/Routing/Noah_distr_routing_overland.F90
R100 hydro/Routing/Noah_distr_routing_subsurface.F hydro/Routing/Noah_distr_routing_subsurface.F90
A hydro/Routing/Overland/CMakeLists.txt
M hydro/Routing/Overland/Makefile
R100 hydro/Routing/Overland/module_overland.F hydro/Routing/Overland/module_overland.F90
R100 hydro/Routing/Overland/module_overland_control.F hydro/Routing/Overland/module_overland_control.F90
R098 hydro/Routing/Overland/module_overland_mass_balance.F hydro/Routing/Overland/module_overland_mass_balance.F90
R100 hydro/Routing/Overland/module_overland_routing_properties.F hydro/Routing/Overland/module_overland_routing_properties.F90
R100 hydro/Routing/Overland/module_overland_streams_and_lakes.F hydro/Routing/Overland/module_overland_streams_and_lakes.F90
R100 hydro/Routing/Overland/overland_tests.F hydro/Routing/Overland/overland_tests.F90
A hydro/Routing/Reservoirs/CMakeLists.txt
A hydro/Routing/Reservoirs/Level_Pool/CMakeLists.txt
M hydro/Routing/Reservoirs/Level_Pool/Makefile
R100 hydro/Routing/Reservoirs/Level_Pool/module_levelpool.F hydro/Routing/Reservoirs/Level_Pool/module_levelpool.F90
R100 hydro/Routing/Reservoirs/Level_Pool/module_levelpool_properties.F hydro/Routing/Reservoirs/Level_Pool/module_levelpool_properties.F90
R100 hydro/Routing/Reservoirs/Level_Pool/module_levelpool_state.F hydro/Routing/Reservoirs/Level_Pool/module_levelpool_state.F90
R100 hydro/Routing/Reservoirs/Level_Pool/module_levelpool_tests.F hydro/Routing/Reservoirs/Level_Pool/module_levelpool_tests.F90
M hydro/Routing/Reservoirs/Makefile
A hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/CMakeLists.txt
M hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/Makefile
R100 hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_persistence_levelpool_hybrid.F hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_persisten\
ce_levelpool_hybrid.F90
R100 hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_persistence_levelpool_hybrid_properties.F hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_p\
ersistence_levelpool_hybrid_properties.F90
R100 hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_persistence_levelpool_hybrid_state.F hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_p\
ersistence_levelpool_hybrid_state.F90
R100 hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_persistence_levelpool_hybrid_tests.F hydro/Routing/Reservoirs/Persistence_Level_Pool_Hybrid/module_p\
ersistence_levelpool_hybrid_tests.F90
A hydro/Routing/Reservoirs/RFC_Forecasts/CMakeLists.txt
M hydro/Routing/Reservoirs/RFC_Forecasts/Makefile
R100 hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts.F hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts.F90
R100 hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_properties.F hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_properties.F90
R100 hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_state.F hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_state.F90
R100 hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_tests.F hydro/Routing/Reservoirs/RFC_Forecasts/module_rfc_forecasts_tests.F90
R100 hydro/Routing/Reservoirs/module_reservoir.F hydro/Routing/Reservoirs/module_reservoir.F90
R100 hydro/Routing/Reservoirs/module_reservoir_read_rfc_time_series_data.F hydro/Routing/Reservoirs/module_reservoir_read_rfc_time_series_data.F90
R100 hydro/Routing/Reservoirs/module_reservoir_read_timeslice_data.F hydro/Routing/Reservoirs/module_reservoir_read_timeslice_data.F90
R100 hydro/Routing/Reservoirs/module_reservoir_utilities.F hydro/Routing/Reservoirs/module_reservoir_utilities.F90
R100 hydro/Routing/Reservoirs/reservoir_tests.F hydro/Routing/Reservoirs/reservoir_tests.F90
A hydro/Routing/Subsurface/CMakeLists.txt
M hydro/Routing/Subsurface/Makefile
R100 hydro/Routing/Subsurface/module_subsurface.F hydro/Routing/Subsurface/module_subsurface.F90
R100 hydro/Routing/Subsurface/module_subsurface_grid_transform.F hydro/Routing/Subsurface/module_subsurface_grid_transform.F90
R100 hydro/Routing/Subsurface/module_subsurface_input.F hydro/Routing/Subsurface/module_subsurface_input.F90
R100 hydro/Routing/Subsurface/module_subsurface_output.F hydro/Routing/Subsurface/module_subsurface_output.F90
R100 hydro/Routing/Subsurface/module_subsurface_properties.F hydro/Routing/Subsurface/module_subsurface_properties.F90
R100 hydro/Routing/Subsurface/module_subsurface_state.F hydro/Routing/Subsurface/module_subsurface_state.F90
R098 hydro/Routing/Subsurface/module_subsurface_static_data.F hydro/Routing/Subsurface/module_subsurface_static_data.F90
R100 hydro/Routing/Subsurface/subsurface_tests.F hydro/Routing/Subsurface/subsurface_tests.F90
R097 hydro/Routing/module_GW_baseflow.F hydro/Routing/module_GW_baseflow.F90
R099 hydro/Routing/module_HYDRO_io.F hydro/Routing/module_HYDRO_io.F90
R088 hydro/Routing/module_HYDRO_utils.F hydro/Routing/module_HYDRO_utils.F90
R098 hydro/Routing/module_NWM_io.F hydro/Routing/module_NWM_io.F90
R099 hydro/Routing/module_NWM_io_dict.F hydro/Routing/module_NWM_io_dict.F90
R100 hydro/Routing/module_RT.F hydro/Routing/module_RT.F90
R094 hydro/Routing/module_UDMAP.F hydro/Routing/module_UDMAP.F90
R099 hydro/Routing/module_channel_routing.F hydro/Routing/module_channel_routing.F90
R100 hydro/Routing/module_date_utilities_rt.F hydro/Routing/module_date_utilities_rt.F90
R097 hydro/Routing/module_gw_gw2d.F hydro/Routing/module_gw_gw2d.F90
R099 hydro/Routing/module_lsm_forcing.F hydro/Routing/module_lsm_forcing.F90
R093 hydro/Routing/module_noah_chan_param_init_rt.F hydro/Routing/module_noah_chan_param_init_rt.F90
R099 hydro/Routing/module_reservoir_routing.F hydro/Routing/module_reservoir_routing.F90
M hydro/arc/Makefile.NoahMP
A hydro/nudging/CMakeLists.txt
M hydro/nudging/Makefile
R100 hydro/nudging/module_date_utils_nudging.F hydro/nudging/module_date_utils_nudging.F90
R090 hydro/nudging/module_nudging_io.F hydro/nudging/module_nudging_io.F90
R085 hydro/nudging/module_nudging_utils.F hydro/nudging/module_nudging_utils.F90
R100 hydro/nudging/module_stream_nudging.F hydro/nudging/module_stream_nudging.F90
A hydro/utils/CMakeLists.txt
M hydro/utils/Makefile
R100 hydro/utils/module_hydro_stop.F hydro/utils/module_hydro_stop.F90
R100 hydro/utils/module_version.F hydro/utils/module_version.F90
```
commit 01228e7dfc0c4c257a7511e028088eddf3dfb388
Author: joshi994 <160153650+joshi994@users.noreply.github.com>
Date: Fri Mar 15 13:54:11 2024 -0400
The net longwave flux absorbed by the building wall, RB2, in module_sf_urban.F is underestimating the value by a factor of emissivty of the wall, EPSG, as it is multiplied twice. I corrected the equation in the aforementioned module. (#2016)
TYPE: Bug fix
KEYWORDS: Longwave flux, radiation/energy balance, Surface temperature, Urban climate, SLUCM
SOURCE: Parag Joshi (Brookhaven National Lab), Katia Lamer (Brookhaven National Lab)
DESCRIPTION OF CHANGES:
Problem:
The net long wave fluxes absorbed by the building walls is being underestimated due to multiplication of the emissivity twice in the equation. The command/lines that evaluate RB2 in the module_sf_urban.F (Lines 1300 and 1419 of WRF version-4.5.2) reflect the net long wave fluxes absorbed by building walls.
Solution:
The code has been corrected by referring to the equation A9 of in the article, Kusaka & Kimora 2004, Journal of Applied Meteorology.
ISSUE: For use when this PR closes an issue.
Fixes #2011
LIST OF MODIFIED FILES:
M module_sf_urban.F
TESTS CONDUCTED:
1. Tests were conducted by the LSM group at NCAR/RAL.
2. It passed Jenkins tests.
RELEASE NOTE: Correcting the net long wave fluxes for application in modeling urban climate using Single Layer Urban Canopy Model (SLUCM). It slightly improved 2-m temperature in urban area.
commit 95eb02c21e0493e1311208a7fe5f1db8b78e9244
Author: weiwangncar <weiwang@ucar.edu>
Date: Wed Feb 28 14:43:02 2024 -0700
Add prints for parameters used in auto_levels_opt = 2 in real.exe (#2015)
TYPE: enhancement
KEYWORDS: auto_levels_opt, dzbot, dzstretch
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
Lack of information in the standard output when running real.exe using auto_levels_opt = 2.
Solution:
Adds print for parameters used to define vertical levels.
LIST OF MODIFIED FILES:
M dyn_em/module_initialize_real.F
TESTS CONDUCTED:
1. Now print like the following is added to output from running real.exe:
p_top = 1000. Pa, dzbot = 30.0 m, dzstretch_s/u = 1.20 1.02
2. The Jenkins tests are all passing.
RELEASE NOTE: This PR adds a print for parameters used when running real.exe using auto_levels_opt = 2 option, which is the default.
commit e1ebb1052d433093a0395337ef1465d336545c25
Author: Ted Mansell <37668594+MicroTed@users.noreply.github.com>
Date: Wed Feb 28 15:40:57 2024 -0600
Makes mp_zero_out affect only the 'moist' array. New separate flags for scalar/chem/tracer (#2010)
TYPE: bug fix
KEYWORDS: mp_zero_out
SOURCE: Ted Mansell (NOAA)
DESCRIPTION OF CHANGES:
This fixes the side-effect of mp_zero_out being applied not only to the moist array, but also to the scalar/chem/tracer arrays using the same threshold. This behavior would be unexpected from the documentation (readme) which indicated that only mixing ratios were affected. This PR restricts mp_zero_out to the moist array and adds a separate mp_zero_out_all flag to apply it to all the arrays in the off chance that somebody needs to replicate the previous behavior.
ISSUE: Addresses https://github.com/wrf-model/WRF/issues/2007
LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M dyn_em/solve_em.F
M run/README.namelist
M wrftladj/solve_em_ad.F
M wrftladj/solve_em_tl.F
TESTS CONDUCTED:
The Jenkins tests have passed.
RELEASE NOTE: The behavior of the mp_zero_out flag was changed affect only the 'moist' array, whereas previously it also caused the scalar/chem/tracer arrays to also be set to zero for values below threshold. Now there is a separate flag (mp_zero_out_all) if one wishes to reproduce the old behavior.
commit e2da0f64d8149588d058e97524f905d455389036
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Wed Feb 28 13:51:21 2024 -0700
CMake build of diffwrf binaries (#2013)
TYPE: enhancement
KEYWORDS: cmake, diffwrf
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
New CMake build did not create binaries for io_* `diffwrf`
Solution:
Slight restructure of certain targets to allow for easy creation of the diffwrf executables. Since previously all `diffwrf` binaries were named the same, to house them int the same `install/bin/` location they have been prefix with the type of io or shorthand of that option ( io_int -> `diffwrf_int`, io_netcdf -> `diffwrf_nc`, io_netcdfpar -> `diffwrf_ncpar` ).
LIST OF MODIFIED FILES:
M CMakeLists.txt
M external/io_int/CMakeLists.txt
M external/io_netcdf/CMakeLists.txt
M external/io_netcdfpar/CMakeLists.txt
TESTS CONDUCTED:
1. Diffwrf execs should now be located in cmake install location
RELEASE NOTE:
CMake build of diffwrf binaries
commit 794843fe72a92b373401660625bdcc08e1fd8409
Author: epn09 <14163153+epn09@users.noreply.github.com>
Date: Fri Feb 23 02:05:20 2024 +0900
Fix AHE option 2 and a problem with mosaic (#2005)
This PR fixes 2 issues from the original PR#1986: 1. FRC_URB2D declaration for mosaic option; and 2. AHE option 2 should be added before PBL physics is called. This PR also removes a few un-used variables in surface_driver.
LIST OF MODIFIED FILES:
M dyn_em/module_first_rk_step_part1.F
M phys/module_pbl_driver.F
M phys/module_sf_noahdrv.F
M phys/module_surface_driver.F
TESTS CONDUCTED:
The Jenkins tests are all passing.
commit 2e15abb75d1fa04e3a99e7dc2e775a2c2de7927d
Author: Changgui Lin <72630106+ahheo@users.noreply.github.com>
Date: Wed Feb 21 04:45:58 2024 +0800
Resolves building issues (WRF/WRF-chem) with Intel compilers (ifx/icx) (#1942)
TYPE: bug fix
KEYWORDS: Missing/Wrong Prototypes in C code, WRF-Chem
SOURCE: Changgui Lin
DESCRIPTION OF CHANGES:
Problem:
Problem: Most C code written long ago. No prototypes were used. See PR#1823. And, this pr is kind of an extension to PR#1823 addressing the same issue for building WRF-chem.
Solution:
Add missing prototypes; rearrange function order to support new Intel oneAPI compiler
RELEASE NOTE: This PR fixed missing and/or wrong prototypes in C code to support successful compilation of WRF-Chem when using the Intel oneAPI compiler ifx/icx.
commit d66b39985c5cfaa9e550ae4de48b849b66e031e7
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Fri Feb 16 09:51:54 2024 -0700
CMake Build (#1896)
TYPE: new feature
KEYWORDS: CMake, build, make
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
The current WRF build system is fragile with many pitfalls making it difficult for users to build & add to it without perpetuating existing problems. Many options exist across various layers of files, languages, and option control-flow.
Solution:
*This requires CMake version 3.20 or newer*
A redesign of the build system from the ground up, maintaining the interfacing feel and knowledge accumulated in `arch/configure.defaults`. Condense option selection and control to single locations and as best as possible reduce the complexity of this control.
This will be a work in progress as gaps are identified in reproducing the full functionality of the makefile build system. Currently only `em_real` and `em_ideal` have limited supported
Brief how to use:
As this is a work in progress, the original `configure` and `compile` scripts have been left as-is. Alongside them are now `configure_new` and `compile_new` which walk a user through a slightly similar experience of configuring & compiling WRF.
A simple usage example would be:
```bash
# Ensure you have cmake 3.20+ and configuration environment set up
./configure_new
# Follow prompts to select configuration
./compile_new [-j N]
```
Notable differences are :
* Submodule code must be checked out beforehand and is not checked out during the compile process
* Stanzas presented to a user are only those for which the compiler exists in the current environment
* `!!` warnings appear for subconfigurations (MPI) that would not be supported in the current environment
* DM/SM selection is now done after selecting a base configuration rather than an individual configuration # within a family of compilers
* Compilation via `compile_new` does not take target to build as an argument - parallel `-j N` jobs still supported
* Users do not need to set `NETCDF` or `LD_LIBRARY_PATH` variables
* Base binaries do not have `.exe` extension, but symlinks are provided
* Binaries, test setups, and everything else generated from compilation is copy-placed (not softlinked) to a separate location - default is `./install`. This means the equivalent `test/em_real/wrf.exe` is now at `install/test/em_real/wrf.exe`
LIST OF MODIFIED FILES:
A CMakeLists.txt
A arch/configure_reader.py
A chem/CMakeLists.txt
A cleanCMake.sh
A cmake/c_preproc.cmake
A cmake/confcheck.cmake
A cmake/gitinfo.cmake
A cmake/m4_preproc.cmake
A cmake/modules/FindJasper.cmake
A cmake/modules/FindRPC.cmake
A cmake/modules/FindnetCDF-Fortran.cmake
A cmake/modules/FindnetCDF.cmake
A cmake/modules/FindpnetCDF.cmake
A cmake/printOption.cmake
A cmake/target_copy.cmake
A cmake/template/WRFConfig.cmake.in
A cmake/template/arch_config.cmake
A cmake/template/commit_decl.cmake
A cmake/wrf_case_setup.cmake
A cmake/wrf_get_version.cmake
A compile_new
A confcheck/CMakeLists.txt
A configure_new
A dyn_em/CMakeLists.txt
A external/CMakeLists.txt
A external/RSL_LITE/CMakeLists.txt
A external/atm_ocn/CMakeLists.txt
A external/esmf_time_f90/CMakeLists.txt
A external/fftpack/fftpack5/CMakeLists.txt
A external/io_adios2/CMakeLists.txt
A external/io_esmf/CMakeLists.txt
A external/io_grib1/CMakeLists.txt
A external/io_grib1/MEL_grib1/CMakeLists.txt
A external/io_grib1/WGRIB/CMakeLists.txt
A external/io_grib1/grib1_util/CMakeLists.txt
A external/io_grib2/CMakeLists.txt
A external/io_grib2/bacio-1.3/CMakeLists.txt
A external/io_grib2/g2lib/CMakeLists.txt
A external/io_grib2/g2lib/utest/CMakeLists.txt
A external/io_grib_share/CMakeLists.txt
A external/io_int/CMakeLists.txt
A external/io_netcdf/CMakeLists.txt
A external/io_netcdfpar/CMakeLists.txt
A external/io_phdf5/CMakeLists.txt
A external/io_pio/CMakeLists.txt
A external/io_pnetcdf/CMakeLists.txt
A external/ioapi_share/CMakeLists.txt
A frame/CMakeLists.txt
A inc/CMakeLists.txt
A main/CMakeLists.txt
A phys/CMakeLists.txt
A share/CMakeLists.txt
A test/em_b_wave/CMakeLists.txt
A test/em_convrad/CMakeLists.txt
A test/em_fire/CMakeLists.txt
A test/em_grav2d_x/CMakeLists.txt
A test/em_heldsuarez/CMakeLists.txt
A test/em_hill2d_x/CMakeLists.txt
A test/em_les/CMakeLists.txt
A test/em_quarter_ss/CMakeLists.txt
A test/em_real/CMakeLists.txt
A test/em_scm_xy/CMakeLists.txt
A test/em_seabreeze2d_x/CMakeLists.txt
A test/em_squall2d_x/CMakeLists.txt
A test/em_squall2d_y/CMakeLists.txt
A test/em_tropical_cyclone/CMakeLists.txt
A tools/CMakeLists.txt
A tools/CodeBase/CMakeLists.txt
A doc/README.cmake_build
M tools/fseek_test.c
M README
M arch/configure.defaults
- Modified file include an adjustment to a compile test to allow the test to be conducted in an out-of-source build manner as prescribed by CMake. Default logic of this test to still test on the existence of `Makefile`
TESTS CONDUCTED:
1. In various instances this build is faster and more reliable with meaningful diagnostics when errors occur
RELEASE NOTE:
Introduction of a CMake build system for em_real and em_ideal
commit 5db9f7fcef70c118de7ce624eebfcd12d9e4c711
Author: jordanschnell <jordan.schnell@noaa.gov>
Date: Wed Feb 14 11:19:14 2024 -0500
Add KPP configure option to search for alternative version of libfl (#2008)
TYPE: enhancement
KEYWORDS: chem, KPP, configure_kpp, Derecho
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem: KPP would not compile on Derecho due to name differences in libfl: only libfl.so exists, not libfl.a.
Solution:
Add flag to search for alternative name, libfl.so.
LIST OF MODIFIED FILES:
M chem/KPP/configure_kpp
TESTS CONDUCTED:
- Compiles with old intel compilers with libfl.a and compiles on Derecho with libfl.so
- It passes regression tests.
RELEASE NOTE: KPP configure option for alternative libfl name, libfl.so, in addition to libfl.a.
commit 3cadf04277ac3a050e65461efb6aa939349c60a8
Author: Cenlin_He <cenlinhe@ucar.edu>
Date: Tue Feb 6 17:26:10 2024 -0700
[Resubmit for PR #1881] New option for SLUCM to use global distributed urban aerodynamic parameters (#1986)
TYPE: new feature
KEYWORDS: SLUCM, urban parameters, anthropogenic heat
SOURCE: Do Ngoc Khanh (Tokyo Institute of Technology)
DESCRIPTION OF CHANGES:
This PR adds a new feature to WRF SLUCM by allowing consideration of spatially varying global distributed urban parameters and spatially hourly monthly varying anthropogenic heat.
LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M Registry/registry.dimspec
M dyn_em/module_first_rk_step_part1.F
M dyn_em/module_initialize_real.F
M phys/module_pbl_driver.F
M phys/module_physics_init.F
M phys/module_sf_clm.F
M phys/module_sf_noahdrv.F
M phys/module_sf_urban.F
M phys/module_surface_driver.F
M phys/noahmp
M share/output_wrf.F
TESTS CONDUCTED:
- The modification has been tested and used in previous publications.
Initial development: Varquez, A. C. G., Nakayoshi, M., & Kanda, M. (2015). The effects of highly detailed urban roughness parameters on a sea-breeze numerical simulation. Boundary-layer meteorology, 154, 449-469. https://doi.org/10.1007/s10546-014-9985-4
Global extension: Khanh, D. N., Varquez, A. C., & Kanda, M. (2023). Impact of urbanization on exposure to extreme warming in megacities. Heliyon, 9, e15511. https://doi.org/10.1016/j.heliyon.2023.e15511
- The Jenkins tests are all passing.
RELEASE NOTE: This modification adds two options (use_distributed_aerodynamics and distributed_ahe_opt) to WRF SLUCM (sf_urban_physics = 1) so that spatially varying urban morphological parameters (building height, plan area index, frontal area index, roughness length for momentum, and displacement height) can be considered.
commit 53f346023824ecad3d11252c1ca82912099a35ac
Author: weiwangncar <weiwang@ucar.edu>
Date: Mon Feb 5 10:19:33 2024 -0700
Fix compile on Cygwin (#2003)
TYPE: bug fix
KEYWORDS: compilation, Cygwin, doc files
SOURCE: Daniel Wesloh (Penn State)
DESCRIPTION OF CHANGES:
Problem:
Compiling WRF failed on Cygwin due to lack of netCDF4
Solution:
Match assumptions about `USENETCDFPAR` (#1743 would also fix this) and pass flags to allow legacy Fortran constructs (disallowed by default with GCC 10)
ISSUE: For use when this PR closes an issue.
Fixes #1271
LIST OF MODIFIED FILES:
M configure
M doc/README.cygwin.md
M doc/README.netcdf4par
TESTS CONDUCTED:
1. Checked whether model compiles on Cygwin in DWesl/wrf#1
2. The Jenkins tests have passed.
RELEASE NOTE: Fix compilation on Cygwin.
commit bcd3e504c818cc766e4eb40b26e2226ea626a057
Author: Sergey Osipov <Serega.Osipov@gmail.com>
Date: Fri Feb 2 19:30:23 2024 +0100
Bug fix for chem_opt=100 (vbs_het), racm_soa_vbs_het_kpp initialization (#2000)
TYPE:bug fix
KEYWORDS: racm_soa_vbs_het_kpp, aerosols
SOURCE: Sergey Osipov (KAUST)
DESCRIPTION OF CHANGES:
Problem:
The bug was introduced after splitting chem_opt 100 and 106. Currently, the chemistry initialization always calls for module_aerosol_soa_vbs routine, leaving the module_aerosol_soa_vbs_HET and corresponding data constants unitialized. As a result, aerosol concentrations are set to 0 after the first time integration (10**-16).
To verify the bug fix, initialize WRF-Chem with non-trivial IC and save the next time step into nc. Check that values are non-trivial (e.g., so4aj, soila).
Solution:
Differentiate between module_aerosol_soa_vbs and module_aerosol_soa_vbs_het initialization routines
LIST OF MODIFIED FILES:
M Registry/registry.chem
M chem/chemics_init.F
M chem/module_aerosols_soa_vbs_het.F
TESTS CONDUCTED:
- The Jenkins tests are all passing.
RELEASE NOTE: This PR fixes a bug introduced after splitting chem_opt 100 and 106, which left the module_aerosol_soa_vbs_HET and corresponding data uninitialized.
commit 3491d8e297c32340ea97c41c312e82fcd67f232b
Author: RenChuanhua <51021628+RenChuanhua@users.noreply.github.com>
Date: Sat Feb 3 02:20:55 2024 +0800
The WRF-SoilN-chem: a dynamic ammonia emission model (#1826)
TYPE: enhancement
KEYWORDS: ammonia emission, soil, dynamic, chem, gas phase.
SOURCE: RenChuanhua and Huangxin, Nanjing University.
DESCRIPTION OF CHANGES:
Problem:
The traditional monthly emission inventory cannot characterize the variation of ammonia emission intensity under different meteorological conditions, which leads to the simulation bias of secondary inorganic aerosol (such as nitrate and sulfate).
Solution:
The meteorological dependent dynamic emission factor (empirical function) is added to the emission file, which can calculate the ammonia emission rate according to hourly meteorological conditions and soil conditions.
LIST OF MODIFIED FILES: list of changed files:
Registry/Registry.EM_COMMON
Registry/registry.chem
chem/chem_driver.F
chem/emissions_driver.F
TESTS CONDUCTED:
We compiled and ran the revised model to simulate 2019 East China region, and it can run smoothly, and the running speed has not decreased significantly. Compared with the traditional static emission inventory, the NH3 and nitrate concentrations obtained by dynamic model are obviously optimized.
The code has passed the regression tests.
RELEASE NOTE: This PR adds the meteorological dependent dynamic emission factor (empirical function) to the emission file, which may help correct simulation bias of secondary inorganic aerosol (such as nitrate and sulfate).
The whole source code and input dataset (binary data needed to be embedded into WPS geog_data_path) and model userguide can be found in:
https://github.com/RenChuanhua/wrf-nh3-chem_v1.0
Ren, C., Huang, X., Liu, T., Song, Y., Wen, Z., Liu, X., Ding, A., and Zhu, T.: A dynamic ammonia emission model and the online coupling with WRF-Chem (WRF-SoilN-Chem v1.0): development and evaluation, Geosci. Model Dev. Discuss. [preprint], https://doi.org/10.5194/gmd-2022-231, 2022.
commit cb5fb2f48859e6dd772e4db4efdde9f32fd6fc38
Author: weiwangncar <weiwang@ucar.edu>
Date: Fri Feb 2 11:13:19 2024 -0700
Shared physics sfclayrev (#1997)
TYPE: enhancement, new feature
KEYWORDS: shared physics, revised MM5 sfclay scheme
SOURCE: internal
DESCRIPTION OF CHANGES:
Add revised MM5 surface layer scheme from the shared physics directory, which is ccpp-compliant. Also added salinity effect in the shared physics subroutine. It also includes change made in [PR-1924.](https://github.com/wrf-model/WRF/pull/1924)
The CCPP-compliant revised MM5 surface layer code will be residing in phys/physics_mmm/ directory. Currently it is a copy of the code from the future MMM-physics repo, plus the salinity change made recently in WRF.
LIST OF MODIFIED FILES:
M arch/postamble
M arch/preamble
M clean
M main/depend.common
M phys/Makefile
M phys/module_physics_init.F
M phys/module_sf_sfclayrev.F
M phys/module_surface_driver.F
A phys/physics_mmm/sf_sfclayrev.F90
TESTS CONDUCTED:
1. The runs before and after this change produce bit-for-bit results when compiled with -d option.
2. The Jenkins tests are all passing.
RELEASE NOTE: Add revised MM5 surface layer scheme from the future shared MMM-physics repository.
commit c6cc0c537725a1d38352fec46c3a184eb70fb227
Author: weiwangncar <weiwang@ucar.edu>
Date: Fri Feb 2 09:01:46 2024 -0700
Shared physics nTiedtke (#1994)
TYPE: enhancement, new feature
KEYWORDS: shared physics, new Tiedtke
SOURCE: internal
DESCRIPTION OF CHANGES:
This PR adds new Tiedtke scheme from the shared physics directory, which is ccpp-compliant.
The CCPP-compliant new Tiedtke code will be residing in phys/physics_mmm/ directory. Currently it is a copy of the code from the future MMM-physics repo.
LIST OF MODIFIED FILES:
M arch/postamble
M arch/preamble
M clean
M main/depend.common
M phys/Makefile
M phys/module_cu_ntiedtke.F
M phys/module_cumulus_driver.F
A phys/physics_mmm/cu_ntiedtke.F90
TESTS CONDUCTED:
1. The runs before and after this change produce bit-for-bit results when compiled with -d option.
2. The Jenkins tests are all passing.
RELEASE NOTE: Add new Tiedtke cumulus scheme from the future shared MMM-physics repository.
commit 81410a36a3f784c8d90e871698e998cae6a0c9fe
Author: weiwangncar <weiwang@ucar.edu>
Date: Thu Feb 1 17:57:18 2024 -0700
Shared physics wsm6 (#1993)
TYPE: enhancement, new feature
KEYWORDS: shared physics, WSM6
SOURCE: internal
DESCRIPTION OF CHANGES:
Add WSM6 microphysics scheme from the shared physics directory, which is ccpp-compliant.
Solution:
The CCPP-compliant WSM6 MP code will be residing in phys/physics_mmm/ directory. Currently it is a copy of the code from the future MMM-physics repo.
LIST OF MODIFIED FILES:
M main/depend.common
M phys/Makefile
M phys/module_microphysics_driver.F
M phys/module_mp_wsm6.F
M phys/module_physics_init.F
A phys/physics_mmm/module_libmassv.F90
A phys/physics_mmm/mp_radar.F90
A phys/physics_mmm/mp_wsm6.F90
A phys/physics_mmm/mp_wsm6_effectRad.F90
M share/module_model_constants.F
TESTS CONDUCTED:
- The runs before and after this change produce bit-for-bit results when compiled with -d option.
- The regression tests have passed.
RELEASE NOTE: Add WSM6 microphysics scheme from the future shared MMM-physics repository.
commit e86f1a361e37fa080a09f23592863e9c671c2beb
Author: weiwangncar <weiwang@ucar.edu>
Date: Thu Feb 1 15:24:13 2024 -0700
Shared physics YSU PBL (#1991)
TYPE: enhancement, new feature
KEYWORDS: shared physics, ysu pbl
SOURCE: internal
DESCRIPTION OF CHANGES:
Add YSU PBL scheme from the shared physics directory, which is ccpp-compliant.
Solution:
The CCPP-compliant YSU PBL code will be residing in phys/physics_mmm/ directory. Currently it is a copy of the code from the future MMM-physics repo.
LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M arch/postamble
M arch/preamble
M clean
M main/depend.common
M phys/Makefile
M phys/module_bl_ysu.F
M phys/module_pbl_driver.F
M phys/module_physics_init.F
A phys/physics_mmm/bl_ysu.F90
TESTS CONDUCTED:
1. Option runs before and after the change do not produce identical results with 'configure -d'. But we do not think the results are wrong.
2. The Jenkins tests have passed.
RELEASE NOTE: Add YSU PBL scheme from the future shared MMM-physics repository.
commit f8530bba0b43a9ce49e415a95966bedbb2dac7c1
Author: weiwangncar <weiwang@ucar.edu>
Date: Thu Feb 1 14:19:02 2024 -0700
Add shared physics gwdo (#1989)
TYPE: enhancement, new feature
KEYWORDS: shared physics, gwdo scheme
SOURCE: internal
DESCRIPTION OF CHANGES:
This PR makes use of the GWDO code (gwd_opt=1) from the future MMM-physics repository, which are CCPP-compliant.
The CCPP-compliant GWDO code will be residing in phys/physics_mmm/ directory. Currently it is a copy of the code from the future MMM-physics repo. The file, module_bl_gwdo.F, has been changed to be a driver to call the actual physics routine in physics_mmm/.
LIST OF MODIFIED FILES:
M arch/postamble
M arch/preamble
M clean
M main/depend.common
M phys/Makefile
M phys/module_bl_gwdo.F
M phys/module_pbl_driver.F
A phys/physics_mmm/bl_gwdo.F90
M wrftladj/module_pbl_driver_ad.F
TESTS CONDUCTED:
- Option run before and after the change produced bit-for-bit results when compiled with -d option.
- The Jenkins tests are all passing.
RELEASE NOTE: Add gwdo (gwd_opt=1) code from the future shared MMM-physics repository.
commit b0062882574e290e8f6a23b0500390bc8c6b936b
Author: jordanschnell <jordan.schnell@noaa.gov>
Date: Thu Feb 1 16:09:12 2024 -0500
Fix Typo in WRF-Chem Registry (#2001)
TYPE: Bug Fix
KEYWORDS: N2O5 het, MADE
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem: Error when trying to use namelist option
Solution:
Fix Typo
LIST OF MODIFIED FILES:
M Registry/registry.chem
TESTS CONDUCTED:
It has passed the regression tests.
RELEASE NOTE: Fixes n2o5 heterogenous namelist option for MADE schemes.
commit 379b4df8a61a44481878a49af8c638986525eaed
Author: Kasra Shamsaei <75144521+kasrash@users.noreply.github.com>
Date: Thu Feb 1 09:04:03 2024 -0800
Truncated Gaussian Heat and Smoke Release Formulation for WRF-Fire (#1926)
TYPE: new feature
KEYWORDS: WRF-Fire, Heat Release, Smoke, Plume, Gaussian
SOURCE: Kasra Shamsaei (University of Nevada, Reno), Tim Juliano, Branko Kosovic (NCAR/RAL)
DESCRIPTION OF CHANGES:
Problem:
The current fire heat distribution in the WRF-Fire does not conserve the heat fluxes from the fire. In this new scheme, the fire heat is conserved while distributed in the atmosphere. Additionally, the current smoke tracer release scheme in WRF-Fire was over-simplified.
Solution:
We introduce a Truncated Gaussian fire heat and smoke distribution scheme in WRF-Fire to overcome the mentioned limitation of fire heat distribution and have a higher fidelity model to release fire smoke tracers. Several namelist options are added in order for the user to choose the desired release scheme and adjust the parameter.
LIST OF MODIFIED FILES:
Registry/registry.fire
phys/module_fr_fire_atm.F
phys/module_fr_fire_driver.F
phys/module_fr_fire_driver_wrf.F
TESTS CONDUCTED:
1. The new scheme is explained and its effects are analyzed against real-world measurements in the following paper for historic fires simulations:
Shamsaei, K.; Juliano, T.W.; Roberts, M.; Ebrahimian, H.; Lareau, N.P.; Rowell, E.; Kosovic, B. The Role of Fuel Characteristics and Heat Release Formulations in Coupled Fire-Atmosphere Simulation. Fire 2023, 6, 264. https://doi.org/10.3390/fire6070264
2. It passed the regression tests.
RELEASE NOTE: Add new Truncated Gaussian scheme to distribute fire heat and smoke in the atmosphere.
commit 211ae28b9888c6eb0a84e346b4912c01c45efcd1
Author: juntangc <107206367+juntangc@users.noreply.github.com>
Date: Wed Jan 31 21:18:47 2024 -0600
loop permute, to help better memory access, vectorization (#1890)
TYPE: enhancement
KEYWORDS: loop permute, vectorization
SOURCE: Jun Tang (Amazon)
DESCRIPTION OF CHANGES:
Problem:
GCC is not able to permute the loop so that the inner loop is along fast dimension of the arrays and not able to vectorize loops with conditional statement
Solution:
This patch allows memory access in the inner loop along the faster dimension of the data arrays; and this patch also breaks down some larger loops with conditional statement to allow partial vectorization.
LIST OF MODIFIED FILES:
M dyn_em/module_advect_em.F
M dyn_em/module_big_step_utilities_em.F
M dyn_em/module_em.F
M phys/module_ra_rrtmg_lw.F
M phys/module_ra_rrtmg_sw.F
M phys/module_radiation_driver.F
TESTS CONDUCTED:
1. I have seen 2-3% improvement in performance for CONUS 2.5 km benchmark (GCC). WRF outputs have been compared before and after the patch; the output models are bit-for-bit matching for CONUS 12km and CONUS 2.5 km models; the diff are generated using diffwrf.py script.
2. It passed regression tests.
3. NCAR also tested the change, and they produce bit-for-bit results.
RELEASE NOTE: This PR allows memory access in the inner loop along the faster dimension of the data arrays in some routines; and in other modules breaks down some larger loops with conditional statement to allow partial vectorization. It particularly benefits with GCC (i.e. gfortran).
commit 710add07fe87ad6d6de7ac29a3b6489b59b8931d
Author: Joseph Olson <joeolson42@users.noreply.github.com>
Date: Wed Jan 31 19:06:35 2024 -0700
Syncing MYNN-EDMF + bug fix (#1996)
TYPE: bug fix, enhancement
KEYWORDS: subgrid clouds, mass flux, local diffusion
SOURCE: Joseph Olson and Laura Fowler
DESCRIPTION OF CHANGES:
Problems:
1. bug fix for momentum transport - minor impact
2. underdiffusive in very stable conditions, especially high latitudes. This reveals itself as a cold bias at high latitudes in RRFS and the TKE is too often hitting the lower limit.
3. cosmetic issue with cloud fractions in unsaturated grid cells with nonzero mixing ratios
4. uninitialized scalars in unused subroutine planned for deletion
Solutions (1-1 mapping with problems listed above):
1. added the missing rho to the mass flux components in the u and v tridiagonal vectors.
2. reverted the blending of the mixing lengths to same as HRRRv4 and tweaked some parameters to slightly increase the diffusion, mostly isolated to very stable conditions.
3. relaxed some limits and combined the ice and snow cloud fraction check together.
4. replaced uninitialized variables with variables that are initialized (changed names). Still plan to remove this subroutine after the downdrafts are fully revised (very close).
LIST OF MODIFIED FILES: list of changed files (use git diff --name-status master to get formatted list)
phys/module_bl_mynn.F
TESTS CONDUCTED:
- Do mods fix problem? (1) Yes, (2) alleviated, (3) Yes, (4) Yes. Single case studies were performed. Full retrospective tests are ongoing. All physics changes hav a small impact.
- Te Jenkins tests are all passing.
commit 43fc9a41ed6b2d87be9b83baa7879c263974b25d
Author: weiwangncar <weiwang@ucar.edu>
Date: Wed Jan 31 14:58:26 2024 -0700
This is in preparation to make sfclayrev module ccpp-compliant: (#1998)
TYPE: enhancement
KEYWORDS: shalwater_init, shallow water roughness length
SOURCE: internal
DESCRIPTION OF CHANGES:
Move the call to shallow water roughness length initialization routine from module_sf_sfclayrev.F to module_physics_init.F
This is in preparation to make sfclayrev module ccpp-compliant, and potential make the initialization and physics available to other surface layer modules.
LIST OF MODIFIED FILES:
M phys/module_physics_init.F
M phys/module_sf_sfclayrev.F
TESTS CONDUCTED:
1. Should not change how the variable is initialized.
2. The Jenkins tests are all passing.
RELEASE NOTE: This PR moves the call to shalwater_init from module_sf_sfclayrev.F to module_physics_init.F.
commit 9b08bf28b56698df2aeda154afab2d7843a89c50
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Wed Jan 31 14:56:15 2024 -0700
Add missing module_wind_mav.o dep to module_physics_init.o (#1999)
TYPE: bug
KEYWORDS: make, dependency
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
PR #1944 adds module_wind_mav to module_physics_init, but does not update the main/depend.common file to add the dependency during compilation
Solution:
Add module_wind_mav.o as a dependency to module_physics_init.o in the main/depend.common file
ISSUE:
Fixes comment noted in #1944
LIST OF MODIFIED FILES:
M main/depend.common
TESTS CONDUCTED:
- Local compilation in single job mode -j 1 should work now.
- It passed regression tests.
commit 240c6f3faee93aff9eaf9995e9cb2f185f8f273c
Author: Anthony Islas <128631809+islas@users.noreply.github.com>
Date: Thu Jan 25 01:02:32 2024 +0000
Rectify many of the missing dependencies (#1950)
TYPE: bug fix
KEYWORDS: make, dependencies
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
Occasionally and non-deterministically the WRF make compilation will fail due to erroneous depend rules or missing rules which result in essentially either (1) race conditions relying on modules to just happen to be compiled in time for use (2) when rules are followed, subsequent dependencies are missing and compilation fails or (3) complete recompilation of certain files.
For instance, if one takes a look at a build log, one could see that module_mp_thompson.o is compiled twice - once as module_mp_thompson.o and again as ../phys/module_mp_thompson.o.
This is not or rarely observed in the current regression tests because compilation is done three times as a stop-gap to avoid this issue.
Solution:
Add missing dependencies and fix malformed dependencies.
LIST OF MODIFIED FILES:
M main/depend.common
TESTS CONDUCTED:
- Cannot be observed in current regression tests as they are designed to obscure this very issue. Can be observed with many single individual compilations.
- It passed the regression tests.
RELEASE NOTE: Fix missing or erroneous dependencies in make rules.
commit 0c4ed5f7006d4754c44a3a47e43b195c116e491e
Author: weiwangncar <weiwang@ucar.edu>
Date: Wed Jan 24 12:17:45 2024 -0700
add salinity effect in sfclay and sfclayrev (#1963)
TYPE: enhancement
KEYWORDS: salinity effect, saturation vapor pressure, ocean
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
The salinity effect of ocean is not considered when computing saturation vapor pressure.
Solution:
Add the effect in the MM5 and revised MM5 surface layer schemes. The 0.98 factor (set in the code as SALINITY_FACTOR) is an approximation for salinity of 34 part per thousands, and applied for saturation specific humidity. Here the approximation is applied to saturation mixing ratio. The lakemask field is used to exclude this effect from inland lakes.
LIST OF MODIFIED FILES:
M phys/module_sf_sfclay.F
M phys/module_sf_sfclayrev.F
M phys/module_surface_driver.F
TESTS CONDUCTED:
- Tested in many tropical cyclone cases.
- The Jenkins tests are all passing.
RELEASE NOTE: Add salinity effect in MM5 and revised MM5 surface layer schemes. The effect is lower the saturation vapor pressure over ocean by about 2%.
commit 3a504662659672d96ee45867e903fc3a3ad02955
Author: weiwangncar <weiwang@ucar.edu>
Date: Wed Jan 24 11:33:45 2024 -0700
Use Qv or specific humidity in interpolation if they are available (#1959)
TYPE: enhancement
KEYWORDS: Qv, specific humidity, vertical interpolation
SOURCE: internal
DESCRIPTION OF CHANGES:
Problem:
In current real program, if either water mixing ratio (Qv) or specific humidity (SH) is available, it first converts it to RH, perform vertical interpolation using RH, and then compute Qv for the model input. Assuming Qv and SH are coming from other model's native levels, which tends to be plenty and generally true, it should not be necessary to go through this Qv (SH) to RH, and RH to Qv steps.
Solution:
Use the flag_qv and flag_sh to avoid using interpolated RH (even though RH is still computed and vertically interpolated). If flag_sh is 1, SH is converted to Qv or mixing ratio. Then Qv is interpolated vertically. A namelist, use_sh_qv, is added for user to choose to do so if SH or Qv data is available. A test case shows that there is some differences in the final Qv in the lower levels (a bit less Qv), particularly near terrain slopes.
LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M dyn_em/module_initialize_real.F
M run/README.namelist
TESTS CONDUCTED:
- It doesn't affect existing option if RH is the only incoming variable. Tested the code, and it gives bit-for-bit results before and after this change.
- The Jenkins tests are all passing.
RELEASE NOTE: If water mixing ratio or specific humidity is available in the metgrid output, they can be used directly in vertical interpolation. Previously these fields are first converted to RH, interpolated vertically, and the water vapor mixing ratio is computed at model levels. Now one can use the new namelist, use_sh_qv = T to choose to use SH or Qv data directly.
commit c50bf2aa962f8df4b96e54c7449d6c543a06bb7d
Author: YulongMa <yulong.ma@wsu.edu>
Date: Thu Jan 25 02:31:05 2024 +0800
Add three new wind farm parameterizations and their ensembles (#1944)
TYPE: new feature
KEYWORDS: wind farm parameterization, windfarm wake option
SOURCE: Cristina Archer (UDEL), Yulong Ma(UDEL;GWA-MWF) and Ahmad Vasel-Be-Hagh(Tennessee Technological University)
DESCRIPTION OF CHANGES:
Three new wind farm parameterizations and their ensembles have been added. The key innovation of these parameterizations is their ability to directly account for the individual and overlapping sub-grid wakes of wind turbines within a wind farm. This feature was absent in the Fitch parameterization previously used in WRF. Additionally, the three parameterizations differ in their representation of wakes (e.g., top-hat or Gaussian) and their superposition methods (e.g., sum of squared deficits, squared velocities, or empirical fittings).
The new namelist option windfarm_wake_model can be used to select one of the three wind farm parameterizations, the windfarm_overlap_method namelist option can be used to select the desired wake superposition method.
We recommend to use the new wind farm parameterizations, particularly for coarse resolution, high turbine density, and wind directions aligned with the turbine columns.
LIST OF MODIFIED FILES:
dyn_em/module_first_rk_step_part1.F
phys/module_pbl_driver.F
phys/module_physics_init.F
phys/module_wind_jensen.F
phys/Makefile
Registry/Registry.EM_COMMON
run/README.namelist
TESTS CONDUCTED:
1. Code tested as shown in references.
2. The Jenkins tests are all passing.
RELEASE NOTE:
This PR adds options for three new wind farm parameterizations and their ensembles to account for the individual and overlapping sub-grid wakes of wind turbines within a wind farm. It is recommended to use the new wind farm parameterizations, particularly for coarse resolution, high turbine density, and wind directions aligned with the turbine columns. References:
Ma, Yulong, Cristina L. Archer, and Ahmadreza Vasel-Be-Hagh. "The Jensen wind farm parameterization." Wind Energy Science 7.6 (2022): 2407-2431.
Ma, Yulong, Cristina L. Archer, and Ahmad Vasel‐Be‐Hagh. "Comparison of individual versus ensemble wind farm parameterizations inclusive of sub‐grid wakes for the WRF model." Wind Energy 25.9 (2022): 1573-1595.
commit 554b12c81b081e068e24a0111ee360b528bb97b0
Author: Cenlin_He <cenlinhe@ucar.edu>
Date: Wed Jan 24 11:14:12 2024 -0700
Update WRF develop with bug fix for LAI initialization for urban pxiel in Noah-MP (#1990)
TYPE: bug fix
KEYWORDS: LAI, urban, Noah-MP
SOURCE: Cenlin He (NCAR/RAL)
DESCRIPTION OF CHANGES:
Problem:
Before bug fix, Noah-MP (v4.5 and earlier versions) initializes leaf mass from the table parameter based on land type. However, this causes model crash if the LCZ capability is activated for urban pixel, because the LCZ land type index (51-61) is out of the MODIS or USGS land type number. This code is in module_sf_noahmpdrv.F file.
Solution:
Add an if-statement to assign default natural vegetation type for urban pixels with large land type index to represent rural portion of the urban pixel.
This is related to a reported Noah-MP issue (NCAR/noahmp#104).
LIST OF MODIFIED FILES:
phys/noahmp/drivers/wrf/module_sf_noahmpdrv.F
TESTS CONDUCTED:
- The mods fix the problem
- It passed the regression tests.
RELEASE NOTE: This PR fixed a bug in Noah-MP for uninitialized leaf area index when LCZ is used.
commit 9f8ecd7964a0ef77ab1861309c6d7c79ec6df249
Author: Ted Mansell <37668594+MicroTed@users.noreply.github.com>
Date: Tue Jan 23 12:36:49 2024 -0600
Make sure that USENETCDFPAR is not undefined (#1988)
TYPE: bug fix
KEYWORDS: make
SOURCE: Ted Mansell (NOAA/NSSL)
DESCRIPTION OF CHANGES:
Problem: Logic failure in top level Makefile with some versions of make (don't remember which) if USENETCDFPAR is undefined
Solution:
Making sure that at USENETCDFPAR is set to either 0 or 1 in the configure script fixes the issue.
LIST OF MODIFIED FILES: configure
TESTS: it passed regression tests.
commit 6156b78dfd350e0514d2455badcd7eab9b7d2d31
Author: Cenlin_He <cenlinhe@ucar.edu>
Date: Tue Jan 23 11:32:59 2024 -0700
Update urban LCZ parameter table with more reasonable values (#1969)
TYPE: enhancement
KEYWORDS: urban, parameter
SOURCE: Reported by Benjamin Fersch (Karlsruhe Institute of Technology, Germany), fixed by Alberto Martilli (CIEMAT, Spain)
DESCRIPTION OF CHANGES:
Problem:
Current urban LCZ parameter table includes some unreasonable values for urban morphology (e.g., too large road width) and thermal properties (e.g., CAPR, CAPB, CAPG, AKSR, AKPB, AKPG). The LCZ classification is mainly a classification based on morphology, rather than thermal properties, so it should use the same thermal properties for different LCZs unless users have specific information from other local data sources.
Solution:
Use morphological parameters correspond to mid-range values of Stewart and Oke 2012, and all the LCZ classes have the same thermal properties.
ISSUE: [For use when this PR closes an issue.](https://github.com/wrf-model/WRF/issues/1954)
LIST OF MODIFIED FILES:
URBPARM_LCZ.TBL
TESTS CONDUCTED:
1. The mods fix the problem.
2. It passed regression tests.
RELEASE NOTE: Update urban LCZ parameter table (URBPARM_LCZ.TBL) with more reasonable values.
commit e18082cd6a59f0c2452878a5a821b72b4b066ee2
Author: Ted Mansell <37668594+MicroTed@users.noreply.github.com>
Date: Tue Jan 23 12:14:34 2024 -0600
Add 3-moment option to NSSL microphysics (plus other minor scheme updates) (#1876)
TYPE: enhancement
KEYWORDS: micro…
New option for SLUCM to consider global distributed urban parameters
TYPE: new feature
KEYWORDS: SLUCM, urban parameters, anthropogenic heat
SOURCE: Do Ngoc Khanh (Tokyo Institute of Technology)
DESCRIPTION OF CHANGES:
This PR adds a new feature to WRF SLUCM by allowing consideration of spatially varying global distributed urban parameters and spatially hourly monthly varying anthropogenic heat.
ISSUE: N/A
LIST OF MODIFIED FILES:
M Registry/Registry.EM_COMMON
M Registry/registry.dimspec
M dyn_em/module_first_rk_step_part1.F
M dyn_em/module_initialize_real.F
M phys/module_pbl_driver.F
M phys/module_physics_init.F
M phys/module_sf_clm.F
M phys/module_sf_noahdrv.F
M phys/module_sf_urban.F
M phys/module_surface_driver.F
M phys/noahmp
M share/output_wrf.F
TESTS CONDUCTED:
RELEASE NOTE: This modification add a two options (use_distributed_aerodynamics and distributed_ahe_opt) to WRF SLUCM (sf_urban_physics = 1) so that spatially varying urban morphological parameters (building height, plan area index, frontal area index, roughness length for momentum, and displacement height) can be considered.