Skip to content

Commit 7c8c26b

Browse files
author
Olivia Alcabes
committed
updating linear solver
1 parent f879b67 commit 7c8c26b

File tree

1 file changed

+32
-38
lines changed

1 file changed

+32
-38
lines changed

src/prognostic_equations/implicit/approx_jacobian.jl

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -257,67 +257,61 @@ function jacobian_cache(alg::ApproxJacobian, Y, atmos)
257257
sgs_massflux_blocks...,
258258
)
259259

260-
names₁_group₁ = (@name(c.ρ), sfc_if_available...)
261-
names₁_group₂ = (available_tracer_names..., ρatke_if_available...)
262-
names₁_group₃ = (@name(c.ρe_tot),)
263-
names₁ = (
264-
names₁_group₁...,
265-
names₁_group₂...,
266-
names₁_group₃...,
260+
mass_and_surface_names = (@name(c.ρ), sfc_if_available...)
261+
available_scalar_names = (
262+
mass_and_surface_names...,
263+
ρq_tot_if_available...,
264+
@name(c.ρe_tot),
265+
available_condensate_names...,
266+
ρatke_if_available...,
267267
available_sgs_scalar_names...,
268268
)
269269

270-
alg₂ = MatrixFields.BlockLowerTriangularSolve(
270+
velocity_alg = MatrixFields.BlockLowerTriangularSolve(
271271
@name(c.uₕ),
272272
sgs_u³_if_available...,
273273
)
274-
solver_alg =
274+
full_alg =
275275
if use_derivative(diffusion_flag) ||
276276
use_derivative(sgs_advection_flag) ||
277277
!(atmos.moisture_model isa DryModel)
278-
alg₁_subalg₂ =
278+
gs_scalar_subalg = if !(atmos.moisture_model isa DryModel)
279+
MatrixFields.BlockLowerTriangularSolve(@name(c.ρq_tot))
280+
else
281+
MatrixFields.BlockDiagonalSolve()
282+
end
283+
scalar_subalg =
279284
if atmos.turbconv_model isa PrognosticEDMFX &&
280285
use_derivative(sgs_advection_flag)
281-
diff_subalg =
282-
use_derivative(diffusion_flag) ?
283-
(;
284-
alg₂ = MatrixFields.BlockLowerTriangularSolve(
285-
names₁_group₂...,
286-
)
287-
) : (;)
288-
(;
286+
MatrixFields.BlockLowerTriangularSolve(
287+
available_sgs_tracer_names...;
289288
alg₂ = MatrixFields.BlockLowerTriangularSolve(
290-
available_sgs_tracer_names...;
289+
@name(c.sgsʲs.:(1).mse);
291290
alg₂ = MatrixFields.BlockLowerTriangularSolve(
292-
@name(c.sgsʲs.:(1).mse);
293-
alg₂ = MatrixFields.BlockLowerTriangularSolve(
294-
@name(c.sgsʲs.:(1).ρa);
295-
diff_subalg...,
296-
),
291+
@name(c.sgsʲs.:(1).ρa);
292+
alg₂ = gs_scalar_subalg,
297293
),
298-
)
294+
),
299295
)
300296
else
301-
is_in_Y(@name(c.ρq_tot)) ?
302-
(;
303-
alg₂ = MatrixFields.BlockLowerTriangularSolve(
304-
names₁_group₂...,
305-
)
306-
) : (;)
297+
gs_scalar_subalg
307298
end
308-
alg₁ = MatrixFields.BlockLowerTriangularSolve(
309-
names₁_group₁...;
310-
alg₁_subalg₂...,
299+
scalar_alg = MatrixFields.BlockLowerTriangularSolve(
300+
mass_and_surface_names...;
301+
alg= scalar_subalg,
311302
)
312303
MatrixFields.ApproximateBlockArrowheadIterativeSolve(
313-
names₁...;
314-
alg₁,
315-
alg₂,
304+
available_scalar_names...;
305+
alg₁ = scalar_alg,
306+
alg₂ = velocity_alg,
316307
P_alg₁ = MatrixFields.MainDiagonalPreconditioner(),
317308
n_iters = alg.approximate_solve_iters,
318309
)
319310
else
320-
MatrixFields.BlockArrowheadSolve(names₁...; alg₂)
311+
MatrixFields.BlockArrowheadSolve(
312+
available_scalar_names...;
313+
alg₂ = velocity_alg,
314+
)
321315
end
322316

323317
temp_matrix = (matrix .+ identity_matrix(matrix, Y)) ./ FT(1)

0 commit comments

Comments
 (0)