diff --git a/src/core_atmosphere/Registry.xml b/src/core_atmosphere/Registry.xml
index d7d7f4bb5f..f325d4cd6d 100644
--- a/src/core_atmosphere/Registry.xml
+++ b/src/core_atmosphere/Registry.xml
@@ -421,9 +421,9 @@
-
-
-
+
+
+
@@ -2725,28 +2725,18 @@
description="configuration for cloud microphysics schemes"
possible_values="`suite',`mp_wsm6',`mp_tempo',`mp_thompson',`mp_thompson_aerosols', `mp_kessler',`mp_nssl2m',`off'"/>
-
-
-
-
-
-
-
@@ -2947,11 +2937,6 @@
description="configuration for spp boundary layer"
possible_values="`0: off',`1: activated'"/>
-
-
-
-
-
-
-
diff --git a/src/core_atmosphere/mpas_atm_core.F b/src/core_atmosphere/mpas_atm_core.F
index 3f628a0cce..e10171e8c8 100644
--- a/src/core_atmosphere/mpas_atm_core.F
+++ b/src/core_atmosphere/mpas_atm_core.F
@@ -588,7 +588,6 @@ subroutine atm_mpas_init_block(dminfo, stream_manager, block, mesh, dt)
!initialization of all physics:
call physics_init(dminfo, stream_manager, clock, block % configs, mesh, diag, tend, state, 1, &
diag_physics, diag_physics_noahmp, ngw_input, atm_input, sfc_input, output_noahmp)
- call tempo_ml_init(block % configs)
endif
#endif
diff --git a/src/core_atmosphere/physics/Makefile b/src/core_atmosphere/physics/Makefile
index 2fe1019b08..fa2dd14cb6 100644
--- a/src/core_atmosphere/physics/Makefile
+++ b/src/core_atmosphere/physics/Makefile
@@ -65,7 +65,7 @@ core_physics_mmm: core_physics_init
(cd physics_mmm; $(MAKE) -f Makefile.mpas all)
core_microphysics: core_physics_init core_physics_mmm
- (cd physics_noaa/TEMPO; cp ./drivers/mpas/module_mp_tempo.F90 .; $(MAKE) all COREDEF="$(COREDEF)")
+ (cd physics_noaa/TEMPO; $(MAKE) -f Makefile.mpas)
core_SMOKE: core_physics_init
(cd physics_noaa/SMOKE; cp ./MPAS/Makefile .; cp ./MPAS/mpas_smoke_wrapper.F90 .; $(MAKE) all)
@@ -286,7 +286,7 @@ clean:
( cd physics_noahmp/drivers/mpas; $(MAKE) clean )
( cd physics_noahmp/src; $(MAKE) clean )
( cd physics_noahmp/utility; $(MAKE) clean )
- ( if [ -d physics_noaa/TEMPO ]; then cd physics_noaa/TEMPO; $(MAKE) clean; fi )
+ ( if [ -d physics_noaa/TEMPO ]; then cd physics_noaa/TEMPO; $(MAKE) -f Makefile.mpas clean; fi )
( if [ -d physics_noaa/UGWP ]; then cd physics_noaa/UGWP; $(MAKE) clean; fi )
( if [ -d physics_noaa/RUCLSM ]; then cd physics_noaa/RUCLSM; $(MAKE) -f MPAS/Makefile clean; fi )
( if [ -d physics_noaa/MYNN-EDMF ]; then cd physics_noaa/MYNN-EDMF; cp ./MPAS/Makefile .; $(MAKE) clean; fi )
diff --git a/src/core_atmosphere/physics/Registry_tempo.xml b/src/core_atmosphere/physics/Registry_tempo.xml
new file mode 100644
index 0000000000..d442038eb9
--- /dev/null
+++ b/src/core_atmosphere/physics/Registry_tempo.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
index d78d56bec3..fba1db829c 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_driver_microphysics.F
@@ -21,8 +21,9 @@ module mpas_atmphys_driver_microphysics
!wrf physics:
use module_mp_kessler
use module_mp_thompson
- use module_mp_tempo,only: tempo_3d_to_1d_driver, tempo_init
- ! use module_mp_tempo_utils
+ use module_mp_tempo_cfgs,only: ty_tempo_cfgs
+ use module_mp_tempo_driver,only: tempo_driver, ty_tempo_driver_diags, tempo_aerosol_surface_emissions
+ use module_mp_tempo_init,only: tempo_init
use module_mp_wsm6,only: wsm6
use mp_wsm6,only: mp_wsm6_init,refl10cm_wsm6
use module_mp_nssl_2mom
@@ -94,7 +95,7 @@ module mpas_atmphys_driver_microphysics
!--- initialization option for WSM6 from WRF version 3.8.1. this option could also be set as a namelist parameter.
integer,parameter:: hail_opt = 0
-
+ type(ty_tempo_cfgs) :: tempo_cfgs
contains
@@ -110,14 +111,14 @@ 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_ml_nc_pbl
+ logical,pointer:: config_tempo_ml_for_bl_nc
!-----------------------------------------------------------------------------------------------------------------
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_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_ml_for_bl_nc',config_tempo_ml_for_bl_nc)
!sounding variables:
if(.not.allocated(rho_p) ) allocate(rho_p(ims:ime,kms:kme,jms:jme) )
@@ -223,7 +224,7 @@ subroutine allocate_microphysics(configs)
if(.not.allocated(volg_p)) allocate(volg_p(ims:ime,kms:kme,jms:jme))
endif
- if (config_tempo_ml_nc_pbl) then
+ if (config_tempo_ml_for_bl_nc) 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))
endif
@@ -275,7 +276,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_ml_nc_pbl
+ logical,pointer:: config_tempo_ml_for_bl_nc
!-----------------------------------------------------------------------------------------------------------------
@@ -283,7 +284,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_ml_nc_pbl',config_tempo_ml_nc_pbl)
+ call mpas_pool_get_config(configs,'config_tempo_ml_for_bl_nc',config_tempo_ml_for_bl_nc)
!sounding variables:
if(allocated(rho_p) ) deallocate(rho_p )
@@ -387,7 +388,7 @@ subroutine deallocate_microphysics(configs)
if(allocated(volg_p) ) deallocate(volg_p )
endif
- if (config_tempo_ml_nc_pbl) then
+ if (config_tempo_ml_for_bl_nc) then
if(allocated(cldfrac_p) ) deallocate(cldfrac_p)
if(allocated(qcbl_p) ) deallocate(qcbl_p)
endif
@@ -450,6 +451,7 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
logical,pointer:: do_restart
character(len=StrKIND),pointer:: microp_scheme
logical,pointer:: config_tempo_hailaware, config_tempo_aerosolaware
+ logical,pointer:: config_tempo_ml_for_bl_nc
character(len=StrKIND),pointer:: nssl_moments
logical :: outputon = .false.
@@ -469,6 +471,7 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
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_for_bl_nc',config_tempo_ml_for_bl_nc)
call mpas_pool_get_config(configs,'config_nssl_moments',nssl_moments)
call mpas_pool_get_config(configs,'config_do_restart' ,do_restart )
@@ -485,8 +488,9 @@ subroutine init_microphysics(dminfo,configs,mesh,state,time_lev,sfc_input,diag_p
end select microp2_select
case("mp_tempo")
- call tempo_init(l_mp_tables=l_mp_tables, &
- hail_aware_flag=config_tempo_hailaware, aerosol_aware_flag=config_tempo_aerosolaware)
+ call tempo_init(aerosolaware_flag=config_tempo_aerosolaware, &
+ hailaware_flag=config_tempo_hailaware, &
+ ml_for_bl_nc_flag = config_tempo_ml_for_bl_nc, tempo_cfgs=tempo_cfgs)
if (config_tempo_aerosolaware) then
call init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
@@ -532,11 +536,8 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
!local pointers:
character(len=StrKIND),pointer:: microp_scheme
- logical,pointer:: config_tempo_aerosolaware,config_tempo_hailaware
character(len=StrKIND),pointer:: nssl_moments
- integer :: tempo_options
-
!local variables and arrays:
integer:: istep
integer, pointer :: do_diag_dbz
@@ -546,6 +547,7 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
character(len=StrKIND):: errmsg
integer:: errflg
+ type(ty_tempo_driver_diags) :: tempo_driver_diags
!-----------------------------------------------------------------------------------------------------------------
!call mpas_log_write('')
!call mpas_log_write('---enter subroutine driver_microphysics:')
@@ -555,8 +557,6 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
errflg = 0
call mpas_pool_get_config(configs,'config_microp_scheme',microp_scheme)
- 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_nssl_moments',nssl_moments)
call mpas_pool_get_array(diag_physics,'do_diag_dbz',do_diag_dbz)
@@ -594,112 +594,46 @@ subroutine driver_microphysics(configs,mesh,state,time_lev,diag,diag_physics,ten
call mpas_timer_stop('mp_kessler')
case ("mp_tempo")
+
+ if (allocated(nwfa_p) .and. allocated(nwfa2d_p)) then
+ call tempo_aerosol_surface_emissions(dt=dt_microp, nwfa=nwfa_p, nwfa2d=nwfa2d_p, &
+ ims=ims, ime=ime, jms=jms, jme=jme, kms=kms, kme=kme, kts=kts)
+ endif
+
call mpas_timer_start('mp_tempo')
- tempo_options = 0
- if (config_tempo_hailaware) tempo_options = tempo_options + 1
- if (config_tempo_aerosolaware) tempo_options = tempo_options + 1
istep = 1
do while (istep .le. n_microp)
-
- tempo_opts: select case(tempo_options)
- case(0)
- call tempo_3d_to_1d_driver( &
- 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 , &
- !! ng = ng_p , qb = volg_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 , &
- w = w_p , dt_in = dt_microp , itimestep = itimestep , &
- rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , &
- snowncv = snowncv_p , graupelnc = graupelnc_p , graupelncv = graupelncv_p , &
- sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , &
- 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 , 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 &
- )
- case(1)
- if (config_tempo_aerosolaware) then
- call tempo_3d_to_1d_driver( &
- 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 , &
- !! ng = ng_p , qb = volg_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 , &
- w = w_p , dt_in = dt_microp , itimestep = itimestep , &
- rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , &
- snowncv = snowncv_p , graupelnc = graupelnc_p , graupelncv = graupelncv_p , &
- sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , &
- 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 , frainnc = frainnc_p , &
- qcbl = qcbl_p , cldfrac = cldfrac_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 &
- )
- elseif (config_tempo_hailaware) then
- call tempo_3d_to_1d_driver( &
- 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 , &
- ng = ng_p , qb = volg_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 , &
- w = w_p , dt_in = dt_microp , itimestep = itimestep , &
- rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , &
- snowncv = snowncv_p , graupelnc = graupelnc_p , graupelncv = graupelncv_p , &
- sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , &
- 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 , frainnc = frainnc_p , &
- !! qcbl = qcbl_p , cldfrac = cldfrac_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 &
- )
- else
- call physics_error_fatal('driver_microphysics(): TEMPO called with invalid options -- case 1')
- endif
- case(2)
- call tempo_3d_to_1d_driver( &
- 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 , &
- ng = ng_p , qb = volg_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 , &
- w = w_p , dt_in = dt_microp , itimestep = itimestep , &
- rainnc = rainnc_p , rainncv = rainncv_p , snownc = snownc_p , &
- snowncv = snowncv_p , graupelnc = graupelnc_p , graupelncv = graupelncv_p , &
- sr = sr_p , rainprod = rainprod_p , evapprod = evapprod_p , &
- 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 , frainnc = frainnc_p , &
- max_hail_diameter_sfc = max_hail_diameter_sfc_p , &
- max_hail_diameter_column = max_hail_diameter_column_p , &
- qcbl = qcbl_p , cldfrac = cldfrac_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 &
- )
- case default
- call physics_error_fatal('driver_microphysics(): TEMPO called with invalid options -- case default')
- end select tempo_opts
-
+ call tempo_driver( tempo_cfgs=tempo_cfgs, &
+ dt = dt_microp , itimestep = itimestep , &
+ 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 , &
+ ng = ng_p , qb = volg_p , w = w_p , &
+ nc = nc_p , nwfa = nwfa_p , nifa = nifa_p , &
+ pii = pi_p , p = pres_p , dz = dz_p , &
+ qc_bl = qcbl_p , qcfrac_bl = cldfrac_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 , &
+ tempo_diags = tempo_driver_diags)
+ ! precipitation variables are added in case of multiple calls when n_microp > 1
+ snownc_p = snownc_p + tempo_driver_diags%snow_liquid_equiv_precip
+ snowncv_p = snowncv_p + tempo_driver_diags%snow_liquid_equiv_precip
+ graupelnc_p = graupelnc_p + tempo_driver_diags%graupel_liquid_equiv_precip
+ graupelncv_p = graupelncv_p + tempo_driver_diags%graupel_liquid_equiv_precip
+ rainnc_p = rainnc_p + tempo_driver_diags%rain_precip + &
+ snownc_p + graupelnc_p + tempo_driver_diags%ice_liquid_equiv_precip
+ rainncv_p = rainncv_p + tempo_driver_diags%rain_precip + &
+ snownc_p + graupelnc_p + tempo_driver_diags%ice_liquid_equiv_precip
+ frainnc_p = frainnc_p + tempo_driver_diags%frz_rain_precip
+ refl10cm_p = tempo_driver_diags%refl10cm
+ recloud_p = tempo_driver_diags%re_cloud
+ reice_p = tempo_driver_diags%re_ice
+ resnow_p = tempo_driver_diags%re_snow
+ sr_p = tempo_driver_diags%frozen_fraction
+ max_hail_diameter_sfc_p = tempo_driver_diags%max_hail_diameter_sfc
+ max_hail_diameter_column_p = tempo_driver_diags%max_hail_diameter_column
istep = istep + 1
enddo
call mpas_timer_stop('mp_tempo')
diff --git a/src/core_atmosphere/physics/mpas_atmphys_init_tempo.F b/src/core_atmosphere/physics/mpas_atmphys_init_tempo.F
index dac3b2d20a..743dee98d4 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_init_tempo.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_init_tempo.F
@@ -15,102 +15,19 @@ module mpas_atmphys_init_tempo
use mpas_pool_routines
use mpas_atmphys_utilities
- use module_mp_tempo_params, only: ntb_arc,ntb_arw,ntb_art,ntb_arr,ntb_ark,tnccn_act, &
- naCCN1,naCCN0,naIN0,naIN1,nwfa_default,aero_max, &
- nc_ml_input, nc_ml_nodes, nc_ml_output, &
- nr_ml_input, nr_ml_nodes, nr_ml_output, &
- nc_ml_trans_mean, nc_ml_trans_var, &
- nc_ml_w00, nc_ml_w01, nc_ml_b00, nc_ml_b01
- use module_mp_tempo_ml, only: MLdata, tempo_save_or_read_ml_data
+ use module_mp_tempo_params, only: nwfa_default, aero_max, &
+ naCCN1,naCCN0,naIN0,naIN1
implicit none
private
- public:: init_tempo_aerosols_forMPAS, tempo_ml_init
+ public:: init_tempo_aerosols_forMPAS
-!MPAS main initialization of the TEMPO parameterization of cloud microphysics with nucleation of cloud
-!droplets based on distributions of CCNs and INs (aerosol-aware parameterization).
+!MPAS initialization of aerosols for TEMPO parameterization.
-
contains
!=================================================================================================================
- subroutine tempo_ml_init(configs)
-! Called once to initial data for tempo_ml
-!=================================================================================================================
-
-!input arguments:
-type(mpas_pool_type),intent(in):: configs
-
-!local variables and pointers:
- type(MLdata), dimension(2) :: tempo_ml_data
- logical,pointer:: config_tempo_ml_nc_pbl,config_tempo_ml_nc,config_tempo_ml_nr
-
- call mpas_pool_get_config(configs, 'config_tempo_ml_nc_pbl', config_tempo_ml_nc_pbl)
- call mpas_pool_get_config(configs, 'config_tempo_ml_nc', config_tempo_ml_nc)
- call mpas_pool_get_config(configs, 'config_tempo_ml_nr', config_tempo_ml_nr)
-
- if(.not. (config_tempo_ml_nc_pbl .or. config_tempo_ml_nc .or. config_tempo_ml_nr)) then
- call mpas_log_write('--- All configuration flags for TEMPO ML are false... TEMPO ML will not be used')
- return
- endif
-
- if(config_tempo_ml_nc .or. config_tempo_ml_nr) then
- call mpas_log_write('--- TEMPO ML for nc and nr prediction not yet working... These flags will be ignored')
- endif
-
- if(config_tempo_ml_nc_pbl) then
- call mpas_log_write('--- Using TEMPO ML prediction to give life to the PBL clouds')
- endif
-
- ! Cloud water
- tempo_ml_data(1)%input_size = nc_ml_input
- tempo_ml_data(1)%node_size = nc_ml_nodes
- tempo_ml_data(1)%output_size = nc_ml_output
-
- if (.not.allocated(tempo_ml_data(1)%transform_mean)) allocate(tempo_ml_data(1)%transform_mean(nc_ml_input))
- if (.not.allocated(tempo_ml_data(1)%transform_var)) allocate(tempo_ml_data(1)%transform_var(nc_ml_input))
-
- tempo_ml_data(1)%transform_mean = nc_ml_trans_mean
- tempo_ml_data(1)%transform_var = nc_ml_trans_var
-
- if (.not.allocated(tempo_ml_data(1)%weights00)) allocate(tempo_ml_data(1)%weights00(nc_ml_nodes,nc_ml_input))
- if (.not.allocated(tempo_ml_data(1)%weights01)) allocate(tempo_ml_data(1)%weights01(nc_ml_output,nc_ml_nodes))
- if (.not.allocated(tempo_ml_data(1)%bias00)) allocate(tempo_ml_data(1)%bias00(nc_ml_nodes))
- if (.not.allocated(tempo_ml_data(1)%bias01)) allocate(tempo_ml_data(1)%bias01(nc_ml_output))
-
- tempo_ml_data(1)%weights00 = reshape(nc_ml_w00, (/nc_ml_nodes, nc_ml_input/))
- tempo_ml_data(1)%weights01 = reshape(nc_ml_w01, (/nc_ml_output, nc_ml_nodes/))
- tempo_ml_data(1)%bias00 = nc_ml_b00
- tempo_ml_data(1)%bias01 = nc_ml_b01
-
- ! Rain water
- tempo_ml_data(2)%input_size = nc_ml_input
- tempo_ml_data(2)%node_size = nc_ml_nodes
- tempo_ml_data(2)%output_size = nc_ml_output
-
- if (.not.allocated(tempo_ml_data(2)%transform_mean)) allocate(tempo_ml_data(2)%transform_mean(nc_ml_input))
- if (.not.allocated(tempo_ml_data(2)%transform_var)) allocate(tempo_ml_data(2)%transform_var(nc_ml_input))
-
- tempo_ml_data(2)%transform_mean = nc_ml_trans_mean
- tempo_ml_data(2)%transform_var = nc_ml_trans_var
-
- if (.not.allocated(tempo_ml_data(2)%weights00)) allocate(tempo_ml_data(2)%weights00(nc_ml_nodes,nc_ml_input))
- if (.not.allocated(tempo_ml_data(2)%weights01)) allocate(tempo_ml_data(2)%weights01(nc_ml_output,nc_ml_nodes))
- if (.not.allocated(tempo_ml_data(2)%bias00)) allocate(tempo_ml_data(2)%bias00(nc_ml_nodes))
- if (.not.allocated(tempo_ml_data(2)%bias01)) allocate(tempo_ml_data(2)%bias01(nc_ml_output))
-
- tempo_ml_data(2)%weights00 = reshape(nc_ml_w00, (/nc_ml_nodes, nc_ml_input/))
- tempo_ml_data(2)%weights01 = reshape(nc_ml_w01, (/nc_ml_output, nc_ml_nodes/))
- tempo_ml_data(2)%bias00 = nc_ml_b00
- tempo_ml_data(2)%bias01 = nc_ml_b01
-
- ! Save neural network
- call tempo_save_or_read_ml_data(ml_data_in=tempo_ml_data)
-
- end subroutine tempo_ml_init
-
-!=================================================================================================================
- subroutine init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
+subroutine init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,diag_physics)
!=================================================================================================================
!input variables:
@@ -148,11 +65,6 @@ subroutine init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,dia
!-----------------------------------------------------------------------------------------------------------------
!call mpas_log_write('--- enter subroutine init_tempo_aerosols_forMPAS:')
-!... read a static file containing CCN activation of aerosols. The data were created from a parcel model by
-!... Feingold & Heymsfield with further changes by Eidhammer and Kriedenweis.
- call table_ccnAct(dminfo)
- call mpas_log_write('--- end read table_ccnAct:')
-
!... if do_restart is true, then we do not need to check the initialization of nwfa, nifa, and nwfa2d. If false,
! then, we proceed with the initialization:
if(do_restart) return
@@ -275,65 +187,6 @@ subroutine init_tempo_aerosols_forMPAS(do_restart,dminfo,mesh,state,time_lev,dia
end subroutine init_tempo_aerosols_forMPAS
-!=================================================================================================================
- subroutine table_ccnAct(dminfo)
-!=================================================================================================================
-
-!input variables:
- type(dm_info),intent(in):: dminfo
-
-!local variables:
- logical:: opened
- integer:: ccn_unit,i,istat
- character(len=StrKIND):: errmess
-!-----------------------------------------------------------------------------------------------------------------
-
- if(.not.allocated(tnccn_act)) allocate(tnccn_act(ntb_arc,ntb_arw,ntb_art,ntb_arr,ntb_ark))
-
-!get a unit to open binary file:
- istat = -999
- if(dminfo % my_proc_id == IO_NODE) then
- do i = 10,99
- inquire(i,opened = opened,iostat=istat)
- if(.not. opened ) then
- ccn_unit = i
- exit
- endif
- enddo
- if(istat /= 0) &
- call physics_error_fatal('mpas_atmphys_init_microphysics table_ccnAct: Can not '// &
- 'find unused fortran unit to read in lookup table.' )
- endif
-
-!distribute unit to other processors:
- call mpas_dmpar_bcast_int(dminfo,ccn_unit)
-
-!open binary file:
- istat = -999
- if(dminfo % my_proc_id == IO_NODE) then
- open(ccn_unit,file='CCN_ACTIVATE_DATA',form='UNFORMATTED',status='OLD',iostat=istat)
- if(istat /= 0) then
- write(errmess,'(A,I4)') 'mpas_atmphys_init_microphysics table_ccnAct:: '// &
- 'error opening CCN_ACTIVATE_DATA on unit', ccn_unit
- call physics_error_fatal(errmess)
- endif
- endif
-
-!read and broadcast data to all nodes:
- istat = -999
- if(dminfo % my_proc_id == IO_NODE) then
- read(ccn_unit,iostat=istat) tnccn_act
- if(istat /= 0) then
- write(errmess,'(A,I4)') 'mpas_atmphys_init_microphysics table_ccnAct:: '// &
- 'error reading tnccn_act on unit', ccn_unit
- call physics_error_fatal(errmess)
- endif
- endif
-
- DM_BCAST_MACRO(tnccn_act)
-
- end subroutine table_ccnAct
-
-!=================================================================================================================
+ !=================================================================================================================
end module mpas_atmphys_init_tempo
-!=================================================================================================================
+!=================================================================================================================
\ No newline at end of file
diff --git a/src/core_atmosphere/physics/mpas_atmphys_interface.F b/src/core_atmosphere/physics/mpas_atmphys_interface.F
index 35d577efab..156950af30 100644
--- a/src/core_atmosphere/physics/mpas_atmphys_interface.F
+++ b/src/core_atmosphere/physics/mpas_atmphys_interface.F
@@ -664,7 +664,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
!TEMPO/NSSL
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_ml_for_bl_nc
integer,pointer:: index_qh
integer,pointer:: index_zrw,index_zgw,index_zhw
integer,pointer:: index_ns,index_ng,index_nh,index_nccn
@@ -696,7 +696,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
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_ml_nc_pbl',config_tempo_ml_nc_pbl)
+ call mpas_pool_get_config(configs,'config_tempo_ml_for_bl_nc',config_tempo_ml_for_bl_nc)
call mpas_pool_get_array(mesh,'zgrid',zgrid)
call mpas_pool_get_array(mesh,'zz' ,zz )
@@ -888,7 +888,7 @@ subroutine microphysics_from_MPAS(configs,mesh,state,time_lev,diag,diag_physics,
enddo
enddo
- if(config_tempo_ml_nc_pbl) then
+ if(config_tempo_ml_for_bl_nc) then
call mpas_pool_get_array(diag_physics,'qc_bl',qc_bl)
call mpas_pool_get_array(diag_physics,'cldfrac_bl',cldfrac_bl)
do j = jts, jte
diff --git a/src/core_atmosphere/physics/physics_noaa/TEMPO b/src/core_atmosphere/physics/physics_noaa/TEMPO
index f325c9d778..68c8c18c86 160000
--- a/src/core_atmosphere/physics/physics_noaa/TEMPO
+++ b/src/core_atmosphere/physics/physics_noaa/TEMPO
@@ -1 +1 @@
-Subproject commit f325c9d778ca34ecb781ed92757791749a373a52
+Subproject commit 68c8c18c863e72da4a80c092fc0de7a21b517bee
diff --git a/src/core_atmosphere/utils/Makefile b/src/core_atmosphere/utils/Makefile
index cf4e2fd172..ede5830d5a 100644
--- a/src/core_atmosphere/utils/Makefile
+++ b/src/core_atmosphere/utils/Makefile
@@ -4,27 +4,15 @@ ifdef PHYSICS
UTILS = build_tables
endif
-all: $(UTILS) build_tables_tempo
+all: $(UTILS)
build_tables: build_tables.o atmphys_build_tables_thompson.o
$(LINKER) $(LDFLAGS) -o build_tables build_tables.o atmphys_build_tables_thompson.o -L../../framework -L../physics -lphys -lframework $(LIBS) -L../../external/esmf_time_f90 -lesmf_time
mv build_tables ../../..
-build_tables_tempo: build_tables_tempo.o atmphys_build_tables_tempo.o
- $(LINKER) $(LDFLAGS) -o build_tables_tempo build_tables_tempo.o atmphys_build_tables_tempo.o -L../../framework -L../physics -lphys -lframework $(LIBS) -L../../external/esmf_time_f90 -lesmf_time
- mv build_tables_tempo ../../..
-
build_tables.o: \
atmphys_build_tables_thompson.o
-build_tables_tempo.o: \
- atmphys_build_tables_tempo.o
-
-atmphys_build_tables_tempo.o: \
- ../physics/physics_noaa/TEMPO/module_mp_tempo.o \
- ../physics/physics_noaa/TEMPO/module_mp_tempo_utils.o \
- ../physics/physics_noaa/TEMPO/module_mp_tempo_params.o
-
clean:
$(RM) ../../../build_tables
$(RM) *.o *.mod *.f90
diff --git a/src/core_init_atmosphere/Registry.xml b/src/core_init_atmosphere/Registry.xml
index d850b94cae..8c2f94ec88 100644
--- a/src/core_init_atmosphere/Registry.xml
+++ b/src/core_init_atmosphere/Registry.xml
@@ -325,11 +325,6 @@
description="Whether to interpolate first-guess fields from intermediate file"
possible_values="true or false"/>
-
-
-
-
-
+
+
+
@@ -1233,7 +1228,7 @@
description="Graupel mixing ratio"/>
+ description="Hail mixing ratio"/>
@@ -1250,6 +1245,9 @@
+
+
@@ -1301,7 +1299,7 @@
-
-
+
-
+
diff --git a/src/core_init_atmosphere/mpas_init_atm_cases.F b/src/core_init_atmosphere/mpas_init_atm_cases.F
index cfc893e38e..d1c8868a5d 100644
--- a/src/core_init_atmosphere/mpas_init_atm_cases.F
+++ b/src/core_init_atmosphere/mpas_init_atm_cases.F
@@ -70,7 +70,6 @@ subroutine init_atm_setup_case(domain, stream_manager)
logical, pointer :: config_native_gwd_static
logical, pointer :: config_native_gwd_gsl_static
logical, pointer :: config_met_interp
- logical, pointer :: config_aerosol_climo
logical, pointer :: config_blend_bdy_terrain
character (len=StrKIND), pointer :: config_start_time
character (len=StrKIND), pointer :: config_met_prefix
@@ -232,7 +231,6 @@ subroutine init_atm_setup_case(domain, stream_manager)
call mpas_pool_get_config(block_ptr % configs, 'config_native_gwd_static', config_native_gwd_static)
call mpas_pool_get_config(block_ptr % configs, 'config_native_gwd_gsl_static', config_native_gwd_gsl_static)
call mpas_pool_get_config(block_ptr % configs, 'config_met_interp', config_met_interp)
- call mpas_pool_get_config(block_ptr % configs, 'config_aerosol_climo', config_aerosol_climo)
call mpas_pool_get_config(block_ptr % configs, 'config_blend_bdy_terrain', config_blend_bdy_terrain)
call mpas_pool_get_subpool(block_ptr % structs, 'mesh', mesh)
@@ -397,8 +395,6 @@ subroutine init_atm_setup_case(domain, stream_manager)
call mpas_pool_get_dimension(block_ptr % dimensions, 'nEdges', nEdges)
call mpas_pool_get_dimension(block_ptr % dimensions, 'nVertLevels', nVertLevels)
- call mpas_pool_get_config(block_ptr % configs, 'config_aerosol_climo', config_aerosol_climo)
-
call mpas_get_time(curr_time, dateTimeString=timeString)
xtime = timeString ! Set field valid time, xtime, to the current time in the time loop
time_since_start = curr_time - start_time