1 / 36

Add a Physics Scheme into WRF Model

Add a Physics Scheme into WRF Model. Shu-hua Chen UC Davis/AFWA. Physics implementation features Adding a physics scheme. Three Sets of Dimensions. Domain size: ids, ide, jds, jde, kds, kde Memory size: ims, ime, jms, jme, kms, kme Tile size: its, ite, jts, jte, kts, kte.

jeslyn
Download Presentation

Add a Physics Scheme into WRF Model

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Add a Physics Scheme into WRF Model Shu-hua Chen UC Davis/AFWA Physics implementation features Adding a physics scheme

  2. Three Sets of Dimensions Domain size: ids, ide, jds, jde, kds, kde Memory size: ims, ime, jms, jme, kms, kme Tile size: its, ite, jts, jte, kts, kte

  3. Rules for WRF Physics • Naming rules

  4. Naming Rules module_yy_xxx.F(module) yy = ra is for radiation bl is for PBL cu is for cumulus mp is for microphysics. xxx = individual scheme ex, module_cu_kf.F

  5. Naming Rules RXXYYTEN(tendencies) XX = variable (th, u, v, qv, qc, … ) YY = ra is for radiation bl is for PBL cu is for cumulus ex, RTHBLTEN

  6. Rules for WRF Physics • Naming rules • One scheme one module • Coding rules (later)

  7. REAL , PARAMETER :: r_d = 287. REAL , PARAMETER :: r_v = 461.6 REAL , PARAMETER :: cp = 7.*r_d/2. REAL , PARAMETER :: cv = cp-r_d . . WRF Physics Features • Unified global constatnts (module_model_constants.F)

  8. WRF Physics Features • Unified global constatnts (module_model_constants.F) • Unified common calculations (saturation mixing ratio) • Vertical index (kms is at the bottom)

  9. WRF Language • 4D Moisture field, moist(i,k,j,?) ? =P_QV (water vapor) P_QC (cloud water) P_QI (cloud ice) P_QR (rain) P_QS (snow) P_QG (graupel) (module_state_description.F)

  10. WRF Language • 4D Moisture field, moist(i,k,j,?) • PARAM_FIRST_SCALAR IF ( P_QI .ge. PARAM_FIRST_SCALAR ) (the memory of cloud ice is allocated) . . .

  11. Implement a new physics scheme • Prepare your code • Create a new module • Declare new variables and a new package in Registry • Modify namelist • Do initialization • Modify solve_em.F (solve_eh.F) • Modify phy_prep (module_em.F)

  12. Implement a new physics scheme • Modify cumulus_driver.F • Modify physics_drive.int • Modify calculate_phy_ten (module_em.F) • Modify phy_cu_ten (module_physics_addtendc.F) • Modify Makefile • Compile and test

  13. F77 Subroutine kessler(QV, T, & its,ite,jts,jte,kts,kte, & ims,ime,jms,jme,kms,kme, & ids,ide,jds,jde,kds,kde) F90 Subroutine kessler(QV, T, . . . & its,ite,jts,jte,kts,kte,& ims,ime,jms,jme,kms,kme,& ids,ide,jds,jde,kds,kde ) Prepare your code 1.F90 • Replace continuation characters in the 6th column with f90 continuation `&‘ at end of previous line

  14. F77 c This is a test F90 ! This is a test Prepare your code 1.F90 • Replace continuation characters in the 6th column with f90 continuation `&‘ at end of previous line b)Replace the 1st column `C` for comment with `!`

  15. F77 common/var1/T,q,p, … F90 Subroutine sub(T,q,p, ….) real,intent(out), & dimension(ims:ime,kms:kme,jms:jme):: T,q,p Prepare your code 1.F90 2.No common block

  16. Prepare your code 1.F90 2.No common block 3.Use “implicit none ” 4.Use “intent ” Subroutine sub(T,q,p, ….) real,intent(out), & dimension(ims:ime,kms:kme,jms:jme):: T real,intent( in), & dimension(ims:ime,kms:kme,jms:jme):: q real,intent(inout), & dimension(ims:ime,kms:kme,jms:jme):: p

  17. Prepare your code 1.F90 2.No common block 3.Use “implicit none ” 4.Use “intent ” 5.Variable dimensions Subroutine sub(glo,….) real,intent(out), & dimension(ims:ime,kms:kme,jms:jme):: glo real,dimension(its:ite,kts:kte,jts:jte):: loc

  18. do j = jts, jte do k = kts, kte do i = its, ite ... enddo enddo enddo Prepare your code 1.F90 2.No common block 3.Use “implicit none ” 4.Use “intent ” 5.Variable dimensions 6.Do loops

  19. Implement a new physics scheme • Create a new module ex,module_cu_chen.F (put all your codes in) • Go Registry and declare a new package (and new variables) (WRFV1/Registry) package kfscheme cu_physics==1 - - package bmjscheme cu_physics==2 - - package chenscheme cu_physics==3 - -

  20. Implement a new physics scheme • Create a new module ex,module_cu_chen.F (put all your codes in) • Go Registry and declare a new package (and new variables) (WRFV1/Registry) Cloud microphysics package kesslerscheme mp_physics==1 - moist:qv,qc,qr package linscheme mp_physics==2 - moist:qv,qc,qr,qi,qs,qg package ncepcloud3 mp_physics==3 - moist:qv,qc,qr package ncepcloud5 mp_physics==4 - moist:qv,qc,

  21. Implement a new physics scheme • Create a new module ex,module_cu_chen.F (put all your codes in) • Go Registry and declare a new package (and new variables) (WRFV1/Registry) • Modify namelist.input and assign cu_physics = 3

  22. * * (dyn_em) (start_em.F) (phys) (module_physics_init.F) phy_init cu_init start_domain_em INIT (dyn_em) solve_em WRF …….

  23. phys/module_physics_init.F • Pass new variables down to cu_init

  24. * * (dyn_em) (start_em.F) (phys) (module_physics_init.F) phy_init cu_init start_domain_em INIT (dyn_em) solve_em WRF …….

  25. phys/module_physics_init.F • Go subroutine cu_init Include the new module and create a new SELECT case • Pass new variables down to cu_init

  26. Put into module_cu_chen.F Match the package name in Registry phys/module_physics_init.F Subroutine cu_init(…) . USE module_cu_kf USE module_cu_bmj . USE module_cu_chen cps_select: SELECT CASE(config_flags%cu_physics) CASE (KFSCHEME) CALL kfinit(...) CASE (BMJSCHEME) CALL bmjinit(...) CASE DEFAULT END SELECT cps_select CASE (CHENSCHEME) CALL cheninit(...)

  27. phy_prep phy_init … INIT WRF solve_em … . DYNAMICS . moist_physics_prep

  28. phy_prep/moist_physics_prep • Calculate required variables • Convert variables from C grid to A grid

  29. phy_prep phy_init … radiation_driver pbl_driver INIT cumulus_driver chencps WRF solve_em . … DYNAMICS . moist_physics_prep microphysics_driver

  30. Physics_driver SELECT CASE (CHOICE) CASE ( NOPHY ) CASE( SCHEME1 ) CALL XXX CASE( SCHEME2 ) CALL YYY . CASE DEFAULT END SELECT Individual physics scheme ( XXX ) Three-level structure solve_em

  31. cumulus_driver.F • Go physics driver (cumulus_driver.F) Include the new module and create a new SELECT CASE in driver Check available variables in drivers (variables are explained inside drivers)

  32. Put in module_cu_chen.F Match the package name in Registry cumulus_driver.F Subroutine cumulus_driver . USE module_cu_kf USE module_bmj_kf . USE module_cu_chen cps_select: SELECT CASE(config_flags%cu_physics) CASE (KFSCHEME) CALL KFCPS(...) CASE (BMJSCHEME) CALL BMJCPS(...) CASE DEFAULT END SELECT cps_select CASE (CHENSCHEME) CALL CHENCPS(...)

  33. Physics_drive.int SUBROUTINE cumulus_driver(arg1, arg2, … & newvar1, newvar2,… & its,ite,jts,jte,kts,kte, & ims,ime,jms,jme,kms,kme, & ids,ide,jds,jde,kds,kde ) INTEGER, INTENT(IN) :: its,ite,jts,jte,kts,kte, & ims,ime,jms,jme,kms,kme, & ids,ide,jds,jde,kds,kde REAL, INTENT(IN) :: arg1, arg2 REAL, INTENT(OUT), DIMENSION(kms:kme) :: & newvar1,newvar2,….

  34. calculate_phy_tend Might need to call MPP phy_cu_ten update_phy_ten phy_prep chencps cumulus_driver solve_em DYNAMICS .

  35. phys/module_physics_addtendc.F Subroutine phy_cu_ten (… ) . CASE(BMJSCHEME) . CASE (CHENSCHEME) CALL add_a2a (rt_tendf, RTHCUTEN,… ) CALL add_a2c_u(ru_tendf,RUBLTEN,… ) CALL add_a2c_v(rv_tendf,RVBLTEN,… ) if (P_QS .ge. PARAM_FIRST_SCALAR) & CALL add_a2a(moist_tendf(ims,kms,jms,P_QS),RQSCUTEN, .. & ids,ide, jds, jde, kds, kde, & ims, ime, jms, jme, kms, kme, & its, ite, jts, jte, kts, kte ) .

  36. module_cu_chen.F MODULE_CU_CHEN CONTRAINS !-------------------------------------------------------------------------- SUBROUTINE cheninit (arg1, arg2, … ) . ENDSUBROUTINE cheninit SUBROUTINE chencps (arg3, arg4, … ) . END SUBROUTINE chencps . END MODULE_CU_CHEN

More Related