From 38b48a96341d424231ef0b93829eaf3b2717c019 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Thu, 10 Jul 2025 20:07:17 +0000 Subject: [PATCH 01/22] Adds TEMPO cloud fraction control flag and initial variables -- sgs cloud fraction and cloud water --- src/core_atmosphere/Registry.xml | 30 +++++++++++++++++++ .../physics/mpas_atmphys_packages.F | 13 ++++++-- .../physics/mpas_atmphys_vars.F | 5 +++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 312cd857a9..57415f1b52 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -414,6 +414,7 @@ + @@ -1865,6 +1866,14 @@ + + + + #endif @@ -2256,6 +2265,14 @@ + + + + #endif @@ -2355,6 +2372,14 @@ + + + + @@ -2523,6 +2548,11 @@ description="Logical flag to turn on/off prognostic graupel number concentration and rime density" possible_values=".true. or .false."/> + + Date: Fri, 11 Jul 2025 15:28:03 +0000 Subject: [PATCH 02/22] Adds SGS prognostic cloud fraction and water to MPAS interface, microphysics driver, and to TEMPO driver --- .../mpas_atmphys_driver_microphysics.F | 18 ++++++++ .../physics/mpas_atmphys_interface.F | 44 ++++++++++++++++++- .../physics/physics_noaa/TEMPO | 2 +- 3 files changed, 62 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 b8fc9a4d7d..ccf0cab781 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -111,6 +111,7 @@ subroutine allocate_microphysics(configs) character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware logical,pointer:: config_tempo_ml_nc_pbl + logical,pointer:: config_tempo_cldfra !----------------------------------------------------------------------------------------------------------------- call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme) @@ -118,6 +119,7 @@ subroutine allocate_microphysics(configs) 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_ml_nc_pbl',config_tempo_ml_nc_pbl) + call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra) !sounding variables: if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) ) @@ -223,6 +225,11 @@ subroutine allocate_microphysics(configs) if(.not.allocated(volg_p)) allocate(volg_p(ims:ime,kms:kme,jms:jme)) endif + if (config_tempo_cldfra) then + if(.not.allocated(qasgs_p)) allocate(qasgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qcsgs_p)) allocate(qcsgs_p(ims:ime,kms:kme,jms:jme)) + endif + if (config_tempo_ml_nc_pbl) then if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) @@ -275,6 +282,7 @@ subroutine deallocate_microphysics(configs) character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware logical,pointer:: config_tempo_ml_nc_pbl + logical,pointer:: config_tempo_cldfra !----------------------------------------------------------------------------------------------------------------- @@ -283,6 +291,7 @@ subroutine deallocate_microphysics(configs) 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_ml_nc_pbl',config_tempo_ml_nc_pbl) + call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra) !sounding variables: if(allocated(rho_p) ) deallocate(rho_p ) @@ -386,6 +395,11 @@ subroutine deallocate_microphysics(configs) if(allocated(volg_p) ) deallocate(volg_p ) endif + if (config_tempo_cldfra) then + if(allocated(qasgs_p)) deallocate(qasgs_p) + if(allocated(qcsgs_p)) deallocate(qcsgs_p) + endif + if (config_tempo_ml_nc_pbl) then if(allocated(cldfrac_p) ) deallocate(cldfrac_p) if(allocated(qcbl_p) ) deallocate(qcbl_p) @@ -607,6 +621,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , & !! ng = ng_p , qb = volg_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -629,6 +644,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , & !! ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -652,6 +668,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & ng = ng_p , qb = volg_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & pii = pi_p , p = pres_p , dz = dz_p , & @@ -679,6 +696,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , & pii = pi_p , p = pres_p , dz = dz_p , & w = w_p , dt_in = dt_microp , itimestep = itimestep , & rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , & diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 35d577efab..79cf7c9c8d 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -665,17 +665,20 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware logical,pointer:: config_tempo_ml_nc_pbl + logical,pointer:: config_tempo_cldfra integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw integer,pointer:: index_ns,index_ng,index_nh,index_nccn integer,pointer:: index_volg,index_volh - + integer,pointer:: index_qasgs, index_qcsgs + real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b real(kind=RKIND),dimension(:,:),pointer :: rho_zz,theta_m,pressure_p real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa + real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod @@ -697,6 +700,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, 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_ml_nc_pbl',config_tempo_ml_nc_pbl) + call mpas_pool_get_config(configs,'config_tempo_cldfra',config_tempo_cldfra) call mpas_pool_get_array(mesh,'zgrid',zgrid) call mpas_pool_get_array(mesh,'zz' ,zz ) @@ -943,6 +947,23 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, enddo endif + if (config_tempo_cldfra) then + call mpas_pool_get_dimension(state,'index_qasgs' ,index_qasgs ) + call mpas_pool_get_dimension(state,'index_qcsgs' ,index_qcsgs ) + + qa_sgs => scalars(index_qasgs,:,:) + qc_sgs => scalars(index_qcsgs,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qasgs_p(i,k,j) = qa_sgs(k,i) + qcsgs_p(i,k,j) = qc_sgs(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) @@ -1151,8 +1172,10 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te character(len=StrKIND),pointer:: mp_scheme character(len=StrKIND),pointer:: nssl_moments logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware + logical,pointer:: config_tempo_cldfra 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 + integer,pointer:: index_qasgs, index_qcsgs !TEMPO/NSSL integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -1169,6 +1192,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 real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa + real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:) ,pointer :: max_hail_diameter_sfc, max_hail_diameter_column @@ -1189,6 +1213,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te 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_cldfra',config_tempo_cldfra) call mpas_pool_get_array(mesh,'zz' ,zz ) call mpas_pool_get_array(mesh,'zgrid',zgrid) @@ -1449,6 +1474,23 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te enddo endif + if (config_tempo_cldfra) then + call mpas_pool_get_dimension(state,'index_qasgs' ,index_qasgs ) + call mpas_pool_get_dimension(state,'index_qcsgs' ,index_qcsgs ) + + qa_sgs => scalars(index_qasgs,:,:) + qc_sgs => scalars(index_qcsgs,:,:) + + do j = jts, jte + do k = kts, kte + do i = its, ite + qa_sgs(k,i) = qasgs_p(i,k,j) + qc_sgs(k,i) = qcsgs_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/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 1ddf4e2030..27247b670a 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 1ddf4e20303412bff68e380a516cf33d0f023140 +Subproject commit 27247b670adad82a80320f31ba5b07b9aa61fe26 From a41b88ff6f3a7ef303b062dd7d81c19cf9d7f03d Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 11 Jul 2025 15:48:22 +0000 Subject: [PATCH 03/22] Adds cloud fraction module to TEMPO --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 27247b670a..3a4bf5a878 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 27247b670adad82a80320f31ba5b07b9aa61fe26 +Subproject commit 3a4bf5a878dbe75a93fcb6bd442051fe0baa346c From 531dc29857167fd63f8b274711b3e82613377dbc Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 11 Jul 2025 20:38:01 +0000 Subject: [PATCH 04/22] Fix cloud fraction scalar index names --- .../physics/mpas_atmphys_interface.F | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 79cf7c9c8d..75987d0bd6 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -670,7 +670,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, integer,pointer:: index_zrw,index_zgw,index_zhw integer,pointer:: index_ns,index_ng,index_nh,index_nccn integer,pointer:: index_volg,index_volh - integer,pointer:: index_qasgs, index_qcsgs + integer,pointer:: index_qa_sgs, index_qc_sgs real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b @@ -948,11 +948,11 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qasgs' ,index_qasgs ) - call mpas_pool_get_dimension(state,'index_qcsgs' ,index_qcsgs ) + call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) + call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) - qa_sgs => scalars(index_qasgs,:,:) - qc_sgs => scalars(index_qcsgs,:,:) + qa_sgs => scalars(index_qa_sgs,:,:) + qc_sgs => scalars(index_qc_sgs,:,:) do j = jts, jte do k = kts, kte @@ -1175,7 +1175,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te logical,pointer:: config_tempo_cldfra 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 - integer,pointer:: index_qasgs, index_qcsgs + integer,pointer:: index_qa_sgs, index_qc_sgs !TEMPO/NSSL integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -1475,11 +1475,11 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qasgs' ,index_qasgs ) - call mpas_pool_get_dimension(state,'index_qcsgs' ,index_qcsgs ) + call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) + call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) - qa_sgs => scalars(index_qasgs,:,:) - qc_sgs => scalars(index_qcsgs,:,:) + qa_sgs => scalars(index_qa_sgs,:,:) + qc_sgs => scalars(index_qc_sgs,:,:) do j = jts, jte do k = kts, kte From c24a70931b7e52d7a841c71fd6897296b8a9661b Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 11 Jul 2025 20:38:36 +0000 Subject: [PATCH 05/22] Intial version of cloud fraction scheme for testing: creates sgs cloud water and cloud fraction --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 3a4bf5a878..84b4551746 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 3a4bf5a878dbe75a93fcb6bd442051fe0baa346c +Subproject commit 84b455174680f59a8a68353c310add96dc42c956 From 609d1d3696315d7fb42ef541caa98131b9cffeac Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Fri, 11 Jul 2025 21:52:57 +0000 Subject: [PATCH 06/22] Cloud fraction module with large-scale evolution and erosion --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 84b4551746..754d930a82 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 84b455174680f59a8a68353c310add96dc42c956 +Subproject commit 754d930a82b9ef49162d6449e6c9353691b459bd From b2b0550d8310b4eb42670b9af000ca6524679287 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Sun, 13 Jul 2025 13:02:54 +0000 Subject: [PATCH 07/22] Cloud fraction tuning and addition of in-cloud calculations for qr --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 754d930a82..0f16a688c3 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 754d930a82b9ef49162d6449e6c9353691b459bd +Subproject commit 0f16a688c356655d37ea284b5c5f04628bee0ce5 From d44d9f10cc66d5ece4c4e80aa8fa646ab259d78e Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 14 Jul 2025 17:24:03 +0000 Subject: [PATCH 08/22] Adds qi_sgs, sgs cloud ice --- src/core_atmosphere/Registry.xml | 14 +++++++++++++- .../physics/mpas_atmphys_driver_microphysics.F | 10 ++++++---- .../physics/mpas_atmphys_interface.F | 14 ++++++++++---- src/core_atmosphere/physics/mpas_atmphys_vars.F | 2 +- 4 files changed, 30 insertions(+), 10 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 57415f1b52..838ea7b48c 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1874,6 +1874,10 @@ + + #endif @@ -2271,7 +2275,11 @@ packages="tempo_cldfra_in"/> + + #endif @@ -2380,6 +2388,10 @@ + + diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index ccf0cab781..a723967dea 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -228,6 +228,7 @@ subroutine allocate_microphysics(configs) if (config_tempo_cldfra) then if(.not.allocated(qasgs_p)) allocate(qasgs_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(qcsgs_p)) allocate(qcsgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qisgs_p)) allocate(qisgs_p(ims:ime,kms:kme,jms:jme)) endif if (config_tempo_ml_nc_pbl) then @@ -398,6 +399,7 @@ subroutine deallocate_microphysics(configs) if (config_tempo_cldfra) then if(allocated(qasgs_p)) deallocate(qasgs_p) if(allocated(qcsgs_p)) deallocate(qcsgs_p) + if(allocated(qisgs_p)) deallocate(qisgs_p) endif if (config_tempo_ml_nc_pbl) then @@ -621,7 +623,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & !! ng = ng_p , qb = volg_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -644,7 +646,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & !! ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -668,7 +670,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & ng = ng_p , qb = volg_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & pii = pi_p , p = pres_p , dz = dz_p , & @@ -696,7 +698,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , & + qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & pii = pi_p , p = pres_p , dz = dz_p , & w = w_p , dt_in = dt_microp , itimestep = itimestep , & rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , & diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 75987d0bd6..c88ff50db1 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -670,7 +670,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, integer,pointer:: index_zrw,index_zgw,index_zhw integer,pointer:: index_ns,index_ng,index_nh,index_nccn integer,pointer:: index_volg,index_volh - integer,pointer:: index_qa_sgs, index_qc_sgs + integer,pointer:: index_qa_sgs, index_qc_sgs, index_qi_sgs real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b @@ -678,7 +678,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs + real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs, qi_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod @@ -950,15 +950,18 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, if (config_tempo_cldfra) then call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) + call mpas_pool_get_dimension(state,'index_qi_sgs' ,index_qi_sgs ) qa_sgs => scalars(index_qa_sgs,:,:) qc_sgs => scalars(index_qc_sgs,:,:) + qi_sgs => scalars(index_qi_sgs,:,:) do j = jts, jte do k = kts, kte do i = its, ite qasgs_p(i,k,j) = qa_sgs(k,i) qcsgs_p(i,k,j) = qc_sgs(k,i) + qisgs_p(i,k,j) = qi_sgs(k,i) enddo enddo enddo @@ -1175,7 +1178,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te logical,pointer:: config_tempo_cldfra 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 - integer,pointer:: index_qa_sgs, index_qc_sgs + integer,pointer:: index_qa_sgs, index_qc_sgs, index_qi_sgs !TEMPO/NSSL integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -1192,7 +1195,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 real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs + real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs, qi_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:) ,pointer :: max_hail_diameter_sfc, max_hail_diameter_column @@ -1477,15 +1480,18 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te if (config_tempo_cldfra) then call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) + call mpas_pool_get_dimension(state,'index_qi_sgs' ,index_qi_sgs ) qa_sgs => scalars(index_qa_sgs,:,:) qc_sgs => scalars(index_qc_sgs,:,:) + qi_sgs => scalars(index_qi_sgs,:,:) do j = jts, jte do k = kts, kte do i = its, ite qa_sgs(k,i) = qasgs_p(i,k,j) qc_sgs(k,i) = qcsgs_p(i,k,j) + qi_sgs(k,i) = qisgs_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 7d7e402014..d62fb7ad71 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -221,7 +221,7 @@ module mpas_atmphys_vars nifa2d_p real(kind=RKIND),dimension(:,:,:),allocatable:: & - qasgs_p, qcsgs_p + qasgs_p, qcsgs_p, qisgs_p !... arrays located at w (vertical velocity) points, or at interface between layers: real(kind=RKIND),dimension(:,:,:),allocatable:: & From ce48a4fafd5324d29e5c9b0bd87631f03e1eb0a1 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 14 Jul 2025 17:30:24 +0000 Subject: [PATCH 09/22] Adds full hookup of sgs cloud water, ice, rain, snow --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 0f16a688c3..76d7e92b02 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 0f16a688c356655d37ea284b5c5f04628bee0ce5 +Subproject commit 76d7e92b024095faaabe3ce5e6c79ed66c85f9aa From ae12a471c6dda11edd0379052c5b0315723d0ff2 Mon Sep 17 00:00:00 2001 From: Anders Jensen Date: Mon, 14 Jul 2025 19:19:20 +0000 Subject: [PATCH 10/22] Adds connection between TEMPO cloud fraction and radiation --- src/core_atmosphere/Registry.xml | 2 +- .../physics/mpas_atmphys_control.F | 11 +++ .../physics/mpas_atmphys_driver.F | 2 +- .../physics/mpas_atmphys_driver_cloudiness.F | 82 ++++++++++++++++++- 4 files changed, 92 insertions(+), 5 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 838ea7b48c..36c820d46c 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -2633,7 +2633,7 @@ + possible_values="`suite',`cld_fraction',`cld_incidence',`cld_fraction_thompson',`cld_fraction_mynn',`cld_tempo'"/> scalars(index_qa_sgs,:,:) + qcsgs => scalars(index_qc_sgs,:,:) + qisgs => scalars(index_qi_sgs,:,:) + do j = jts,jte + do k = kts,kte + do i = its,ite + qasgs_p(i,k,j) = qasgs(k,i) + cldfrac_p(i,k,j) = qasgs(k,i) + qcsgs_p(i,k,j) = qcsgs(k,i) + qisgs_p(i,k,j) = qisgs(k,i) + enddo + enddo + enddo case default end select cld_fraction_select @@ -288,12 +322,13 @@ subroutine cloudiness_to_MPAS(diag_physics,its,ite) end subroutine cloudiness_to_MPAS !================================================================================================================= - subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,ite) + subroutine driver_cloudiness(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite) !================================================================================================================= !input arguments: type(mpas_pool_type),intent(in) :: configs type(mpas_pool_type),intent(in) :: mesh + type(mpas_pool_type),intent(in) :: state type(mpas_pool_type),intent(in) :: sfc_input integer,intent(in):: its,ite @@ -316,7 +351,7 @@ subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,i call mpas_pool_get_config(configs,'config_convection_scheme',convection_scheme) !copy MPAS arrays to local arrays: - call cloudiness_from_MPAS(itimestep,configs,mesh,diag_physics,sfc_input,its,ite) + call cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_input,its,ite) cld_fraction_select: select case (trim(radt_cld_scheme)) case("cld_incidence") @@ -349,6 +384,12 @@ subroutine driver_cloudiness(itimestep,configs,mesh,diag_physics,sfc_input,its,i its, ite , jts , jte , kts , kte ) call mpas_timer_stop('cal_mynncld') + case("cld_tempo") + call mpas_timer_start('cal_cldfra_tempo') + call cal_cldfra_tempo(qasgs_p , qcrad_p , qirad_p , & + qcsgs_p , qisgs_p , & + its, ite , jts , jte , kts , kte ) + call mpas_timer_stop('cal_cldfra_tempo') case default end select cld_fraction_select @@ -573,6 +614,41 @@ subroutine cal_gflcld(cldfrac,qc,qi,qc_cu,qi_cu,its,ite,jts,jte,kts,kte) enddo end subroutine cal_gflcld +!================================================================================================================= +!================================================================================================================= + subroutine cal_cldfra_tempo(cldfrac,qc,qi,qc_sgs,qi_sgs,its,ite,jts,jte,kts,kte) +!================================================================================================================= + +!input arguments: + integer,intent(in):: its,ite,jts,jte,kts,kte + real(kind=RKIND),intent(inout),dimension(ims:ime,kms:kme,jms:jme):: qc,qi + real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: qc_sgs,qi_sgs + real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: cldfrac + +!local variables: + integer:: i,j,k + + real(kind=RKIND),parameter:: qc_thresh = 1.e-06 + real(kind=RKIND),parameter:: qi_thresh = 1.e-09 + real(kind=RKIND),parameter:: cld_thresh = 1.e-03 + + do j = jts,jte + do k = kts,kte + do i = its,ite + + if (qc(i,k,j) < qc_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN + !call mpas_log_write("Adding in cldfra_bl to qc at $i,$i,$i", intArgs=(/i,j,k/)) + qc(i,k,j)=qc(i,k,j) + qc_sgs(i,k,j) + endif + if (qi(i,k,j) < qi_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN + !call mpas_log_write("Adding in cldfra_bl to qi at $i,$i,$i", intArgs=(/i,j,k/)) + qi(i,k,j)=qi(i,k,j) + qi_sgs(i,k,j) + endif + enddo + enddo + enddo + + end subroutine cal_cldfra_tempo !================================================================================================================= end module mpas_atmphys_driver_cloudiness !================================================================================================================= From 84e925ec374bc443aa20e361a24635003b6e32e9 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Sun, 10 Aug 2025 18:46:41 +0000 Subject: [PATCH 11/22] refactored cloud fraction / separate liquid and ice --- src/core_atmosphere/Registry.xml | 42 +++++-------- .../physics/mpas_atmphys_control.F | 9 ++- .../physics/mpas_atmphys_driver_cloudiness.F | 49 +++++++-------- .../mpas_atmphys_driver_microphysics.F | 38 +++++++++--- .../physics/mpas_atmphys_interface.F | 62 ++++++++++++------- .../physics/mpas_atmphys_vars.F | 2 +- .../physics/physics_noaa/TEMPO | 2 +- 7 files changed, 112 insertions(+), 92 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 36c820d46c..6fdb9926bc 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1867,17 +1867,13 @@ description="Water-friendly aerosol number concentration" packages="mp_thompson_aers_in;tempo_aerosolaware_in"/> - - - - + #endif @@ -2270,17 +2266,13 @@ description="Tendency of water-friendly aerosol number concentration multiplied by dry air density divided by d(zeta)/dz" packages="mp_thompson_aers_in;tempo_aerosolaware_in"/> - - - - + #endif @@ -2381,17 +2373,13 @@ units="m^{-3} s^{-1}" description="Lateral boundary tendency of water-friendly aerosol number concentration"/> - - - + description="Lateral boundary tendency of sgs prognostic cloud liquid fraction"/> - + diff --git a/src/core_atmosphere/physics/mpas_atmphys_control.F b/src/core_atmosphere/physics/mpas_atmphys_control.F index 32ce44969a..5e85a0ceb0 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_control.F +++ b/src/core_atmosphere/physics/mpas_atmphys_control.F @@ -108,7 +108,7 @@ subroutine physics_namelist_check(configs) config_sfclayer_scheme logical,pointer:: config_tempo_cldfra - + integer,pointer:: config_mynn_cloudpdf !----------------------------------------------------------------------------------------------------------------- !call mpas_log_write('') !call mpas_log_write('--- enter subroutine physics_namelist_check:') @@ -124,6 +124,7 @@ subroutine physics_namelist_check(configs) call mpas_pool_get_config(configs,'config_radt_sw_scheme' ,config_radt_sw_scheme ) call mpas_pool_get_config(configs,'config_sfclayer_scheme' ,config_sfclayer_scheme ) call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra ) + call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf ) call mpas_log_write('') call mpas_log_write('----- Setting up physics suite '''//trim(config_physics_suite)//''' -----') @@ -303,6 +304,12 @@ subroutine physics_namelist_check(configs) ' setting cloud fraction to config_radt_cld_scheme = cld_tempo' call physics_message(mpas_err_message) config_radt_cld_scheme = "cld_tempo" + if ((config_pbl_scheme == 'bl_mynn') .and. (config_mynn_cloudpdf .ge. 0)) then + write(mpas_err_message,'(A,A20)') & + ' setting config_mynn_cloudpdf to -2 when using tempo prognostic clouds' + call physics_message(mpas_err_message) + config_mynn_cloudpdf = -2 + endif endif !surface-layer scheme: diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F index ea14e5dccb..cf53e2e99a 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F @@ -88,9 +88,8 @@ subroutine allocate_cloudiness(configs) if(.not.allocated(qcbl_p)) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) case("cld_tempo") - if(.not.allocated(qasgs_p)) allocate(qasgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qcsgs_p)) allocate(qcsgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qisgs_p)) allocate(qisgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qalsgs_p)) allocate(qalsgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qaisgs_p)) allocate(qaisgs_p(ims:ime,kms:kme,jms:jme)) case default end select cld_fraction_select @@ -131,9 +130,8 @@ subroutine deallocate_cloudiness(configs) if(allocated(qcbl_p)) deallocate(qcbl_p) case("cld_tempo") - if(allocated(qasgs_p)) deallocate(qasgs_p) - if(allocated(qcsgs_p)) deallocate(qcsgs_p) - if(allocated(qisgs_p)) deallocate(qisgs_p) + if(allocated(qalsgs_p)) deallocate(qalsgs_p) + if(allocated(qaisgs_p)) deallocate(qaisgs_p) case default end select cld_fraction_select @@ -175,9 +173,9 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in character(len=StrKIND),pointer:: radt_cld_scheme character(len=StrKIND),pointer:: convection_scheme - integer,pointer:: index_qa_sgs, index_qc_sgs, index_qi_sgs + integer,pointer:: index_qal_sgs, index_qai_sgs real(kind=RKIND),dimension(:,:,:),pointer:: scalars - real(kind=RKIND),dimension(:,:),pointer:: qasgs, qcsgs, qisgs + real(kind=RKIND),dimension(:,:),pointer:: qalsgs, qaisgs !----------------------------------------------------------------------------------------------------------------- @@ -252,20 +250,17 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in case("cld_tempo") call mpas_pool_get_array(state,'scalars',scalars) - call mpas_pool_get_dimension(state,'index_qa_sgs',index_qa_sgs) - call mpas_pool_get_dimension(state,'index_qc_sgs',index_qc_sgs) - call mpas_pool_get_dimension(state,'index_qi_sgs',index_qi_sgs) + call mpas_pool_get_dimension(state,'index_qal_sgs',index_qal_sgs) + call mpas_pool_get_dimension(state,'index_qai_sgs',index_qai_sgs) - qasgs => scalars(index_qa_sgs,:,:) - qcsgs => scalars(index_qc_sgs,:,:) - qisgs => scalars(index_qi_sgs,:,:) + qalsgs => scalars(index_qal_sgs,:,:) + qaisgs => scalars(index_qai_sgs,:,:) do j = jts,jte do k = kts,kte do i = its,ite - qasgs_p(i,k,j) = qasgs(k,i) - cldfrac_p(i,k,j) = qasgs(k,i) - qcsgs_p(i,k,j) = qcsgs(k,i) - qisgs_p(i,k,j) = qisgs(k,i) + qalsgs_p(i,k,j) = qalsgs(k,i) + qaisgs_p(i,k,j) = qaisgs(k,i) + cldfrac_p(i,k,j) = max(qalsgs(k,i), qaisgs(k,i)) enddo enddo enddo @@ -386,8 +381,7 @@ subroutine driver_cloudiness(itimestep,configs,mesh,state,diag_physics,sfc_input case("cld_tempo") call mpas_timer_start('cal_cldfra_tempo') - call cal_cldfra_tempo(qasgs_p , qcrad_p , qirad_p , & - qcsgs_p , qisgs_p , & + call cal_cldfra_tempo(qalsgs_p , qaisgs_p, qcrad_p , qirad_p , & its, ite , jts , jte , kts , kte ) call mpas_timer_stop('cal_cldfra_tempo') case default @@ -616,33 +610,32 @@ subroutine cal_gflcld(cldfrac,qc,qi,qc_cu,qi_cu,its,ite,jts,jte,kts,kte) end subroutine cal_gflcld !================================================================================================================= !================================================================================================================= - subroutine cal_cldfra_tempo(cldfrac,qc,qi,qc_sgs,qi_sgs,its,ite,jts,jte,kts,kte) + subroutine cal_cldfra_tempo(cldfracl,cldfraci,qc,qi,its,ite,jts,jte,kts,kte) !================================================================================================================= !input arguments: integer,intent(in):: its,ite,jts,jte,kts,kte real(kind=RKIND),intent(inout),dimension(ims:ime,kms:kme,jms:jme):: qc,qi - real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: qc_sgs,qi_sgs - real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: cldfrac + real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: cldfracl, cldfraci !local variables: integer:: i,j,k real(kind=RKIND),parameter:: qc_thresh = 1.e-06 real(kind=RKIND),parameter:: qi_thresh = 1.e-09 - real(kind=RKIND),parameter:: cld_thresh = 1.e-03 + real(kind=RKIND),parameter:: cld_thresh = 1.e-02 do j = jts,jte do k = kts,kte do i = its,ite - if (qc(i,k,j) < qc_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN + if (qc(i,k,j) < qc_thresh .AND. cldfracl(i,k,j) > cld_thresh) THEN !call mpas_log_write("Adding in cldfra_bl to qc at $i,$i,$i", intArgs=(/i,j,k/)) - qc(i,k,j)=qc(i,k,j) + qc_sgs(i,k,j) + qc(i,k,j)=qc(i,k,j) endif - if (qi(i,k,j) < qi_thresh .AND. cldfrac(i,k,j) > cld_thresh) THEN + if (qi(i,k,j) < qi_thresh .AND. cldfraci(i,k,j) > cld_thresh) THEN !call mpas_log_write("Adding in cldfra_bl to qi at $i,$i,$i", intArgs=(/i,j,k/)) - qi(i,k,j)=qi(i,k,j) + qi_sgs(i,k,j) + qi(i,k,j)=qi(i,k,j) endif enddo enddo diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index a723967dea..7e3e743f62 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -226,9 +226,17 @@ subroutine allocate_microphysics(configs) endif if (config_tempo_cldfra) then - if(.not.allocated(qasgs_p)) allocate(qasgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qcsgs_p)) allocate(qcsgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qisgs_p)) allocate(qisgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qalsgs_p)) allocate(qalsgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qaisgs_p)) allocate(qaisgs_p(ims:ime,kms:kme,jms:jme)) + + if(.not.allocated(rthblten_p)) allocate(rthblten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rqvblten_p)) allocate(rqvblten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rqcblten_p)) allocate(rqcblten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rqiblten_p)) allocate(rqiblten_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rthratenlw_p)) allocate(rthratenlw_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rthratensw_p)) allocate(rthratensw_p(ims:ime,kms:kme,jms:jme)) +! if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme)) +! if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) endif if (config_tempo_ml_nc_pbl) then @@ -397,9 +405,17 @@ subroutine deallocate_microphysics(configs) endif if (config_tempo_cldfra) then - if(allocated(qasgs_p)) deallocate(qasgs_p) - if(allocated(qcsgs_p)) deallocate(qcsgs_p) - if(allocated(qisgs_p)) deallocate(qisgs_p) + if(allocated(qalsgs_p)) deallocate(qalsgs_p) + if(allocated(qaisgs_p)) deallocate(qaisgs_p) + + if(allocated(rthblten_p)) deallocate(rthblten_p) + if(allocated(rqvblten_p)) deallocate(rqvblten_p) + if(allocated(rqcblten_p)) deallocate(rqcblten_p) + if(allocated(rqiblten_p)) deallocate(rqiblten_p) + if(allocated(rthratenlw_p)) deallocate(rthratenlw_p) + if(allocated(rthratensw_p)) deallocate(rthratensw_p) +! if(allocated(cldfrac_p) ) deallocate(cldfrac_p) +! if(allocated(qcbl_p) ) deallocate(qcbl_p) endif if (config_tempo_ml_nc_pbl) then @@ -623,7 +639,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & + qalsgs = qalsgs_p , qaisgs = qaisgs_p , & !! ng = ng_p , qb = volg_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -646,7 +662,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & + qalsgs = qalsgs_p , qaisgs = qaisgs_p , & !! ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -670,7 +686,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & ng = ng_p , qb = volg_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & + qalsgs = qalsgs_p , qaisgs = qaisgs_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & pii = pi_p , p = pres_p , dz = dz_p , & @@ -698,7 +714,9 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & - qasgs = qasgs_p , qcsgs = qcsgs_p , qisgs = qisgs_p , & + qalsgs = qalsgs_p , qaisgs = qaisgs_p , & + rthbl = rthblten_p, rqvbl = rqvblten_p, rqcbl = rqcblten_p, rqibl = rqiblten_p , & + rthlw = rthratenlw_p, rthsw = rthratensw_p , & pii = pi_p , p = pres_p , dz = dz_p , & w = w_p , dt_in = dt_microp , itimestep = itimestep , & rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , & diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index c88ff50db1..4b10aa1496 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -670,7 +670,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, integer,pointer:: index_zrw,index_zgw,index_zhw integer,pointer:: index_ns,index_ng,index_nh,index_nccn integer,pointer:: index_volg,index_volh - integer,pointer:: index_qa_sgs, index_qc_sgs, index_qi_sgs + integer,pointer:: index_qal_sgs, index_qai_sgs real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b @@ -678,7 +678,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs, qi_sgs + real(kind=RKIND),dimension(:,:),pointer :: qal_sgs, qai_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod @@ -688,6 +688,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: qc_bl, cldfrac_bl real(kind=RKIND),dimension(:,:),pointer :: rthmpten,rqvmpten,rqcmpten,rqrmpten,rqimpten,rqsmpten,rqgmpten real(kind=RKIND),dimension(:,:),pointer :: rncmpten,rnimpten,rnrmpten,rnifampten,rnwfampten + real(kind=RKIND),dimension(:,:),pointer :: rthblten, rqvblten, rqcblten, rqiblten, rthratenlw, rthratensw real(kind=RKIND),dimension(:,:,:),pointer:: scalars !local variables: @@ -948,20 +949,36 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) - call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) - call mpas_pool_get_dimension(state,'index_qi_sgs' ,index_qi_sgs ) - - qa_sgs => scalars(index_qa_sgs,:,:) - qc_sgs => scalars(index_qc_sgs,:,:) - qi_sgs => scalars(index_qi_sgs,:,:) + call mpas_pool_get_dimension(state,'index_qal_sgs' ,index_qal_sgs ) + call mpas_pool_get_dimension(state,'index_qai_sgs' ,index_qai_sgs ) + + call mpas_pool_get_array(tend_physics,'rthblten',rthblten) + call mpas_pool_get_array(tend_physics,'rqvblten',rqvblten) + call mpas_pool_get_array(tend_physics,'rqcblten',rqcblten) + call mpas_pool_get_array(tend_physics,'rqiblten',rqiblten) + call mpas_pool_get_array(tend_physics,'rthratenlw',rthratenlw) + call mpas_pool_get_array(tend_physics,'rthratensw',rthratensw) + +! call mpas_pool_get_array(diag_physics,'qc_bl',qc_bl) +! call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl) + + qal_sgs => scalars(index_qal_sgs,:,:) + qai_sgs => scalars(index_qai_sgs,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qasgs_p(i,k,j) = qa_sgs(k,i) - qcsgs_p(i,k,j) = qc_sgs(k,i) - qisgs_p(i,k,j) = qi_sgs(k,i) + qalsgs_p(i,k,j) = qal_sgs(k,i) + qaisgs_p(i,k,j) = qai_sgs(k,i) + + rthblten_p(i,k,j) = rthblten(k,i) + rqvblten_p(i,k,j) = rqvblten(k,i) + rqcblten_p(i,k,j) = rqcblten(k,i) + rqiblten_p(i,k,j) = rqiblten(k,i) + rthratenlw_p(i,k,j) = rthratenlw(k,i) + rthratensw_p(i,k,j) = rthratensw(k,i) +! qcbl_p(i,k,j) = qc_bl(k,i) +! cldfrac_p(i,k,j) = cldfrac_bl(k,i) enddo enddo enddo @@ -1178,7 +1195,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te logical,pointer:: config_tempo_cldfra 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 - integer,pointer:: index_qa_sgs, index_qc_sgs, index_qi_sgs + integer,pointer:: index_qal_sgs, index_qai_sgs !TEMPO/NSSL integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -1195,7 +1212,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 real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qa_sgs, qc_sgs, qi_sgs + real(kind=RKIND),dimension(:,:),pointer :: qal_sgs, qai_sgs real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:) ,pointer :: max_hail_diameter_sfc, max_hail_diameter_column @@ -1478,20 +1495,17 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qa_sgs' ,index_qa_sgs ) - call mpas_pool_get_dimension(state,'index_qc_sgs' ,index_qc_sgs ) - call mpas_pool_get_dimension(state,'index_qi_sgs' ,index_qi_sgs ) - - qa_sgs => scalars(index_qa_sgs,:,:) - qc_sgs => scalars(index_qc_sgs,:,:) - qi_sgs => scalars(index_qi_sgs,:,:) + call mpas_pool_get_dimension(state,'index_qal_sgs' ,index_qal_sgs ) + call mpas_pool_get_dimension(state,'index_qai_sgs' ,index_qai_sgs ) + + qal_sgs => scalars(index_qal_sgs,:,:) + qai_sgs => scalars(index_qai_sgs,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qa_sgs(k,i) = qasgs_p(i,k,j) - qc_sgs(k,i) = qcsgs_p(i,k,j) - qi_sgs(k,i) = qisgs_p(i,k,j) + qal_sgs(k,i) = qalsgs_p(i,k,j) + qai_sgs(k,i) = qaisgs_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 d62fb7ad71..d553711b92 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -221,7 +221,7 @@ module mpas_atmphys_vars nifa2d_p real(kind=RKIND),dimension(:,:,:),allocatable:: & - qasgs_p, qcsgs_p, qisgs_p + qalsgs_p, qaisgs_p !... arrays located at w (vertical velocity) points, or at interface between layers: real(kind=RKIND),dimension(:,:,:),allocatable:: & diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 76d7e92b02..e1e6770ecf 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 76d7e92b024095faaabe3ce5e6c79ed66c85f9aa +Subproject commit e1e6770ecf0f645774bd07702d4e873693ae4006 From 92beb5140081514488eddc6750c2caf4016660ca Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Fri, 15 Aug 2025 16:49:12 +0000 Subject: [PATCH 12/22] Final refactor --- src/core_atmosphere/Registry.xml | 29 +++++---- .../physics/mpas_atmphys_control.F | 2 +- .../physics/mpas_atmphys_driver_cloudiness.F | 65 ++++--------------- .../mpas_atmphys_driver_microphysics.F | 26 ++++---- .../physics/mpas_atmphys_interface.F | 47 +++++++------- .../physics/mpas_atmphys_vars.F | 2 +- 6 files changed, 70 insertions(+), 101 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 6fdb9926bc..3c58cf223b 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -1867,12 +1867,12 @@ description="Water-friendly aerosol number concentration" packages="mp_thompson_aers_in;tempo_aerosolaware_in"/> - - #endif @@ -2266,13 +2266,13 @@ description="Tendency of water-friendly aerosol number concentration multiplied by dry air density divided by d(zeta)/dz" packages="mp_thompson_aers_in;tempo_aerosolaware_in"/> - - + #endif @@ -2373,13 +2373,13 @@ units="m^{-3} s^{-1}" description="Lateral boundary tendency of water-friendly aerosol number concentration"/> - + description="Lateral boundary tendency of prognostic cloud liquid fraction"/> - + description="Lateral boundary tendency of prognostic cloud ice fraction"/> @@ -2940,6 +2940,9 @@ + diff --git a/src/core_atmosphere/physics/mpas_atmphys_control.F b/src/core_atmosphere/physics/mpas_atmphys_control.F index 5e85a0ceb0..7d15148256 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_control.F +++ b/src/core_atmosphere/physics/mpas_atmphys_control.F @@ -124,7 +124,7 @@ subroutine physics_namelist_check(configs) call mpas_pool_get_config(configs,'config_radt_sw_scheme' ,config_radt_sw_scheme ) call mpas_pool_get_config(configs,'config_sfclayer_scheme' ,config_sfclayer_scheme ) call mpas_pool_get_config(configs,'config_tempo_cldfra' ,config_tempo_cldfra ) - call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf ) + call mpas_pool_get_config(configs,'config_mynn_cloudpdf' ,config_mynn_cloudpdf ) call mpas_log_write('') call mpas_log_write('----- Setting up physics suite '''//trim(config_physics_suite)//''' -----') diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F index cf53e2e99a..2f2fb1db45 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F @@ -88,8 +88,8 @@ subroutine allocate_cloudiness(configs) if(.not.allocated(qcbl_p)) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) case("cld_tempo") - if(.not.allocated(qalsgs_p)) allocate(qalsgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qaisgs_p)) allocate(qaisgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qal_p)) allocate(qal_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qai_p)) allocate(qai_p(ims:ime,kms:kme,jms:jme)) case default end select cld_fraction_select @@ -130,8 +130,8 @@ subroutine deallocate_cloudiness(configs) if(allocated(qcbl_p)) deallocate(qcbl_p) case("cld_tempo") - if(allocated(qalsgs_p)) deallocate(qalsgs_p) - if(allocated(qaisgs_p)) deallocate(qaisgs_p) + if(allocated(qal_p)) deallocate(qal_p) + if(allocated(qai_p)) deallocate(qai_p) case default end select cld_fraction_select @@ -173,9 +173,9 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in character(len=StrKIND),pointer:: radt_cld_scheme character(len=StrKIND),pointer:: convection_scheme - integer,pointer:: index_qal_sgs, index_qai_sgs + integer,pointer:: index_qal, index_qai real(kind=RKIND),dimension(:,:,:),pointer:: scalars - real(kind=RKIND),dimension(:,:),pointer:: qalsgs, qaisgs + real(kind=RKIND),dimension(:,:),pointer:: qal, qai !----------------------------------------------------------------------------------------------------------------- @@ -250,17 +250,17 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in case("cld_tempo") call mpas_pool_get_array(state,'scalars',scalars) - call mpas_pool_get_dimension(state,'index_qal_sgs',index_qal_sgs) - call mpas_pool_get_dimension(state,'index_qai_sgs',index_qai_sgs) + call mpas_pool_get_dimension(state,'index_qal',index_qal) + call mpas_pool_get_dimension(state,'index_qai',index_qai) - qalsgs => scalars(index_qal_sgs,:,:) - qaisgs => scalars(index_qai_sgs,:,:) + qal => scalars(index_qal,:,:) + qai => scalars(index_qai,:,:) do j = jts,jte do k = kts,kte do i = its,ite - qalsgs_p(i,k,j) = qalsgs(k,i) - qaisgs_p(i,k,j) = qaisgs(k,i) - cldfrac_p(i,k,j) = max(qalsgs(k,i), qaisgs(k,i)) + qal_p(i,k,j) = qal(k,i) + qai_p(i,k,j) = qai(k,i) + cldfrac_p(i,k,j) = max(qal(k,i), qai(k,i)) enddo enddo enddo @@ -379,11 +379,6 @@ subroutine driver_cloudiness(itimestep,configs,mesh,state,diag_physics,sfc_input its, ite , jts , jte , kts , kte ) call mpas_timer_stop('cal_mynncld') - case("cld_tempo") - call mpas_timer_start('cal_cldfra_tempo') - call cal_cldfra_tempo(qalsgs_p , qaisgs_p, qcrad_p , qirad_p , & - its, ite , jts , jte , kts , kte ) - call mpas_timer_stop('cal_cldfra_tempo') case default end select cld_fraction_select @@ -608,40 +603,6 @@ subroutine cal_gflcld(cldfrac,qc,qi,qc_cu,qi_cu,its,ite,jts,jte,kts,kte) enddo end subroutine cal_gflcld -!================================================================================================================= -!================================================================================================================= - subroutine cal_cldfra_tempo(cldfracl,cldfraci,qc,qi,its,ite,jts,jte,kts,kte) -!================================================================================================================= - -!input arguments: - integer,intent(in):: its,ite,jts,jte,kts,kte - real(kind=RKIND),intent(inout),dimension(ims:ime,kms:kme,jms:jme):: qc,qi - real(kind=RKIND),intent(in), dimension(ims:ime,kms:kme,jms:jme):: cldfracl, cldfraci - -!local variables: - integer:: i,j,k - - real(kind=RKIND),parameter:: qc_thresh = 1.e-06 - real(kind=RKIND),parameter:: qi_thresh = 1.e-09 - real(kind=RKIND),parameter:: cld_thresh = 1.e-02 - - do j = jts,jte - do k = kts,kte - do i = its,ite - - if (qc(i,k,j) < qc_thresh .AND. cldfracl(i,k,j) > cld_thresh) THEN - !call mpas_log_write("Adding in cldfra_bl to qc at $i,$i,$i", intArgs=(/i,j,k/)) - qc(i,k,j)=qc(i,k,j) - endif - if (qi(i,k,j) < qi_thresh .AND. cldfraci(i,k,j) > cld_thresh) THEN - !call mpas_log_write("Adding in cldfra_bl to qi at $i,$i,$i", intArgs=(/i,j,k/)) - qi(i,k,j)=qi(i,k,j) - endif - enddo - enddo - enddo - - end subroutine cal_cldfra_tempo !================================================================================================================= end module mpas_atmphys_driver_cloudiness !================================================================================================================= diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F index 7e3e743f62..334c9664c2 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F @@ -226,17 +226,18 @@ subroutine allocate_microphysics(configs) endif if (config_tempo_cldfra) then - if(.not.allocated(qalsgs_p)) allocate(qalsgs_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(qaisgs_p)) allocate(qaisgs_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qal_p)) allocate(qal_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(qai_p)) allocate(qai_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(precipfrac_p)) allocate(precipfrac_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rthblten_p)) allocate(rthblten_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rqvblten_p)) allocate(rqvblten_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rqcblten_p)) allocate(rqcblten_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rqiblten_p)) allocate(rqiblten_p(ims:ime,kms:kme,jms:jme)) if(.not.allocated(rthratenlw_p)) allocate(rthratenlw_p(ims:ime,kms:kme,jms:jme)) - if(.not.allocated(rthratensw_p)) allocate(rthratensw_p(ims:ime,kms:kme,jms:jme)) + if(.not.allocated(rthratensw_p)) allocate(rthratensw_p(ims:ime,kms:kme,jms:jme)) ! if(.not.allocated(cldfrac_p) ) allocate(cldfrac_p(ims:ime,kms:kme,jms:jme)) -! if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) +! if(.not.allocated(qcbl_p) ) allocate(qcbl_p(ims:ime,kms:kme,jms:jme)) endif if (config_tempo_ml_nc_pbl) then @@ -405,17 +406,18 @@ subroutine deallocate_microphysics(configs) endif if (config_tempo_cldfra) then - if(allocated(qalsgs_p)) deallocate(qalsgs_p) - if(allocated(qaisgs_p)) deallocate(qaisgs_p) + if(allocated(qal_p)) deallocate(qal_p) + if(allocated(qai_p)) deallocate(qai_p) + if(allocated(precipfrac_p)) deallocate(precipfrac_p) if(allocated(rthblten_p)) deallocate(rthblten_p) if(allocated(rqvblten_p)) deallocate(rqvblten_p) if(allocated(rqcblten_p)) deallocate(rqcblten_p) if(allocated(rqiblten_p)) deallocate(rqiblten_p) if(allocated(rthratenlw_p)) deallocate(rthratenlw_p) - if(allocated(rthratensw_p)) deallocate(rthratensw_p) + if(allocated(rthratensw_p)) deallocate(rthratensw_p) ! if(allocated(cldfrac_p) ) deallocate(cldfrac_p) -! if(allocated(qcbl_p) ) deallocate(qcbl_p) +! if(allocated(qcbl_p) ) deallocate(qcbl_p) endif if (config_tempo_ml_nc_pbl) then @@ -639,7 +641,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qalsgs = qalsgs_p , qaisgs = qaisgs_p , & + qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , & !! ng = ng_p , qb = volg_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -662,7 +664,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten th = th_p , qv = qv_p , qc = qc_p , & qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & - qalsgs = qalsgs_p , qaisgs = qaisgs_p , & + qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , & !! ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & @@ -686,7 +688,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten qr = qr_p , qi = qi_p , qs = qs_p , & qg = qg_p , ni = ni_p , nr = nr_p , & ng = ng_p , qb = volg_p , & - qalsgs = qalsgs_p , qaisgs = qaisgs_p , & + qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , & !! nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & !! nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & pii = pi_p , p = pres_p , dz = dz_p , & @@ -714,7 +716,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten ng = ng_p , qb = volg_p , & nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , & nwfa2d = nwfa2d_p , nifa2d = nifa2d_p , & - qalsgs = qalsgs_p , qaisgs = qaisgs_p , & + qal = qal_p , qai = qai_p , precipfrac = precipfrac_p , & rthbl = rthblten_p, rqvbl = rqvblten_p, rqcbl = rqcblten_p, rqibl = rqiblten_p , & rthlw = rthratenlw_p, rthsw = rthratensw_p , & pii = pi_p , p = pres_p , dz = dz_p , & diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F index 4b10aa1496..a716252db7 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_interface.F +++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F @@ -670,7 +670,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, integer,pointer:: index_zrw,index_zgw,index_zhw integer,pointer:: index_ns,index_ng,index_nh,index_nccn integer,pointer:: index_volg,index_volh - integer,pointer:: index_qal_sgs, index_qai_sgs + integer,pointer:: index_qal, index_qai real(kind=RKIND),dimension(:,:),pointer :: zgrid,w real(kind=RKIND),dimension(:,:),pointer :: zz,exner,pressure_b @@ -678,7 +678,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, real(kind=RKIND),dimension(:,:),pointer :: qv,qc,qr,qi,qs,qg real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qal_sgs, qai_sgs + real(kind=RKIND),dimension(:,:),pointer :: qal, qai, precipfrac real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:,:),pointer :: rainprod,evapprod @@ -949,36 +949,37 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics, endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qal_sgs' ,index_qal_sgs ) - call mpas_pool_get_dimension(state,'index_qai_sgs' ,index_qai_sgs ) - + call mpas_pool_get_dimension(state,'index_qal' ,index_qal ) + call mpas_pool_get_dimension(state,'index_qai' ,index_qai ) + call mpas_pool_get_array(diag_physics,'precipfrac', precipfrac) call mpas_pool_get_array(tend_physics,'rthblten',rthblten) call mpas_pool_get_array(tend_physics,'rqvblten',rqvblten) call mpas_pool_get_array(tend_physics,'rqcblten',rqcblten) call mpas_pool_get_array(tend_physics,'rqiblten',rqiblten) call mpas_pool_get_array(tend_physics,'rthratenlw',rthratenlw) - call mpas_pool_get_array(tend_physics,'rthratensw',rthratensw) + call mpas_pool_get_array(tend_physics,'rthratensw',rthratensw) ! call mpas_pool_get_array(diag_physics,'qc_bl',qc_bl) ! call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl) - - qal_sgs => scalars(index_qal_sgs,:,:) - qai_sgs => scalars(index_qai_sgs,:,:) + + qal => scalars(index_qal,:,:) + qai => scalars(index_qai,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qalsgs_p(i,k,j) = qal_sgs(k,i) - qaisgs_p(i,k,j) = qai_sgs(k,i) + qal_p(i,k,j) = qal(k,i) + qai_p(i,k,j) = qai(k,i) + precipfrac_p(i,k,j) = precipfrac(k,i) rthblten_p(i,k,j) = rthblten(k,i) rqvblten_p(i,k,j) = rqvblten(k,i) rqcblten_p(i,k,j) = rqcblten(k,i) rqiblten_p(i,k,j) = rqiblten(k,i) rthratenlw_p(i,k,j) = rthratenlw(k,i) - rthratensw_p(i,k,j) = rthratensw(k,i) + rthratensw_p(i,k,j) = rthratensw(k,i) ! qcbl_p(i,k,j) = qc_bl(k,i) -! cldfrac_p(i,k,j) = cldfrac_bl(k,i) +! cldfrac_p(i,k,j) = cldfrac_bl(k,i) enddo enddo enddo @@ -1195,7 +1196,7 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te logical,pointer:: config_tempo_cldfra 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 - integer,pointer:: index_qal_sgs, index_qai_sgs + integer,pointer:: index_qal, index_qai !TEMPO/NSSL integer,pointer:: index_qh integer,pointer:: index_zrw,index_zgw,index_zhw @@ -1212,7 +1213,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 real(kind=RKIND),dimension(:,:),pointer :: qh real(kind=RKIND),dimension(:,:),pointer :: nc,ni,nr,nifa,nwfa - real(kind=RKIND),dimension(:,:),pointer :: qal_sgs, qai_sgs + real(kind=RKIND),dimension(:,:),pointer :: qal, qai, precipfrac real(kind=RKIND),dimension(:,:),pointer :: ns,ng,nh,nccn real(kind=RKIND),dimension(:,:),pointer :: volg,volh,zrw,zgw,zhw real(kind=RKIND),dimension(:) ,pointer :: max_hail_diameter_sfc, max_hail_diameter_column @@ -1495,17 +1496,19 @@ subroutine microphysics_to_MPAS(configs,mesh,state,time_lev,diag,diag_physics,te endif if (config_tempo_cldfra) then - call mpas_pool_get_dimension(state,'index_qal_sgs' ,index_qal_sgs ) - call mpas_pool_get_dimension(state,'index_qai_sgs' ,index_qai_sgs ) - - qal_sgs => scalars(index_qal_sgs,:,:) - qai_sgs => scalars(index_qai_sgs,:,:) + call mpas_pool_get_dimension(state,'index_qal' ,index_qal ) + call mpas_pool_get_dimension(state,'index_qai' ,index_qai ) + call mpas_pool_get_array(diag_physics,'precipfrac' ,precipfrac ) + + qal => scalars(index_qal,:,:) + qai => scalars(index_qai,:,:) do j = jts, jte do k = kts, kte do i = its, ite - qal_sgs(k,i) = qalsgs_p(i,k,j) - qai_sgs(k,i) = qaisgs_p(i,k,j) + qal(k,i) = qal_p(i,k,j) + qai(k,i) = qai_p(i,k,j) + precipfrac(k,i) = precipfrac_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 d553711b92..c2a5de6e7f 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_vars.F +++ b/src/core_atmosphere/physics/mpas_atmphys_vars.F @@ -221,7 +221,7 @@ module mpas_atmphys_vars nifa2d_p real(kind=RKIND),dimension(:,:,:),allocatable:: & - qalsgs_p, qaisgs_p + qal_p, qai_p, precipfrac_p !... arrays located at w (vertical velocity) points, or at interface between layers: real(kind=RKIND),dimension(:,:,:),allocatable:: & From b9a19d32fa80f7aff8b4b1726dce562d6bda376b Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Tue, 19 Aug 2025 03:35:17 +0000 Subject: [PATCH 13/22] Complete hookup to TEMPO --- src/core_atmosphere/Registry.xml | 5 +++++ .../physics/mpas_atmphys_driver_microphysics.F | 6 +++++- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml index 3c58cf223b..bb26623e83 100644 --- a/src/core_atmosphere/Registry.xml +++ b/src/core_atmosphere/Registry.xml @@ -2553,6 +2553,11 @@ description="Logical flag to turn on/off prognostic cloud fraction" possible_values=".true. or .false."/> + + Date: Wed, 20 Aug 2025 17:50:13 +0000 Subject: [PATCH 14/22] Addss prognostic cloud fraction to PBL driver --- .../physics/mpas_atmphys_driver.F | 2 +- .../physics/mpas_atmphys_driver_pbl.F | 23 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver.F b/src/core_atmosphere/physics/mpas_atmphys_driver.F index da9d6a1135..3771a1aa7b 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver.F @@ -337,7 +337,7 @@ subroutine physics_driver(domain,itimestep,xtime_s,exchange_halo_group) call allocate_pbl(block%configs) !$OMP PARALLEL DO do thread=1,nThreads - call driver_pbl(itimestep,block%configs,mesh,sfc_input,diag_physics,tend_physics, & + call driver_pbl(itimestep,block%configs,mesh,state,sfc_input,diag_physics,tend_physics, & cellSolveThreadStart(thread),cellSolveThreadEnd(thread)) end do !$OMP END PARALLEL DO diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F index e88f9e0c9c..728a2024b3 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_pbl.F @@ -440,12 +440,13 @@ subroutine deallocate_pbl(configs) end subroutine deallocate_pbl !================================================================================================================= - subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,ite) + subroutine pbl_from_MPAS(configs,mesh,state,sfc_input,diag_physics,tend_physics,its,ite) !================================================================================================================= !input arguments: type(mpas_pool_type),intent(in):: configs type(mpas_pool_type),intent(in):: mesh + type(mpas_pool_type),intent(in):: state type(mpas_pool_type),intent(in):: diag_physics type(mpas_pool_type),intent(in):: sfc_input type(mpas_pool_type),intent(in):: tend_physics @@ -474,7 +475,10 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it real(kind=RKIND),dimension(:,:),pointer:: cldfrac_bl,qc_bl,qi_bl real(kind=RKIND),dimension(:,:),pointer:: edmf_a,edmf_ent,edmf_qc,edmf_qt,edmf_thl,edmf_w real(kind=RKIND),dimension(:,:),pointer:: sub_thl,sub_qv,det_thl,det_qv - + real(kind=RKIND),dimension(:,:),pointer :: qal, qai + real(kind=RKIND),dimension(:,:,:),pointer :: scalars + integer,pointer:: index_qal, index_qai + !local pointers for MYJ scheme: real(kind=RKIND),dimension(:),pointer :: chlowq,thz0,qz0,uz0,vz0,ct,akhs,akms,lh,mixht real(kind=RKIND),dimension(:,:),pointer :: zgrid @@ -675,6 +679,13 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it call mpas_pool_get_array(diag_physics,'det_thl' ,det_thl ) call mpas_pool_get_array(diag_physics,'det_qv' ,det_qv ) + call mpas_pool_get_array(state,'scalars',scalars) + call mpas_pool_get_dimension(state,'index_qal' ,index_qal ) + call mpas_pool_get_dimension(state,'index_qai' ,index_qai ) + + qal => scalars(index_qal,:,:) + qai => scalars(index_qai,:,:) + do j = jts,jte do i = its,ite dx_p(i,j) = len_disp / meshDensity(i)**0.25 @@ -695,7 +706,8 @@ subroutine pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,it qkeadv_p(i,k,j) = qke_adv(k,i) sh3d_p(i,k,j) = sh3d(k,i) sm3d_p(i,k,j) = sm3d(k,i) - cldfrabl_p(i,k,j) = cldfrac_bl(k,i) +! cldfrabl_p(i,k,j) = cldfrac_bl(k,i) + cldfrabl_p(i,k,j) = max(qal(k,i), qai(k,i)) qcbl_p(i,k,j) = qc_bl(k,i) qibl_p(i,k,j) = qi_bl(k,i) edmfa_p(i,k,j) = edmf_a(k,i) @@ -1176,12 +1188,13 @@ subroutine init_pbl(configs) end subroutine init_pbl !================================================================================================================= - subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics,its,ite) + subroutine driver_pbl(itimestep,configs,mesh,state,sfc_input,diag_physics,tend_physics,its,ite) !================================================================================================================= !input arguments: type(mpas_pool_type),intent(in):: configs type(mpas_pool_type),intent(in):: mesh + type(mpas_pool_type),intent(in):: state integer,intent(in):: its,ite integer,intent(in):: itimestep @@ -1241,7 +1254,7 @@ subroutine driver_pbl(itimestep,configs,mesh,sfc_input,diag_physics,tend_physics call mpas_pool_get_config(configs,'config_pbl_scheme' ,pbl_scheme ) !copy MPAS arrays to local arrays: - call pbl_from_MPAS(configs,mesh,sfc_input,diag_physics,tend_physics,its,ite) + call pbl_from_MPAS(configs,mesh,state,sfc_input,diag_physics,tend_physics,its,ite) initflag = 1 if(config_do_restart .or. itimestep > 1) initflag = 0 From d2398f6830f0301f956f6836ec982159b93121d4 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Fri, 5 Sep 2025 19:47:23 +0000 Subject: [PATCH 15/22] Correct pointer to MYNN --- src/core_atmosphere/physics/physics_noaa/MYNN-EDMF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF index d35871833b..7c14493e29 160000 --- a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF +++ b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF @@ -1 +1 @@ -Subproject commit d35871833b9d008fe235eb6ac7f7483623c3e574 +Subproject commit 7c14493e294c18f0318dd859b6fe328439cc7e3b From 8c8f91c2e55b3fb881f6a9261a478e2c4a6872c8 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 10 Sep 2025 23:30:06 +0000 Subject: [PATCH 16/22] Roll back MYNN to pre-smoke changes --- src/core_atmosphere/physics/physics_noaa/MYNN-EDMF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF index 7c14493e29..c1ba7d97e1 160000 --- a/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF +++ b/src/core_atmosphere/physics/physics_noaa/MYNN-EDMF @@ -1 +1 @@ -Subproject commit 7c14493e294c18f0318dd859b6fe328439cc7e3b +Subproject commit c1ba7d97e1553519c82b11ca9fbca91ead21a9c9 From 73a282fd38542bada61a12d461401e5fa05f40e7 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 17 Sep 2025 17:47:36 +0000 Subject: [PATCH 17/22] Tuning cloud fraction scheme to reduce clouds and precipitation --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 677f43a006..34c437660c 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 677f43a006c3ded23cfc8deb1a9872d0258b7e67 +Subproject commit 34c437660c008cee9b4542bcb58374fea40d3326 From 5099110c56c3852b4a55297b27d4f2536a8babf1 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Fri, 19 Sep 2025 14:53:58 +0000 Subject: [PATCH 18/22] Update pointer to TEMPO with bugfix changes --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 34c437660c..af2d160f10 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 34c437660c008cee9b4542bcb58374fea40d3326 +Subproject commit af2d160f10917a9612ad4f1fea255e5a59c7cf7d From e58c0702af37b58026c53f13fd9817435cf1d2e0 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Mon, 22 Sep 2025 16:56:23 +0000 Subject: [PATCH 19/22] Cloud fraction v3 tuning --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index af2d160f10..2294c3e09c 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit af2d160f10917a9612ad4f1fea255e5a59c7cf7d +Subproject commit 2294c3e09c5e5a676f72b4e51fad08577203fe58 From 78503975cc4139671a91c46b460af536fd662cfd Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Tue, 30 Sep 2025 15:46:59 +0000 Subject: [PATCH 20/22] Add snow to cloud ice for radiation if significant amount of cloud ice --- .../physics/mpas_atmphys_driver_cloudiness.F | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F index 2f2fb1db45..7704bbb20b 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F @@ -261,6 +261,12 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in qal_p(i,k,j) = qal(k,i) qai_p(i,k,j) = qai(k,i) cldfrac_p(i,k,j) = max(qal(k,i), qai(k,i)) + + if (qirad_p(i,k,j) > 1.e-7) then + qirad_p(i,k,j) = qirad_p(i,k,j) + qsrad_p(i,k,j) + qsrad_p(i,k,j) = 0. + endif + enddo enddo enddo From 917c9d5645be6eeb1f4badca5bd9e7b4fd00d093 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Tue, 30 Sep 2025 15:47:13 +0000 Subject: [PATCH 21/22] Update TEMPO pointer --- src/core_atmosphere/physics/physics_noaa/TEMPO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO index 2294c3e09c..ab1d16f793 160000 --- a/src/core_atmosphere/physics/physics_noaa/TEMPO +++ b/src/core_atmosphere/physics/physics_noaa/TEMPO @@ -1 +1 @@ -Subproject commit 2294c3e09c5e5a676f72b4e51fad08577203fe58 +Subproject commit ab1d16f793afb3547de606d4c768b0b4b59a545f From 79bc0efb58f713b0fa594977f8eb7524e87e1b66 Mon Sep 17 00:00:00 2001 From: AndersJensen-NOAA Date: Wed, 17 Dec 2025 23:56:20 +0000 Subject: [PATCH 22/22] mods to radiation coupling based on suggestions from Dustin --- .../physics/mpas_atmphys_driver_cloudiness.F | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F index 7704bbb20b..7ac26fcfe7 100644 --- a/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F +++ b/src/core_atmosphere/physics/mpas_atmphys_driver_cloudiness.F @@ -260,13 +260,17 @@ subroutine cloudiness_from_MPAS(itimestep,configs,mesh,state,diag_physics,sfc_in do i = its,ite qal_p(i,k,j) = qal(k,i) qai_p(i,k,j) = qai(k,i) - cldfrac_p(i,k,j) = max(qal(k,i), qai(k,i)) - - if (qirad_p(i,k,j) > 1.e-7) then - qirad_p(i,k,j) = qirad_p(i,k,j) + qsrad_p(i,k,j) - qsrad_p(i,k,j) = 0. + cldfrac_p(i,k,j) = max(0., max(qal(k,i), qai(k,i))) ! Avoid cldfrac < 0 + if (cldfrac_p(i,k,j) > 0.) then + if (qirad_p(i,k,j) > 1.e-7) then + qirad_p(i,k,j) = max(0. , qirad_p(i,k,j) + qsrad_p(i,k,j)) + qsrad_p(i,k,j) = 0. + endif + else + qcrad_p(i,k,j) = 0. ! No cloud + qirad_p(i,k,j) = 0. ! No cloud + qsrad_p(i,k,j) = 0. ! No cloud endif - enddo enddo enddo