From c40c033492ec5127d9efff0455fb12aa55cccd1a Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 19:36:37 +0000 Subject: [PATCH 01/24] * Adds flag to control freezing rain output from TEMPO, config_tempo_fzra * Adds accumulated freezing rain variable, frainnc --- src/core_atmosphere/Registry.xml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 773caec760..24e110fb0f 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -2450,6 +2450,11 @@ description="Logical flag to turn on/off prognostic graupel number concentration and rime density" possible_values=".true. or .false."/> + + + + From 5ce6652d3d7b95f65ded27ab0deb313078f2e40b Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 19:39:23 +0000 Subject: [PATCH 02/24] Adds freezing rain pointer, frainnc_p to variable list --- src/core_atmosphere/physics/mpas_atmphys_vars.F | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F index b9bfdfa639..80051d5f0c 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -286,6 +286,9 @@ module mpas_atmphys_vars sr_p, &! nwfa2d_p + real(kind=RKIND),dimension(:,:),allocatable:: & + frainnc_p, &! + integer:: & has_reqc, &! has_reqi, &! From 9ff0465b8bd0b7f08c85dac3e317a54d86033a33 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 23:02:56 +0000 Subject: [PATCH 03/24] Bugfix for freezing rain pointer: removed trailing comma and ampersand for variable definition --- src/core_atmosphere/physics/mpas_atmphys_vars.F | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F index 80051d5f0c..3ffdda3c9b 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -287,7 +287,7 @@ module mpas_atmphys_vars nwfa2d_p real(kind=RKIND),dimension(:,:),allocatable:: & - frainnc_p, &! + frainnc_p integer:: & has_reqc, &! From 5eec311885b449355e25db393df965e5d750a648 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 23:19:17 +0000 Subject: [PATCH 04/24] * Adds allocation/deallocation controls for freezing rain pointer (frainnc_p) by config_tempo_fzra * Adds allocatable freezing rain variable to TEMPO driver --- .../mpas_atmphys_driver_microphysics.F | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 51b43093b8..5f58a3081e 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -110,6 +110,7 @@ subroutine allocate_microphysics(configs) character(len=StrKIND),pointer:: microp_scheme character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_fzra !----------------------------------------------------------------------------------------------------------------- @@ -117,6 +118,7 @@ subroutine allocate_microphysics(configs) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_fzra',config_tempo_fzra) !sounding variables: if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) ) @@ -211,6 +213,10 @@ subroutine allocate_microphysics(configs) if(.not.allocated(nwfa_p) ) allocate(nwfa_p(ims:ime,kms:kme,jms:jme)) endif + if (config_tempo_fzra) then + if(.not.allocated(frainnc_p) ) allocate(frainnc_p(ims:ime,jms:jme) ) + endif + case("mp_nssl2m") if(.not.allocated(qh_p) ) allocate(qh_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(nc_p) ) allocate(nc_p(ims:ime,kms:kme,jms:jme)) @@ -260,6 +266,7 @@ subroutine deallocate_microphysics(configs) character(len=StrKIND),pointer:: microp_scheme character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_fzra !----------------------------------------------------------------------------------------------------------------- @@ -267,6 +274,7 @@ subroutine deallocate_microphysics(configs) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) + call mpas_pool_get_config(configs,'config_tempo_fzra',config_tempo_fzra) !sounding variables: if(allocated(rho_p) ) deallocate(rho_p ) @@ -359,6 +367,10 @@ subroutine deallocate_microphysics(configs) if(allocated(nwfa_p) ) deallocate(nwfa_p ) endif + if (config_tempo_fzra) then + if(allocated(frainnc_p) ) deallocate(frainnc_p) + endif + case("mp_nssl2m") if(allocated(qh_p) ) deallocate(qh_p ) if(allocated(nc_p) ) deallocate(nc_p ) @@ -589,7 +601,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & - refl_10cm = refl10cm_p , & + refl_10cm = refl10cm_p , frainnc = frainnc_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & @@ -611,7 +623,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & - refl_10cm = refl10cm_p , & + refl_10cm = refl10cm_p , frainnc = frainnc_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & @@ -632,7 +644,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & - refl_10cm = refl10cm_p , & + refl_10cm = refl10cm_p , frainnc = frainnc_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & @@ -656,7 +668,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten re_cloud = recloud_p , re_ice = reice_p , re_snow = resnow_p , & has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & - refl_10cm = refl10cm_p , & + refl_10cm = refl10cm_p , frainnc = frainnc_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & @@ -867,6 +879,7 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) character(len=StrKIND),pointer:: nssl_moments integer,pointer:: nCellsSolve real,dimension(:),pointer:: graupelncv,rainncv,snowncv,sr + logical,pointer:: config_tempo_fzra !local variables and arrays: integer:: i,j @@ -875,6 +888,7 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) + call mpas_pool_get_config(configs,'config_tempo_fzra',config_tempo_fzra) call mpas_pool_get_array(diag_physics,'graupelncv',graupelncv) call mpas_pool_get_array(diag_physics,'rainncv' ,rainncv ) @@ -955,6 +969,9 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) real(kind=RKIND),dimension(:),pointer:: graupelnc,rainnc,snownc real(kind=RKIND),dimension(:),pointer:: graupelncv,rainncv,snowncv,sr + logical,pointer:: config_tempo_fzra + real(kind=RKIND),dimension(:),pointer:: frainnc + !local variables and arrays: integer:: i,j,k real(kind=RKIND):: rho_a @@ -964,6 +981,7 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme ) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_bucket_rainnc',config_bucket_rainnc) + call mpas_pool_get_config(configs,'config_tempo_fzra',config_tempo_fzra) call mpas_pool_get_array(diag_physics,'i_rainnc' ,i_rainnc ) call mpas_pool_get_array(diag_physics,'precipw' ,precipw ) From f5b6f00ae80e3b52f847ab6a7a6be10934b52c65 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 23:23:38 +0000 Subject: [PATCH 05/24] Separate case options for TEMPO and NSSL microphysics for precip_to_MPAS and MPAS_to_precip --- .../mpas_atmphys_driver_microphysics.F | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 5f58a3081e..e91f03817e 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -926,7 +926,24 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) sr(i) = 0._RKIND enddo - case ("mp_tempo","mp_nssl2m") + case ("mp_tempo") + do j = jts, jte + do i = its, ite + snowncv_p(i,j) = 0._RKIND + graupelncv_p(i,j) = 0._RKIND + snownc_p(i,j) = 0._RKIND + graupelnc_p(i,j) = 0._RKIND + sr_p(i,j) = 0._RKIND + enddo + enddo + + do i = its,ite + snowncv(i) = 0._RKIND + graupelncv(i) = 0._RKIND + sr(i) = 0._RKIND + enddo + + case ("mp_nssl2m") do j = jts, jte do i = its, ite snowncv_p(i,j) = 0._RKIND @@ -1038,7 +1055,21 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) enddo enddo - case ("mp_tempo","mp_nssl2m") + case ("mp_tempo") + do j = jts,jte + do i = its,ite + !time-step precipitation: + snowncv(i) = snownc_p(i,j) + graupelncv(i) = graupelnc_p(i,j) + sr(i) = (snownc_p(i,j) + graupelnc_p(i,j)) / (rainnc_p(i,j)+1.e-12) + + !accumulated precipitation: + snownc(i) = snownc(i) + snowncv(i) + graupelnc(i) = graupelnc(i) + graupelncv(i) + enddo + enddo + + case ("mp_nssl2m") do j = jts,jte do i = its,ite !time-step precipitation: From 3042ae78dfe3fb8d0a865ac181aad732bc57431e Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 23:29:46 +0000 Subject: [PATCH 06/24] Initialization and calculation of freezing rain (frainnc) for diag_physics --- .../physics/mpas_atmphys_driver_microphysics.F | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index e91f03817e..3e758564dd 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -943,6 +943,14 @@ subroutine precip_from_MPAS(configs,diag_physics,its,ite) sr(i) = 0._RKIND enddo + if (config_tempo_fzra) then + do j = jts, jte + do i = its, ite + frainnc_p(i,j) = 0._RKIND + enddo + enddo + endif + case ("mp_nssl2m") do j = jts, jte do i = its, ite @@ -1069,6 +1077,16 @@ subroutine precip_to_MPAS(configs,diag_physics,its,ite) enddo enddo + if (config_tempo_fzra) then + call mpas_pool_get_array(diag_physics,'frainnc',frainnc) + do j = jts,jte + do i = its,ite + !accumulated precipitation: + frainnc(i) = frainnc(i) + frainnc_p(i,j) + enddo + enddo + endif + case ("mp_nssl2m") do j = jts,jte do i = its,ite From 6c89faabc4335d9b267cc9f91300cd472145a116 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 12 Nov 2024 23:50:19 +0000 Subject: [PATCH 07/24] Update pointer to TEMPO for freezing rain feature --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index dbf3167553..51303541ad 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit dbf3167553b627b099945ac5bf9d8232b378be9b +Subproject commit 51303541ad92f1cd48146bcbdf36dc997b235bd3 From 6c7a6bf652c176d8f04a1be3389701a3305f822c Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 27 Jan 2025 22:48:05 +0000 Subject: [PATCH 08/24] Update TEMPO pointer --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 51303541ad..33bbf82231 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 51303541ad92f1cd48146bcbdf36dc997b235bd3 +Subproject commit 33bbf82231efe23a61ebefdc18f196ebba7d8c87 From 3bb9edb19b7c59f96497bc62512dd25dfb167da0 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 28 Jan 2025 18:17:10 +0000 Subject: [PATCH 09/24] turn on TEMPO freezing rain flag by default --- src/core_atmosphere/Registry.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 615ca6dc22..950ec4cbd3 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -2488,7 +2488,7 @@ description="Logical flag to turn on/off prognostic graupel number concentration and rime density" possible_values=".true. or .false."/> - From da7c54e56d579cdb1dcf3e4948f0f100158116c0 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 28 Jan 2025 18:42:04 +0000 Subject: [PATCH 10/24] Update TEMPO pointer --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 33bbf82231..cf9aac81bf 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 33bbf82231efe23a61ebefdc18f196ebba7d8c87 +Subproject commit cf9aac81bfe678888caa775815aebeebc4101278 From 075213d5bac962375da3d190b6c5d3d4c3ba24c1 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 7 Feb 2025 17:26:03 +0000 Subject: [PATCH 11/24] clean up freezing rain code and remove registry flag --- src/core_atmosphere/Registry.xml | 5 --- src/core_atmosphere/physics/TEMPO | 2 +- .../mpas_atmphys_driver_microphysics.F | 43 ++++--------------- 3 files changed, 9 insertions(+), 41 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 642500bfb3..2e132651c0 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -2488,11 +2488,6 @@ description="Logical flag to turn on/off prognostic graupel number concentration and rime density" possible_values=".true. or .false."/> - - Date: Fri, 21 Feb 2025 17:42:19 +0000 Subject: [PATCH 12/24] Update TEMPO pointer --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index d08d1592f7..f97d29e10b 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit d08d1592f7c63eaddc41b7cacce6975738b05c3e +Subproject commit f97d29e10b007a2522034a26fd8e6ed904ba1068 From 7e96b7941a294a6641e57aba1ab9bb417ae44775 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 21 Feb 2025 18:54:22 +0000 Subject: [PATCH 13/24] update pointer to TEMPO --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index f97d29e10b..cb16f8961e 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit f97d29e10b007a2522034a26fd8e6ed904ba1068 +Subproject commit cb16f8961e575246a3171ae67d637c0065c6b28d From 17bf1d05b27ba9674538fd71d61bde65a0c34e12 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 21 Feb 2025 18:57:33 +0000 Subject: [PATCH 14/24] Update version and add TEMPO table build executable to gitignore --- .gitignore | 1 + README.md | 2 +- src/core_atmosphere/Registry.xml | 2 +- src/core_init_atmosphere/Registry.xml | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 8b43f3aa0c..eaf71a8102 100644 --- a/.gitignore +++ b/.gitignore @@ -19,6 +19,7 @@ src/operators/*.f90 # Executables *_model build_tables +build_tables_tempo # NetCDF Files *.nc diff --git a/README.md b/README.md index 122158aa52..48a028aa7a 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -MPAS-v8.2.2-2.6 +MPAS-v8.2.2-2.7 The Model for Prediction Across Scales (MPAS) is a collaborative project for diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 319fa75460..a54ca0aef1 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1,6 +1,6 @@ - + diff --git a/src/core_init_atmosphere/Registry.xml b/src/core_init_atmosphere/Registry.xml index a73fbefea2..63e7facc60 100644 --- a/src/core_init_atmosphere/Registry.xml +++ b/src/core_init_atmosphere/Registry.xml @@ -1,5 +1,5 @@ - + From 925a290302e52771ebb8d8bd82d0a13d3f888941 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 21 Feb 2025 23:21:34 +0000 Subject: [PATCH 15/24] Initial 1-moment hail commit --- src/core_atmosphere/Registry.xml | 6 +++--- src/core_atmosphere/physics/TEMPO | 2 +- .../physics/mpas_atmphys_driver_microphysics.F | 4 +++- src/core_atmosphere/physics/mpas_atmphys_interface.F | 6 ++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index d7dd8cd412..e434d5dfd6 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1744,7 +1744,7 @@ + packages="mp_nssl2m_in;tempo_hailaware_in"/> + packages="mp_nssl2m_in;tempo_hailaware_in"/> - scalars(index_qh,:,:) ng => scalars(index_ng,:,:) volg => scalars(index_volg,:,:) do j = jts, jte do k = kts, kte do i = its, ite + qh_p(i,k,j) = qh(k,i) ng_p(i,k,j) = ng(k,i) volg_p(i,k,j) = volg(k,i) enddo @@ -1352,15 +1355,18 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te endif if (config_tempo_hailaware) then + call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) call mpas_pool_get_dimension(state,'index_ng' ,index_ng ) call mpas_pool_get_dimension(state,'index_volg' ,index_volg ) + qh => scalars(index_qh,:,:) ng => scalars(index_ng,:,:) volg => scalars(index_volg,:,:) do j = jts, jte do k = kts, kte do i = its, ite + qh(k,i) = qh_p(i,k,j) ng(k,i) = ng_p(i,k,j) volg(k,i) = volg_p(i,k,j) enddo From 7ef8a2e5e6a50f8df1ae37b597f95eb8c2251c68 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 14 Mar 2025 23:38:31 +0000 Subject: [PATCH 16/24] Pointing to initial working version of 1-moment hail --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 04d5f2f5a9..eb0901ff70 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 04d5f2f5a959f7e11458dba55348b31ff3b4fae7 +Subproject commit eb0901ff707f6d5cb8c2233f0a4fb5353caac8de From 6010accfbe90616a1b7a4ada33b49cfffc9331a1 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 15 Mar 2025 13:58:14 +0000 Subject: [PATCH 17/24] Add control flag for TEMPO with true hail --- src/core_atmosphere/Registry.xml | 12 ++++-- src/core_atmosphere/physics/TEMPO | 2 +- .../mpas_atmphys_driver_microphysics.F | 14 +++++-- .../physics/mpas_atmphys_interface.F | 38 +++++++++++++++---- .../physics/mpas_atmphys_packages.F | 13 ++++++- src/core_init_atmosphere/Registry.xml | 1 + 6 files changed, 62 insertions(+), 18 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index eaaabee49c..85d4dc2783 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -410,6 +410,7 @@ + @@ -1744,7 +1745,7 @@ + packages="mp_nssl2m_in;tempo_qh_in"/> + packages="mp_nssl2m_in;tempo_qh_in"/> - + + scalars(index_qh,:,:) ng => scalars(index_ng,:,:) volg => scalars(index_volg,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qh_p(i,k,j) = qh(k,i) ng_p(i,k,j) = ng(k,i) volg_p(i,k,j) = volg(k,i) enddo @@ -885,6 +882,20 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, enddo endif + if (config_tempo_qh) then + call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) + + qh => scalars(index_qh,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qh_p(i,k,j) = qh(k,i) + enddo + enddo + enddo + endif + case("mp_nssl2m") call mpas_pool_get_dimension(state,'index_ni',index_ni) call mpas_pool_get_dimension(state,'index_nr',index_nr) @@ -1117,7 +1128,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te !local pointers: character(len=StrKIND),pointer:: mp_scheme character(len=StrKIND),pointer:: nssl_moments - logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware, config_tempo_qh integer,pointer:: index_qv,index_qc,index_qr,index_qi,index_qs,index_qg integer,pointer:: index_nc,index_ni,index_nr,index_nifa,index_nwfa !TEMPO/NSSL @@ -1355,18 +1366,15 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te endif if (config_tempo_hailaware) then - call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) call mpas_pool_get_dimension(state,'index_ng' ,index_ng ) call mpas_pool_get_dimension(state,'index_volg' ,index_volg ) - qh => scalars(index_qh,:,:) ng => scalars(index_ng,:,:) volg => scalars(index_volg,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qh(k,i) = qh_p(i,k,j) ng(k,i) = ng_p(i,k,j) volg(k,i) = volg_p(i,k,j) enddo @@ -1374,6 +1382,20 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo endif + if (config_tempo_qh) then + call mpas_pool_get_dimension(state,'index_qh' ,index_qh ) + + qh => scalars(index_qh,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qh(k,i) = qh_p(i,k,j) + enddo + enddo + enddo + endif + case("mp_nssl2m") call mpas_pool_get_dimension(state,'index_ni' ,index_ni ) call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) diff --git a/src/core_atmosphere/physics/mpas_atmphys_packages.F b/src/core_atmosphere/physics/mpas_atmphys_packages.F index 2a93385302..7cc2410843 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_packages.F +++ b/src/core_atmosphere/physics/mpas_atmphys_packages.F @@ -39,9 +39,9 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie character(len=StrKIND),pointer:: config_convection_scheme character(len=StrKIND),pointer:: config_pbl_scheme character(len=StrKIND),pointer:: config_lsm_scheme - logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware, config_tempo_qh logical,pointer:: mp_kessler_in,mp_thompson_in,mp_thompson_aers_in,mp_wsm6_in,mp_nssl2m_in,nssl3m_in - logical,pointer:: mp_tempo_in, tempo_hailaware_in, tempo_aerosolaware_in + logical,pointer:: mp_tempo_in, tempo_hailaware_in, tempo_aerosolaware_in, tempo_qh_in logical,pointer:: cu_grell_freitas_in,cu_kain_fritsch_in,cu_ntiedtke_in logical,pointer:: bl_mynn_in,bl_mynnedmf_in,bl_ysu_in,bl_myj_in logical,pointer:: lsm_noah_in,lsm_ruc_in @@ -64,6 +64,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie call mpas_pool_get_config(configs,'config_nssl_moments',config_nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) + call mpas_pool_get_config(configs,'config_tempo_qh',config_tempo_qh) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) nullify(mp_kessler_in) @@ -83,6 +84,9 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie nullify(tempo_hailaware_in) call mpas_pool_get_package(packages,'tempo_hailaware_inActive',tempo_hailaware_in) + + nullify(tempo_qh_in) + call mpas_pool_get_package(packages,'tempo_qh_inActive',tempo_qh_in) nullify(mp_wsm6_in) call mpas_pool_get_package(packages,'mp_wsm6_inActive',mp_wsm6_in) @@ -112,6 +116,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie mp_tempo_in = .false. tempo_aerosolaware_in = .false. tempo_hailaware_in = .false. + tempo_qh_in = .false. mp_wsm6_in = .false. mp_nssl2m_in = .false. nssl3m_in = .false. @@ -132,6 +137,9 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie if (config_tempo_hailaware) then tempo_hailaware_in = .true. endif + if (config_tempo_qh) then + tempo_qh_in = .true. + endif elseif(config_microp_scheme == 'mp_nssl2m') then mp_nssl2m_in = .true. IF ( config_nssl_moments == 'nssl3m' ) THEN @@ -145,6 +153,7 @@ function atmphys_setup_packages(configs,streamInfo,packages,iocontext) result(ie call mpas_log_write(' mp_tempo_in = $l', logicArgs=(/mp_tempo_in/)) call mpas_log_write(' tempo_aerosolaware_in = $l', logicArgs=(/tempo_aerosolaware_in/)) call mpas_log_write(' tempo_hailaware_in = $l', logicArgs=(/tempo_hailaware_in/)) + call mpas_log_write(' tempo_qh_in = $l', logicArgs=(/tempo_qh_in/)) call mpas_log_write(' mp_wsm6_in = $l', logicArgs=(/mp_wsm6_in/)) call mpas_log_write(' mp_nssl2m_in = $l', logicArgs=(/mp_nssl2m_in/)) call mpas_log_write(' nssl3m_in = $l', logicArgs=(/nssl3m_in/)) diff --git a/src/core_init_atmosphere/Registry.xml b/src/core_init_atmosphere/Registry.xml index 63e7facc60..b671a02657 100644 --- a/src/core_init_atmosphere/Registry.xml +++ b/src/core_init_atmosphere/Registry.xml @@ -406,6 +406,7 @@ + From 1719934806249cda540e6fa6b42993774bdae1a5 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 15 Mar 2025 15:07:29 +0000 Subject: [PATCH 18/24] Connect hail size to MPAS output --- src/core_atmosphere/Registry.xml | 12 ++++++++++++ src/core_atmosphere/physics/TEMPO | 2 +- .../physics/mpas_atmphys_driver_microphysics.F | 5 +++++ src/core_atmosphere/physics/mpas_atmphys_interface.F | 12 ++++++++++-- src/core_atmosphere/physics/mpas_atmphys_vars.F | 2 ++ 5 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 83d2adfb4a..48c3cf809b 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -661,6 +661,8 @@ + + @@ -1122,6 +1124,8 @@ + + @@ -2713,6 +2717,14 @@ description="10 cm radar reflectivity" packages="mp_thompson_in;mp_wsm6_in;mp_nssl2m_in;mp_tempo_in"/> + + + + diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 1881bafcb1..06a05666fb 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 1881bafcb1acc875e15c2215825fce30966ca98e +Subproject commit 06a05666fb396a7264c582a9bca72349b655f3f2 diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 1916e6a8b2..d3c1b64802 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -194,6 +194,8 @@ subroutine allocate_microphysics(configs) if(.not.allocated(ni_p) ) allocate(ni_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(nr_p) ) allocate(nr_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(refl10cm_p) ) allocate(refl10cm_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qh_size_p) ) allocate(qh_size_p(ims:ime,kms:kme,jms:jme) ) + if(.not.allocated(qg_size_p) ) allocate(qg_size_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(refl10cm_1km_p) ) allocate(refl10cm_1km_p(ims:ime,jms:jme) ) if(.not.allocated(frainnc_p) ) allocate(frainnc_p(ims:ime,jms:jme) ) @@ -345,6 +347,8 @@ subroutine deallocate_microphysics(configs) if(allocated(ni_p) ) deallocate(ni_p ) if(allocated(nr_p) ) deallocate(nr_p ) if(allocated(refl10cm_p) ) deallocate(refl10cm_p ) + if(allocated(qh_size_p) ) deallocate(qh_size_p ) + if(allocated(qg_size_p) ) deallocate(qg_size_p ) if(allocated(refl10cm_1km_p)) deallocate(refl10cm_1km_p) if(allocated(frainnc_p) ) deallocate(frainnc_p) @@ -660,6 +664,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & refl_10cm = refl10cm_p , frainnc = frainnc_p , & + qh_diam = qh_size_p , qg_diam = qg_size_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index cbdfed4145..441b19136b 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -675,7 +675,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg,qh real(kind=RKIND),dimension(:,:),pointer :: ni,nr,nc,ns,ng,nh,nccn,nwfa,nifa real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw - real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm + real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm,qh_size,qg_size real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten @@ -778,6 +778,8 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) call mpas_pool_get_array(diag_physics,'refl10cm' ,refl10cm ) + call mpas_pool_get_array(diag_physics,'qh_size' ,qh_size ) + call mpas_pool_get_array(diag_physics,'qg_size' ,qg_size ) do j = jts, jte do k = kts, kte @@ -792,6 +794,8 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, reice_p(i,k,j) = re_ice(k,i) resnow_p(i,k,j) = re_snow(k,i) refl10cm_p(i,k,j) = refl10cm(k,i) + qh_size_p(i,k,j) = qh_size(k,i) + qg_size_p(i,k,j) = qg_size(k,i) enddo enddo enddo @@ -1133,7 +1137,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg,qh real(kind=RKIND),dimension(:,:),pointer :: ni,nr,nc,ns,ng,nh,nccn,nwfa,nifa real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw - real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm + real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm,qh_size,qg_size real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten @@ -1277,6 +1281,8 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) call mpas_pool_get_array(diag_physics,'refl10cm' ,refl10cm ) + call mpas_pool_get_array(diag_physics,'qh_size' ,qh_size) + call mpas_pool_get_array(diag_physics,'qg_size' ,qg_size) do j = jts,jte do k = kts,kte @@ -1291,6 +1297,8 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te re_ice(k,i) = reice_p(i,k,j) re_snow(k,i) = resnow_p(i,k,j) refl10cm(k,i) = refl10cm_p(i,k,j) + qh_size(k,i) = qh_size_p(i,k,j) + qg_size(k,i) = qg_size_p(i,k,j) enddo enddo enddo diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F index be250c34fb..2a0954c27c 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -304,6 +304,8 @@ module mpas_atmphys_vars refl10cm_cu_p ! real(kind=RKIND),dimension(:,:),allocatable:: & refl10cm_1km_p + real(kind=RKIND),dimension(:,:,:),allocatable:: & + qh_size_p, qg_size_p !================================================================================================================= !... variables and arrays related to parameterization of convection: !================================================================================================================= From a55683cba00cd405ac39b5f5b61410bb4254c08e Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 15 Mar 2025 16:30:30 +0000 Subject: [PATCH 19/24] update TEMPO pointer --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 1ad99c82b9..5601a2b0de 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 1ad99c82b9fb67c238cb1995da73fe0166a1e74e +Subproject commit 5601a2b0dec5010759eb8e34986140867cc6b99a From 4cdca69dc859cadb14f686d0987948295153eb7c Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Tue, 18 Mar 2025 20:16:12 +0000 Subject: [PATCH 20/24] Add maximum hail size diagnostics for TEMPO --- src/core_atmosphere/Registry.xml | 18 ++++++++ src/core_atmosphere/mpas_atm_core.F | 6 ++- src/core_atmosphere/physics/TEMPO | 2 +- .../mpas_atmphys_driver_microphysics.F | 43 ++++++++++++++++++- .../physics/mpas_atmphys_interface.F | 19 ++++++++ .../physics/mpas_atmphys_vars.F | 2 + 6 files changed, 87 insertions(+), 3 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 83d2adfb4a..58147e8527 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -661,6 +661,9 @@ + + + @@ -1122,6 +1125,9 @@ + + + @@ -2713,6 +2719,18 @@ description="10 cm radar reflectivity" packages="mp_thompson_in;mp_wsm6_in;mp_nssl2m_in;mp_tempo_in"/> + + + + + + diff --git a/src/core_atmosphere/mpas_atm_core.F b/src/core_atmosphere/mpas_atm_core.F index 313c593726..b3f0d32827 100644 --- a/src/core_atmosphere/mpas_atm_core.F +++ b/src/core_atmosphere/mpas_atm_core.F @@ -953,13 +953,17 @@ subroutine atm_reset_diagnostics(diag_physics) type (mpas_pool_type), pointer :: diag_physics - real (kind=RKIND), dimension(:), pointer :: refl10cm_1km_max + real (kind=RKIND), dimension(:), pointer :: refl10cm_1km_max, max_hail_diameter_sfc_acc #ifdef DO_PHYSICS call mpas_pool_get_array(diag_physics, 'refl10cm_1km_max', refl10cm_1km_max) + call mpas_pool_get_array(diag_physics, 'max_hail_diameter_sfc_acc', max_hail_diameter_sfc_acc) if(associated(refl10cm_1km_max)) then refl10cm_1km_max(:) = 0. endif + if(associated(max_hail_diameter_sfc_acc)) then + max_hail_diameter_sfc_acc(:) = 0. + endif #endif end subroutine atm_reset_diagnostics diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 1881bafcb1..bbbf95aa65 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 1881bafcb1acc875e15c2215825fce30966ca98e +Subproject commit bbbf95aa656e0479817037fa8f79b5fe052d3712 diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 1916e6a8b2..07af5a21e5 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -196,6 +196,8 @@ subroutine allocate_microphysics(configs) if(.not.allocated(refl10cm_p) ) allocate(refl10cm_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(refl10cm_1km_p) ) allocate(refl10cm_1km_p(ims:ime,jms:jme) ) if(.not.allocated(frainnc_p) ) allocate(frainnc_p(ims:ime,jms:jme) ) + if(.not.allocated(max_hail_diameter_sfc_p) ) allocate(max_hail_diameter_sfc_p(ims:ime,jms:jme) ) + if(.not.allocated(max_hail_diameter_column_p) ) allocate(max_hail_diameter_column_p(ims:ime,jms:jme) ) ! Allocate TEMPO options based on config flags insead of adding more nested select cases ! These flags are associated with appropriate packages in mpas_atmphys_packages.F @@ -347,6 +349,8 @@ subroutine deallocate_microphysics(configs) if(allocated(refl10cm_p) ) deallocate(refl10cm_p ) if(allocated(refl10cm_1km_p)) deallocate(refl10cm_1km_p) if(allocated(frainnc_p) ) deallocate(frainnc_p) + if(allocated(max_hail_diameter_sfc_p) ) deallocate(max_hail_diameter_sfc_p) + if(allocated(max_hail_diameter_column_p) ) deallocate(max_hail_diameter_column_p) if (config_tempo_hailaware) then if(allocated(ng_p) ) deallocate(ng_p ) @@ -660,6 +664,8 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten has_reqc = has_reqc , has_reqi = has_reqi , has_reqs = has_reqs , & !! ntc = ntc_p , muc = muc_p , & refl_10cm = refl10cm_p , frainnc = frainnc_p , & + max_hail_diameter_sfc = max_hail_diameter_sfc_p , & + max_hail_diameter_column = max_hail_diameter_column_p , & ids = ids , ide = ide , jds = jds , jde = jde , kds = kds , kde = kde , & ims = ims , ime = ime , jms = jms , jme = jme , kms = kms , kme = kme , & its = its , ite = ite , jts = jts , jte = jte , kts = kts , kte = kte & @@ -835,7 +841,12 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten call mpas_log_write(' since WSM6 or Thompson microphysics scheme was not selected') end if endif - + + if(trim(microp_scheme) == "mp_tempo") then + call mpas_log_write('Computing accumulated max hail diameter at the surface') + call compute_accumulated_max_hail(diag_physics,its,ite) + endif + !... copy updated precipitation from the wrf-physics grid back to the geodesic-dynamics grid: call precip_to_MPAS(configs,diag_physics,its,ite) @@ -1365,6 +1376,36 @@ subroutine compute_hourly_max_radar_reflectivity(configs,diag_physics,its,ite) end select microp_select end subroutine compute_hourly_max_radar_reflectivity + +!================================================================================================================= + subroutine compute_accumulated_max_hail(diag_physics,its,ite) +!================================================================================================================= + +!input arguments: + integer,intent(in):: its,ite + +!inout arguments: + type(mpas_pool_type),intent(inout):: diag_physics + +!local pointers: + real(kind=RKIND),dimension(:),pointer:: max_hail_diameter_sfc, max_hail_diameter_sfc_acc + +!local variables and arrays: + integer:: i,j + +!----------------------------------------------------------------------------------------------------------------- + + call mpas_pool_get_array(diag_physics,'max_hail_diameter_sfc',max_hail_diameter_sfc) + call mpas_pool_get_array(diag_physics,'max_hail_diameter_sfc_acc',max_hail_diameter_sfc_acc) + + do j = jts,jte ! Assuming here that jts == jte (2D arrays) + do i = its,ite + max_hail_diameter_sfc_acc(i) = max(max_hail_diameter_sfc_acc(i), max_hail_diameter_sfc_p(i,j)) + enddo + enddo + +end subroutine compute_accumulated_max_hail + !================================================================================================================= subroutine compute_relhum(diag,its,ite) !================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index cbdfed4145..8bbf6b9b22 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -676,6 +676,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: ni,nr,nc,ns,ng,nh,nccn,nwfa,nifa real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm + real(kind=RKIND),dimension(:),pointer :: max_hail_diameter_sfc, max_hail_diameter_column real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten @@ -821,8 +822,16 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, case("mp_tempo") call mpas_pool_get_dimension(state,'index_ni',index_ni) call mpas_pool_get_dimension(state,'index_nr',index_nr) + call mpas_pool_get_array(diag_physics,'max_hail_diameter_sfc' ,max_hail_diameter_sfc) + call mpas_pool_get_array(diag_physics,'max_hail_diameter_column' ,max_hail_diameter_column) ni => scalars(index_ni,:,:) nr => scalars(index_nr,:,:) + do j = jts,jte + do i = its,ite + max_hail_diameter_sfc_p(i,j) = max_hail_diameter_sfc(i) + max_hail_diameter_column_p(i,j) = max_hail_diameter_column(i) + enddo + enddo ! call mpas_pool_get_array(diag_physics,'nt_c',nt_c) ! call mpas_pool_get_array(diag_physics,'mu_c',mu_c) @@ -1134,6 +1143,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te real(kind=RKIND),dimension(:,:),pointer :: ni,nr,nc,ns,ng,nh,nccn,nwfa,nifa real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod,refl10cm + real(kind=RKIND),dimension(:),pointer :: max_hail_diameter_sfc, max_hail_diameter_column real(kind=RKIND),dimension(:,:),pointer :: re_cloud,re_ice,re_snow real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten @@ -1326,6 +1336,15 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo enddo + call mpas_pool_get_array(diag_physics,'max_hail_diameter_sfc' ,max_hail_diameter_sfc) + call mpas_pool_get_array(diag_physics,'max_hail_diameter_column' ,max_hail_diameter_column) + do j = jts,jte + do i = its,ite + max_hail_diameter_sfc(i) = max_hail_diameter_sfc_p(i,j) + max_hail_diameter_column(i) = max_hail_diameter_column_p(i,j) + enddo + enddo + if(config_tempo_aerosolaware) then call mpas_pool_get_dimension(state,'index_nc' ,index_nc ) call mpas_pool_get_dimension(state,'index_nifa',index_nifa) diff --git a/src/core_atmosphere/physics/mpas_atmphys_vars.F b/src/core_atmosphere/physics/mpas_atmphys_vars.F index be250c34fb..7b60fa33e0 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -304,6 +304,8 @@ module mpas_atmphys_vars refl10cm_cu_p ! real(kind=RKIND),dimension(:,:),allocatable:: & refl10cm_1km_p + real(kind=RKIND),dimension(:,:),allocatable:: & + max_hail_diameter_sfc_p, max_hail_diameter_column_p !================================================================================================================= !... variables and arrays related to parameterization of convection: !================================================================================================================= From b2f12651dce4e3587fcf36f5da220dface3d548d Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Wed, 26 Mar 2025 17:04:37 +0000 Subject: [PATCH 21/24] Add binned method to calculate maximum hail size --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index bbbf95aa65..a7ca556e01 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit bbbf95aa656e0479817037fa8f79b5fe052d3712 +Subproject commit a7ca556e01d5c099136787f6e9f980a5813a0c3a From 200cb5aaf44d8468fbff7bb55dcc9bb2b652ab02 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 5 Apr 2025 02:55:15 +0000 Subject: [PATCH 22/24] Add hail option to interface --- src/core_atmosphere/physics/TEMPO | 2 +- src/core_atmosphere/physics/mpas_atmphys_interface.F | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 5601a2b0de..5fbc6b7e48 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 5601a2b0dec5010759eb8e34986140867cc6b99a +Subproject commit 5fbc6b7e48b489de6ccbc1265a4839c2ee77620a diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index beaf16cbd0..66cd4a7d14 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -689,6 +689,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, call mpas_pool_get_config(configs,'config_microp_scheme',mp_scheme) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) + call mpas_pool_get_config(configs,'config_tempo_qh',config_tempo_qh) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) call mpas_pool_get_array(mesh,'zgrid',zgrid) @@ -1167,6 +1168,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_config(configs,'config_microp_scheme',mp_scheme) call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments) call mpas_pool_get_config(configs,'config_tempo_hailaware',config_tempo_hailaware) + call mpas_pool_get_config(configs,'config_tempo_qh',config_tempo_qh) call mpas_pool_get_config(configs,'config_tempo_aerosolaware',config_tempo_aerosolaware) call mpas_pool_get_array(mesh,'zz' ,zz ) From e1884af871416322a23a36c6ba8c5db6d834ec3e Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sat, 5 Apr 2025 03:20:13 +0000 Subject: [PATCH 23/24] Merge in hail diagnostics --- src/core_atmosphere/physics/TEMPO | 2 +- .../physics/mpas_atmphys_driver_microphysics.F | 4 ---- src/core_atmosphere/physics/mpas_atmphys_interface.F | 8 -------- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 5fbc6b7e48..233196ccc6 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 5fbc6b7e48b489de6ccbc1265a4839c2ee77620a +Subproject commit 233196ccc68e9d4f5794289f6cacb21be8fd489e diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 305ed66380..55530fc4ca 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -195,8 +195,6 @@ subroutine allocate_microphysics(configs) if(.not.allocated(ni_p) ) allocate(ni_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(nr_p) ) allocate(nr_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(refl10cm_p) ) allocate(refl10cm_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qh_size_p) ) allocate(qh_size_p(ims:ime,kms:kme,jms:jme) ) - if(.not.allocated(qg_size_p) ) allocate(qg_size_p(ims:ime,kms:kme,jms:jme) ) if(.not.allocated(refl10cm_1km_p) ) allocate(refl10cm_1km_p(ims:ime,jms:jme) ) if(.not.allocated(frainnc_p) ) allocate(frainnc_p(ims:ime,jms:jme) ) if(.not.allocated(max_hail_diameter_sfc_p) ) allocate(max_hail_diameter_sfc_p(ims:ime,jms:jme) ) @@ -354,8 +352,6 @@ subroutine deallocate_microphysics(configs) if(allocated(ni_p) ) deallocate(ni_p ) if(allocated(nr_p) ) deallocate(nr_p ) if(allocated(refl10cm_p) ) deallocate(refl10cm_p ) - if(allocated(qh_size_p) ) deallocate(qh_size_p ) - if(allocated(qg_size_p) ) deallocate(qg_size_p ) if(allocated(refl10cm_1km_p)) deallocate(refl10cm_1km_p) if(allocated(frainnc_p) ) deallocate(frainnc_p) if(allocated(max_hail_diameter_sfc_p) ) deallocate(max_hail_diameter_sfc_p) diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 1b3d4c469e..5d298235ad 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -780,8 +780,6 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) call mpas_pool_get_array(diag_physics,'refl10cm' ,refl10cm ) - call mpas_pool_get_array(diag_physics,'qh_size' ,qh_size ) - call mpas_pool_get_array(diag_physics,'qg_size' ,qg_size ) do j = jts, jte do k = kts, kte @@ -796,8 +794,6 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, reice_p(i,k,j) = re_ice(k,i) resnow_p(i,k,j) = re_snow(k,i) refl10cm_p(i,k,j) = refl10cm(k,i) - qh_size_p(i,k,j) = qh_size(k,i) - qg_size_p(i,k,j) = qg_size(k,i) enddo enddo enddo @@ -1307,8 +1303,6 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te call mpas_pool_get_array(diag_physics,'re_ice' ,re_ice ) call mpas_pool_get_array(diag_physics,'re_snow' ,re_snow ) call mpas_pool_get_array(diag_physics,'refl10cm' ,refl10cm ) - call mpas_pool_get_array(diag_physics,'qh_size' ,qh_size) - call mpas_pool_get_array(diag_physics,'qg_size' ,qg_size) do j = jts,jte do k = kts,kte @@ -1323,8 +1317,6 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te re_ice(k,i) = reice_p(i,k,j) re_snow(k,i) = resnow_p(i,k,j) refl10cm(k,i) = refl10cm_p(i,k,j) - qh_size(k,i) = qh_size_p(i,k,j) - qg_size(k,i) = qg_size_p(i,k,j) enddo enddo enddo From 90b0294d32fd1ac53d37f9ac3c7eab8dae3f3e24 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 9 May 2025 20:57:24 +0000 Subject: [PATCH 24/24] Update point for TEMPO --- src/core_atmosphere/physics/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/TEMPO b/src/core_atmosphere/physics/TEMPO index 233196ccc6..8c8b6809ad 160000 --- a/src/core_atmosphere/physics/TEMPO +++ b/src/core_atmosphere/physics/TEMPO @@ -1 +1 @@ -Subproject commit 233196ccc68e9d4f5794289f6cacb21be8fd489e +Subproject commit 8c8b6809adab6cefa59d021ba2de0a4a0f0f002e