diff --git a/integration_tests/utils/mse_tables.jl b/integration_tests/utils/mse_tables.jl index 55611d3b4..92e73f869 100644 --- a/integration_tests/utils/mse_tables.jl +++ b/integration_tests/utils/mse_tables.jl @@ -5,149 +5,149 @@ all_best_mse = OrderedCollections.OrderedDict() # all_best_mse["ARM_SGP"] = OrderedCollections.OrderedDict() -all_best_mse["ARM_SGP"]["qt_mean"] = 0.22153032881351237 -all_best_mse["ARM_SGP"]["updraft_area"] = 335.1685139295908 -all_best_mse["ARM_SGP"]["updraft_w"] = 142.0290367004556 -all_best_mse["ARM_SGP"]["updraft_qt"] = 27.726379242002476 -all_best_mse["ARM_SGP"]["updraft_thetal"] = 170.98119756918584 +all_best_mse["ARM_SGP"]["qt_mean"] = 0.22143401926585182 +all_best_mse["ARM_SGP"]["updraft_area"] = 335.16785513690655 +all_best_mse["ARM_SGP"]["updraft_w"] = 141.97803346792176 +all_best_mse["ARM_SGP"]["updraft_qt"] = 27.57483064595048 +all_best_mse["ARM_SGP"]["updraft_thetal"] = 170.98103520062713 all_best_mse["ARM_SGP"]["u_mean"] = 1.3375737467153984e-5 -all_best_mse["ARM_SGP"]["tke_mean"] = 1317.668469319657 -all_best_mse["ARM_SGP"]["temperature_mean"] = 0.00010873126782650757 -all_best_mse["ARM_SGP"]["ql_mean"] = 176.21484974825347 +all_best_mse["ARM_SGP"]["tke_mean"] = 1317.678548063657 +all_best_mse["ARM_SGP"]["temperature_mean"] = 0.00010869927305570782 +all_best_mse["ARM_SGP"]["ql_mean"] = 176.03297501190372 all_best_mse["ARM_SGP"]["qi_mean"] = "NA" -all_best_mse["ARM_SGP"]["thetal_mean"] = 0.00010015758560883269 -all_best_mse["ARM_SGP"]["Hvar_mean"] = 10056.88907774507 -all_best_mse["ARM_SGP"]["QTvar_mean"] = 6401.400692204485 +all_best_mse["ARM_SGP"]["thetal_mean"] = 0.00010012167033603005 +all_best_mse["ARM_SGP"]["Hvar_mean"] = 10019.605203648243 +all_best_mse["ARM_SGP"]["QTvar_mean"] = 6380.233899055468 # all_best_mse["Bomex"] = OrderedCollections.OrderedDict() -all_best_mse["Bomex"]["qt_mean"] = 0.11386633805268594 -all_best_mse["Bomex"]["updraft_area"] = 129.46581508139394 -all_best_mse["Bomex"]["updraft_w"] = 18.702330266802374 -all_best_mse["Bomex"]["updraft_qt"] = 6.543770825965683 -all_best_mse["Bomex"]["updraft_thetal"] = 69.46292306536425 -all_best_mse["Bomex"]["v_mean"] = 67.06025112983149 -all_best_mse["Bomex"]["u_mean"] = 0.3235625771364134 -all_best_mse["Bomex"]["tke_mean"] = 74.28411645782818 -all_best_mse["Bomex"]["temperature_mean"] = 4.532627706554993e-5 -all_best_mse["Bomex"]["ql_mean"] = 9.147941859180515 +all_best_mse["Bomex"]["qt_mean"] = 0.11224921120454945 +all_best_mse["Bomex"]["updraft_area"] = 129.4906967797644 +all_best_mse["Bomex"]["updraft_w"] = 18.517052531724794 +all_best_mse["Bomex"]["updraft_qt"] = 6.542125775887841 +all_best_mse["Bomex"]["updraft_thetal"] = 69.46310949586267 +all_best_mse["Bomex"]["v_mean"] = 67.05698543673745 +all_best_mse["Bomex"]["u_mean"] = 0.3235803034219502 +all_best_mse["Bomex"]["tke_mean"] = 74.27500076671177 +all_best_mse["Bomex"]["temperature_mean"] = 4.4589394073851936e-5 +all_best_mse["Bomex"]["ql_mean"] = 8.84060550534244 all_best_mse["Bomex"]["qi_mean"] = "NA" -all_best_mse["Bomex"]["thetal_mean"] = 4.606179622443964e-5 -all_best_mse["Bomex"]["Hvar_mean"] = 3873.1381522018696 -all_best_mse["Bomex"]["QTvar_mean"] = 1451.2094598084998 +all_best_mse["Bomex"]["thetal_mean"] = 4.528961998613632e-5 +all_best_mse["Bomex"]["Hvar_mean"] = 3999.7718503825167 +all_best_mse["Bomex"]["QTvar_mean"] = 1496.3117112659884 # all_best_mse["DryBubble"] = OrderedCollections.OrderedDict() -all_best_mse["DryBubble"]["updraft_area"] = 21.611934188203705 -all_best_mse["DryBubble"]["updraft_w"] = 7.557123600771639 -all_best_mse["DryBubble"]["updraft_thetal"] = 2.036952758159372e-6 -all_best_mse["DryBubble"]["u_mean"] = 1.148636655894699e-28 -all_best_mse["DryBubble"]["tke_mean"] = 26.53285808455984 -all_best_mse["DryBubble"]["temperature_mean"] = 1.199919770449516e-6 -all_best_mse["DryBubble"]["thetal_mean"] = 1.855563170765923e-6 -all_best_mse["DryBubble"]["Hvar_mean"] = 142.64632423429254 +all_best_mse["DryBubble"]["updraft_area"] = 1.5600923378908404e-20 +all_best_mse["DryBubble"]["updraft_w"] = 3.125970197997314e-21 +all_best_mse["DryBubble"]["updraft_thetal"] = 2.2290997257401877e-28 +all_best_mse["DryBubble"]["u_mean"] = 0.0 +all_best_mse["DryBubble"]["tke_mean"] = 8.711612946005953e-21 +all_best_mse["DryBubble"]["temperature_mean"] = 1.900994131825817e-28 +all_best_mse["DryBubble"]["thetal_mean"] = 1.4035572383204598e-28 +all_best_mse["DryBubble"]["Hvar_mean"] = 1.803251133793496e-30 # all_best_mse["DYCOMS_RF01"] = OrderedCollections.OrderedDict() -all_best_mse["DYCOMS_RF01"]["qt_mean"] = 0.022674763550877195 -all_best_mse["DYCOMS_RF01"]["ql_mean"] = 10.28174653104147 -all_best_mse["DYCOMS_RF01"]["updraft_area"] = 30.54618421553255 -all_best_mse["DYCOMS_RF01"]["updraft_w"] = 4.138810207371549 -all_best_mse["DYCOMS_RF01"]["updraft_qt"] = 2.151446661713436 -all_best_mse["DYCOMS_RF01"]["updraft_thetal"] = 46.18691260060391 -all_best_mse["DYCOMS_RF01"]["v_mean"] = 0.003016440460043332 -all_best_mse["DYCOMS_RF01"]["u_mean"] = 0.07896949921646965 -all_best_mse["DYCOMS_RF01"]["tke_mean"] = 21.33850237115218 -all_best_mse["DYCOMS_RF01"]["temperature_mean"] = 8.086418799808223e-5 -all_best_mse["DYCOMS_RF01"]["thetal_mean"] = 8.159410303870621e-5 -all_best_mse["DYCOMS_RF01"]["Hvar_mean"] = 1243.073059726701 -all_best_mse["DYCOMS_RF01"]["QTvar_mean"] = 483.91943563744485 +all_best_mse["DYCOMS_RF01"]["qt_mean"] = 0.022674763548033078 +all_best_mse["DYCOMS_RF01"]["ql_mean"] = 10.28174651514448 +all_best_mse["DYCOMS_RF01"]["updraft_area"] = 30.54618421803614 +all_best_mse["DYCOMS_RF01"]["updraft_w"] = 4.138810210443974 +all_best_mse["DYCOMS_RF01"]["updraft_qt"] = 2.1514466616728734 +all_best_mse["DYCOMS_RF01"]["updraft_thetal"] = 46.18691260060387 +all_best_mse["DYCOMS_RF01"]["v_mean"] = 0.003016440460640667 +all_best_mse["DYCOMS_RF01"]["u_mean"] = 0.07896949921830682 +all_best_mse["DYCOMS_RF01"]["tke_mean"] = 21.338502376891398 +all_best_mse["DYCOMS_RF01"]["temperature_mean"] = 8.08641879994649e-5 +all_best_mse["DYCOMS_RF01"]["thetal_mean"] = 8.159410304007782e-5 +all_best_mse["DYCOMS_RF01"]["Hvar_mean"] = 1243.0730597273637 +all_best_mse["DYCOMS_RF01"]["QTvar_mean"] = 483.9194356419018 # all_best_mse["GABLS"] = OrderedCollections.OrderedDict() -all_best_mse["GABLS"]["updraft_thetal"] = 2.2719470669997437e-13 -all_best_mse["GABLS"]["v_mean"] = 2.749199578689244e-8 -all_best_mse["GABLS"]["u_mean"] = 9.975990231926342e-10 -all_best_mse["GABLS"]["tke_mean"] = 1.6283908301945493e-8 -all_best_mse["GABLS"]["temperature_mean"] = 2.2653366861407179e-13 -all_best_mse["GABLS"]["thetal_mean"] = 2.263238925551045e-13 -all_best_mse["GABLS"]["Hvar_mean"] = 1.3582473249617495e-7 -all_best_mse["GABLS"]["QTvar_mean"] = 4.420829745954712e-8 -all_best_mse["GABLS"]["qt_mean"] = 3.081460275568721e-8 +all_best_mse["GABLS"]["updraft_thetal"] = 0.0 +all_best_mse["GABLS"]["v_mean"] = 3.0258956903165754e-29 +all_best_mse["GABLS"]["u_mean"] = 5.596072484918322e-31 +all_best_mse["GABLS"]["tke_mean"] = 4.93825088596756e-29 +all_best_mse["GABLS"]["temperature_mean"] = 0.0 +all_best_mse["GABLS"]["thetal_mean"] = 0.0 +all_best_mse["GABLS"]["Hvar_mean"] = 3.431124337761387e-28 +all_best_mse["GABLS"]["QTvar_mean"] = 6.2713381408194e-31 +all_best_mse["GABLS"]["qt_mean"] = 2.4026804723790953e-30 # all_best_mse["life_cycle_Tan2018"] = OrderedCollections.OrderedDict() -all_best_mse["life_cycle_Tan2018"]["qt_mean"] = 6.778244112632275e-7 -all_best_mse["life_cycle_Tan2018"]["ql_mean"] = 0.005144408670852792 -all_best_mse["life_cycle_Tan2018"]["updraft_area"] = 0.005260393231250281 -all_best_mse["life_cycle_Tan2018"]["updraft_w"] = 0.006184531796320973 -all_best_mse["life_cycle_Tan2018"]["updraft_qt"] = 0.00032558294895705203 -all_best_mse["life_cycle_Tan2018"]["updraft_thetal"] = 1.8572759342531365e-7 -all_best_mse["life_cycle_Tan2018"]["v_mean"] = 4.94341700056881e-5 -all_best_mse["life_cycle_Tan2018"]["u_mean"] = 3.600989329172465e-8 -all_best_mse["life_cycle_Tan2018"]["tke_mean"] = 0.0005409635937153329 -all_best_mse["life_cycle_Tan2018"]["temperature_mean"] = 2.48496845242293e-10 -all_best_mse["life_cycle_Tan2018"]["thetal_mean"] = 2.6719835185305653e-10 -all_best_mse["life_cycle_Tan2018"]["Hvar_mean"] = 4176.729638811834 -all_best_mse["life_cycle_Tan2018"]["QTvar_mean"] = 3664.170325445772 +all_best_mse["life_cycle_Tan2018"]["qt_mean"] = 4.2456838042947345e-11 +all_best_mse["life_cycle_Tan2018"]["ql_mean"] = 2.039432562960598e-8 +all_best_mse["life_cycle_Tan2018"]["updraft_area"] = 2.9943754373867077e-10 +all_best_mse["life_cycle_Tan2018"]["updraft_w"] = 2.4372912126737867e-9 +all_best_mse["life_cycle_Tan2018"]["updraft_qt"] = 8.847211719680312e-12 +all_best_mse["life_cycle_Tan2018"]["updraft_thetal"] = 5.0322704745824535e-15 +all_best_mse["life_cycle_Tan2018"]["v_mean"] = 1.744391825500784e-10 +all_best_mse["life_cycle_Tan2018"]["u_mean"] = 4.807055831555187e-13 +all_best_mse["life_cycle_Tan2018"]["tke_mean"] = 1.4390518237145982e-10 +all_best_mse["life_cycle_Tan2018"]["temperature_mean"] = 2.1354141352137547e-14 +all_best_mse["life_cycle_Tan2018"]["thetal_mean"] = 2.1044103615447052e-14 +all_best_mse["life_cycle_Tan2018"]["Hvar_mean"] = 0.00563700994258815 +all_best_mse["life_cycle_Tan2018"]["QTvar_mean"] = 0.004595094880303624 # all_best_mse["Nieuwstadt"] = OrderedCollections.OrderedDict() -all_best_mse["Nieuwstadt"]["updraft_area"] = 98.6564977936147 -all_best_mse["Nieuwstadt"]["updraft_w"] = 12.4745711005339 +all_best_mse["Nieuwstadt"]["updraft_area"] = 98.6564977935179 +all_best_mse["Nieuwstadt"]["updraft_w"] = 12.474571100534247 all_best_mse["Nieuwstadt"]["updraft_thetal"] = 117.36697441802559 -all_best_mse["Nieuwstadt"]["u_mean"] = 14.602576944221713 -all_best_mse["Nieuwstadt"]["tke_mean"] = 313.7437656358427 -all_best_mse["Nieuwstadt"]["temperature_mean"] = 9.708439348857509e-6 -all_best_mse["Nieuwstadt"]["thetal_mean"] = 1.0020176199912012e-5 -all_best_mse["Nieuwstadt"]["Hvar_mean"] = 1278.96081165231 +all_best_mse["Nieuwstadt"]["u_mean"] = 14.602576944221799 +all_best_mse["Nieuwstadt"]["tke_mean"] = 313.7437656356189 +all_best_mse["Nieuwstadt"]["temperature_mean"] = 9.708439348851666e-6 +all_best_mse["Nieuwstadt"]["thetal_mean"] = 1.0020176199907293e-5 +all_best_mse["Nieuwstadt"]["Hvar_mean"] = 1278.9608116518727 # all_best_mse["Rico"] = OrderedCollections.OrderedDict() -all_best_mse["Rico"]["qt_mean"] = 1.2369530628742529 -all_best_mse["Rico"]["updraft_area"] = 477.48306112645173 -all_best_mse["Rico"]["updraft_w"] = 108.08587425694526 -all_best_mse["Rico"]["updraft_qt"] = 12.134618749250066 -all_best_mse["Rico"]["updraft_thetal"] = 133.36053918568405 -all_best_mse["Rico"]["v_mean"] = 0.6110256586521275 -all_best_mse["Rico"]["u_mean"] = 0.6945597375805941 -all_best_mse["Rico"]["tke_mean"] = 82.22566437421101 -all_best_mse["Rico"]["temperature_mean"] = 0.0005726890812789995 -all_best_mse["Rico"]["ql_mean"] = 63.457646567689196 -all_best_mse["Rico"]["qr_mean"] = 760.808614361998 +all_best_mse["Rico"]["qt_mean"] = 1.240577610897265 +all_best_mse["Rico"]["updraft_area"] = 477.4723365082512 +all_best_mse["Rico"]["updraft_w"] = 107.93641059929224 +all_best_mse["Rico"]["updraft_qt"] = 12.27330510190275 +all_best_mse["Rico"]["updraft_thetal"] = 133.36345921192816 +all_best_mse["Rico"]["v_mean"] = 0.6113313125463751 +all_best_mse["Rico"]["u_mean"] = 0.6948989327737745 +all_best_mse["Rico"]["tke_mean"] = 82.26914808072146 +all_best_mse["Rico"]["temperature_mean"] = 0.0005737249256216108 +all_best_mse["Rico"]["ql_mean"] = 63.483025341334695 +all_best_mse["Rico"]["qr_mean"] = 760.8610598283299 all_best_mse["Rico"]["qi_mean"] = "NA" -all_best_mse["Rico"]["thetal_mean"] = 0.0005651345382555676 -all_best_mse["Rico"]["Hvar_mean"] = 175963.54586843753 -all_best_mse["Rico"]["QTvar_mean"] = 39542.99360626892 +all_best_mse["Rico"]["thetal_mean"] = 0.0005661696874453951 +all_best_mse["Rico"]["Hvar_mean"] = 187519.5898306167 +all_best_mse["Rico"]["QTvar_mean"] = 41933.89043513789 # all_best_mse["Soares"] = OrderedCollections.OrderedDict() -all_best_mse["Soares"]["qt_mean"] = 0.1258655678790617 -all_best_mse["Soares"]["updraft_area"] = 96.57671044662798 -all_best_mse["Soares"]["updraft_w"] = 11.362288111643732 -all_best_mse["Soares"]["updraft_qt"] = 23.080321946904423 -all_best_mse["Soares"]["updraft_thetal"] = 65.2533035952309 -all_best_mse["Soares"]["u_mean"] = 96.34958378490317 -all_best_mse["Soares"]["tke_mean"] = 241.93583693605962 -all_best_mse["Soares"]["temperature_mean"] = 1.095414667223086e-5 -all_best_mse["Soares"]["thetal_mean"] = 1.0381094800173531e-5 -all_best_mse["Soares"]["Hvar_mean"] = 1122.5059232556414 +all_best_mse["Soares"]["qt_mean"] = 0.125492505099034 +all_best_mse["Soares"]["updraft_area"] = 99.07613100101109 +all_best_mse["Soares"]["updraft_w"] = 11.354211142559235 +all_best_mse["Soares"]["updraft_qt"] = 23.094442446856103 +all_best_mse["Soares"]["updraft_thetal"] = 65.25330225554521 +all_best_mse["Soares"]["u_mean"] = 96.34890749728717 +all_best_mse["Soares"]["tke_mean"] = 241.84351768806397 +all_best_mse["Soares"]["temperature_mean"] = 1.0933047642371797e-5 +all_best_mse["Soares"]["thetal_mean"] = 1.0360692590042686e-5 +all_best_mse["Soares"]["Hvar_mean"] = 1126.3241374374188 # all_best_mse["TRMM_LBA"] = OrderedCollections.OrderedDict() -all_best_mse["TRMM_LBA"]["qt_mean"] = 3.9672114248087906 -all_best_mse["TRMM_LBA"]["updraft_area"] = 7590.326979740355 -all_best_mse["TRMM_LBA"]["updraft_w"] = 29122.6671022852 -all_best_mse["TRMM_LBA"]["updraft_qt"] = 264.2824639454272 -all_best_mse["TRMM_LBA"]["updraft_thetal"] = 1962.2134578126906 -all_best_mse["TRMM_LBA"]["v_mean"] = 286.6265958324042 -all_best_mse["TRMM_LBA"]["u_mean"] = 113.79375208017474 -all_best_mse["TRMM_LBA"]["tke_mean"] = 25964.486606164868 -all_best_mse["TRMM_LBA"]["temperature_mean"] = 0.0011270511013060588 -all_best_mse["TRMM_LBA"]["ql_mean"] = 11333.082496936679 +all_best_mse["TRMM_LBA"]["qt_mean"] = 3.96721142480849 +all_best_mse["TRMM_LBA"]["updraft_area"] = 7590.326979740429 +all_best_mse["TRMM_LBA"]["updraft_w"] = 29122.667102286345 +all_best_mse["TRMM_LBA"]["updraft_qt"] = 264.28246394543794 +all_best_mse["TRMM_LBA"]["updraft_thetal"] = 1962.213457812691 +all_best_mse["TRMM_LBA"]["v_mean"] = 286.62659583240327 +all_best_mse["TRMM_LBA"]["u_mean"] = 113.79375208017473 +all_best_mse["TRMM_LBA"]["tke_mean"] = 25964.486606169423 +all_best_mse["TRMM_LBA"]["temperature_mean"] = 0.001127051101306071 +all_best_mse["TRMM_LBA"]["ql_mean"] = 11333.082496938974 all_best_mse["TRMM_LBA"]["qi_mean"] = "NA" -all_best_mse["TRMM_LBA"]["thetal_mean"] = 0.02111934332007885 -all_best_mse["TRMM_LBA"]["Hvar_mean"] = 4344.199567757688 -all_best_mse["TRMM_LBA"]["QTvar_mean"] = 2836.0095084457753 +all_best_mse["TRMM_LBA"]["thetal_mean"] = 0.02111934332007892 +all_best_mse["TRMM_LBA"]["Hvar_mean"] = 4344.199567761157 +all_best_mse["TRMM_LBA"]["QTvar_mean"] = 2836.009508446295 # all_best_mse["LES_driven_SCM"] = OrderedCollections.OrderedDict() -all_best_mse["LES_driven_SCM"]["qt_mean"] = 6.697931997427664 -all_best_mse["LES_driven_SCM"]["v_mean"] = 3.7462480976394894 -all_best_mse["LES_driven_SCM"]["u_mean"] = 1.250353901858044 -all_best_mse["LES_driven_SCM"]["temperature_mean"] = 0.002913107242179287 -all_best_mse["LES_driven_SCM"]["ql_mean"] = 1763.5602324832419 -all_best_mse["LES_driven_SCM"]["thetal_mean"] = 0.0032212912453485347 +all_best_mse["LES_driven_SCM"]["qt_mean"] = 6.695140418219589 +all_best_mse["LES_driven_SCM"]["v_mean"] = 3.747051509524756 +all_best_mse["LES_driven_SCM"]["u_mean"] = 1.2506833904476498 +all_best_mse["LES_driven_SCM"]["temperature_mean"] = 0.0029125238780234835 +all_best_mse["LES_driven_SCM"]["ql_mean"] = 1738.0999059121439 +all_best_mse["LES_driven_SCM"]["thetal_mean"] = 0.00322061632952989 # ################################# ################################# diff --git a/src/Operators.jl b/src/Operators.jl index dc710dff2..02c2c99fa 100644 --- a/src/Operators.jl +++ b/src/Operators.jl @@ -524,52 +524,3 @@ function dual_centers(f, grid, k::CCO.PlusHalf, i_up::Int) return SA.SVector(f[i_up, Cent(k.i - 1)], f[i_up, Cent(k.i)]) end end - - -##### -##### Implicit operators -##### - -#= TODO: clean this up somehow! - -construct_tridiag_diffusion_en configures the tridiagonal -matrix for solving 2nd order environment variables where -some terms are treated implicitly. Here is a list of all -the terms in the matrix (and the overall equation solved): - - N_a terms = 0 () - N_diagonal terms = 1 (unsteady) - N_c terms = 0 () - - ∂_t ρa*tke x unsteady - + ∂_z(ρaw*tke) = x advection - + ρaK*(∂²_z(u)+∂²_z(v)+∂²_z(w̄)) x shear? - + ρawΣᵢ(εᵢ(wⱼ-w₀)²-δ₀*tke) x entr-detr - + ∂_z(ρa₀K ∂_z(tke)) x diffusion - + ρa₀*w̅₀b̅₀ x buoyancy - - a₀(u⋅∇p) x pressure term - + ρa₀D x dissipation -=# -function construct_tridiag_diffusion_en(grid::Grid, state, TS) - dti = TS.dti - a = center_field(grid) - b = center_field(grid) - c = center_field(grid) - ρ0_c = center_ref_state(state).ρ0 - aux_tc = center_aux_turbconv(state) - - ae = 1 .- aux_tc.bulk.area - - @inbounds for k in real_center_indices(grid) - a[k] = 0 - c[k] = 0 - b[k] = if is_surface_center(grid, k) - 1 - else - ρ0_c[k] * ae[k] * dti - end - end - - A = LinearAlgebra.Tridiagonal(a[2:end], vec(b), c[1:(end - 1)]) - return A -end diff --git a/src/Turbulence_PrognosticTKE.jl b/src/Turbulence_PrognosticTKE.jl index 784151b2e..a7cfbe75a 100755 --- a/src/Turbulence_PrognosticTKE.jl +++ b/src/Turbulence_PrognosticTKE.jl @@ -244,6 +244,8 @@ function update(edmf::EDMF_PrognosticTKE, grid, state, gm::GridMeanVariables, Ca n_updrafts = up.n_updrafts prog_gm = center_prog_grid_mean(state) prog_en = center_prog_environment(state) + aux_tc = center_aux_turbconv(state) + ρ0_c = center_ref_state(state).ρ0 # Update aux / pre-tendencies filters. TODO: combine these into a function that minimizes traversals # Some of these methods should probably live in `compute_tendencies`, when written, but we'll @@ -275,22 +277,11 @@ function update(edmf::EDMF_PrognosticTKE, grid, state, gm::GridMeanVariables, Ca # compute tendencies compute_gm_tendencies!(edmf, grid, state, Case, gm, TS) compute_updraft_tendencies(edmf, grid, state, gm) - # ----------- TODO: move to compute_tendencies - implicit_eqs = edmf.implicit_eqs - # Matrix is the same for all variables that use the same eddy diffusivity, we can construct once and reuse - - common_args = (grid, state, TS) - implicit_eqs.A_TKE .= construct_tridiag_diffusion_en(common_args...) - implicit_eqs.A_Hvar .= construct_tridiag_diffusion_en(common_args...) - implicit_eqs.A_QTvar .= construct_tridiag_diffusion_en(common_args...) - implicit_eqs.A_HQTcov .= construct_tridiag_diffusion_en(common_args...) - - implicit_eqs.b_TKE .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :tke, n_updrafts) - implicit_eqs.b_Hvar .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :Hvar, n_updrafts) - implicit_eqs.b_QTvar .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :QTvar, n_updrafts) - implicit_eqs.b_HQTcov .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :HQTcov, n_updrafts) - # ----------- + parent(tendencies_en.tke) .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :tke, n_updrafts) + parent(tendencies_en.Hvar) .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :Hvar, n_updrafts) + parent(tendencies_en.QTvar) .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :QTvar, n_updrafts) + parent(tendencies_en.HQTcov) .= en_diffusion_tendencies(edmf, grid, state, param_set, TS, :HQTcov, n_updrafts) ### ### update @@ -299,10 +290,13 @@ function update(edmf::EDMF_PrognosticTKE, grid, state, gm::GridMeanVariables, Ca if edmf.Precip.precipitation_model == "clima_1m" update_precipitation(edmf.Precip, grid, state, up_thermo, en_thermo, edmf.PrecipPhys, TS) end - parent(prog_en.tke) .= implicit_eqs.A_TKE \ implicit_eqs.b_TKE - parent(prog_en.Hvar) .= implicit_eqs.A_Hvar \ implicit_eqs.b_Hvar - parent(prog_en.QTvar) .= implicit_eqs.A_QTvar \ implicit_eqs.b_QTvar - parent(prog_en.HQTcov) .= implicit_eqs.A_HQTcov \ implicit_eqs.b_HQTcov + ae = 1 .- aux_tc.bulk.area + for k in real_center_indices(grid) + prog_en.tke[k] += TS.dt * tendencies_en.tke[k] / (ρ0_c[k] * ae[k]) + prog_en.Hvar[k] += TS.dt * tendencies_en.Hvar[k] / (ρ0_c[k] * ae[k]) + prog_en.QTvar[k] += TS.dt * tendencies_en.QTvar[k] / (ρ0_c[k] * ae[k]) + prog_en.HQTcov[k] += TS.dt * tendencies_en.HQTcov[k] / (ρ0_c[k] * ae[k]) + end @inbounds for k in real_center_indices(grid) prog_gm.u[k] += tendencies_gm.u[k] * TS.dt prog_gm.v[k] += tendencies_gm.v[k] * TS.dt @@ -938,7 +932,6 @@ function en_diffusion_tendencies(edmf, grid::Grid, state, param_set, TS, covar_s b[k] = covar_surf else b[k] = ( - ρ0_c[k] * ae[k] * prog_covar[k] * dti + aux_covar.press[k] + aux_covar.buoy[k] + aux_covar.shear[k] + diff --git a/src/types.jl b/src/types.jl index e04fa0723..d8502af98 100644 --- a/src/types.jl +++ b/src/types.jl @@ -489,11 +489,7 @@ end CasesBase(case::T; kwargs...) where {T} = CasesBase{T}(; casename = string(nameof(T)), kwargs...) -function center_field_tridiagonal_matrix(grid::Grid) - return LinearAlgebra.Tridiagonal(center_field(grid)[2:end], center_field(grid), center_field(grid)[1:(end - 1)]) -end - -mutable struct EDMF_PrognosticTKE{A1, A2, IE} +mutable struct EDMF_PrognosticTKE{A1, A2} Ri_bulk_crit::Float64 zi::Float64 n_updrafts::Int @@ -527,7 +523,6 @@ mutable struct EDMF_PrognosticTKE{A1, A2, IE} asp_ratio::A2 m::A2 mixing_length::A1 - implicit_eqs::IE horiz_K_eddy::A2 area_surface_bc::A1 w_surface_bc::A1 @@ -645,22 +640,6 @@ mutable struct EDMF_PrognosticTKE{A1, A2, IE} m = face_field(grid, n_updrafts) # mixing length - implicit_eqs = ( - A_θq_gm = center_field_tridiagonal_matrix(grid), - A_uv_gm = center_field_tridiagonal_matrix(grid), - A_TKE = center_field_tridiagonal_matrix(grid), - A_Hvar = center_field_tridiagonal_matrix(grid), - A_QTvar = center_field_tridiagonal_matrix(grid), - A_HQTcov = center_field_tridiagonal_matrix(grid), - b_θ_liq_ice_gm = center_field(grid), - b_q_tot_gm = center_field(grid), - b_u_gm = center_field(grid), - b_v_gm = center_field(grid), - b_TKE = center_field(grid), - b_Hvar = center_field(grid), - b_QTvar = center_field(grid), - b_HQTcov = center_field(grid), - ) mixing_length = center_field(grid) horiz_K_eddy = center_field(grid, n_updrafts) @@ -738,8 +717,7 @@ mutable struct EDMF_PrognosticTKE{A1, A2, IE} detr_surface_bc = 0 A1 = typeof(mixing_length) A2 = typeof(horiz_K_eddy) - IE = typeof(implicit_eqs) - return new{A1, A2, IE}( + return new{A1, A2}( Ri_bulk_crit, zi, n_updrafts, @@ -773,7 +751,6 @@ mutable struct EDMF_PrognosticTKE{A1, A2, IE} asp_ratio, m, mixing_length, - implicit_eqs, horiz_K_eddy, area_surface_bc, w_surface_bc,