Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Add a Physics Scheme into WRF Model Shu-hua Chen UC Davis/AFWA Physics implementation features Adding a physics scheme."— Presentation transcript:

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

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

3 Rules for WRF Physics  Naming rules

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

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

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

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

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

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  Prepare your code  Create a new module  Declare new variables and a new package in Registry  Modify solve_em.F (solve_eh.F) Implement a new physics scheme  Do initialization  Modify namelist  Modify phy_prep (module_em.F)

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

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

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

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

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

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

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 chenscheme cu_physics==3 - - package kfscheme cu_physics==1 - - package bmjscheme cu_physics==2 - -

20 Implement a new physics scheme 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,  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)

21 Implement a new physics scheme  Modify namelist.input and assign cu_physics = 3  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)

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

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

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

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

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

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

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

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

31  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) cumulus_driver.F

32 Subroutine cumulus_driver. USE module_cu_kf USE module_bmj_kf. cumulus_driver.F 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 Match the package name in Registry Put in module_cu_chen.F CASE (CHENSCHEME) CALL CHENCPS(...)

33 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,…. Physics_drive.int

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

35 . 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 ). phys/module_physics_addtendc.F Subroutine phy_cu_ten (… )

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


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

Similar presentations


Ads by Google