Skip to content

Commit 7e3b7b6

Browse files
committed
use equation scalings to setup the tolerance
1 parent eee206a commit 7e3b7b6

File tree

3 files changed

+28
-42
lines changed

3 files changed

+28
-42
lines changed

examples/example_3d_demo_iterative_amg.jl

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ inputparams = readBattMoJsonInputFile(fn)
2323
simple = false
2424
if(!simple)
2525

26-
facx = 1
26+
facx = 2
2727
facy = facx
28-
facz = 1
28+
facz = 2
2929
fac2p = 1
3030

3131
fn = string(dirname(pathof(BattMo)), "/../test/data/jsonfiles/3d_demo_geometry.json")
@@ -69,16 +69,11 @@ cfg = output[:cfg]
6969
#cfg[:linear_solver]
7070
cfg[:info_level] = 10
7171

72-
fac = 1e8
73-
cfg[:tolerances][:PeAm][:solid_diffusion_bc] = 1e-25*fac
74-
cfg[:tolerances][:NeAm][:solid_diffusion_bc] = 1e-25*fac
75-
cfg[:tolerances][:NeAm][:mass_conservation] = 1e-25*fac
76-
cfg[:tolerances][:PeAm][:mass_conservation] = 1e-25*fac
77-
solver = :fgmres
78-
fac = 1e-3 #NEEDED 1e-4 ok for 3D case 1e-7 need for 1D case
79-
rtol = 1e-4*fac # for simple face rtol=1e7 and atol 1e-9 seems give same number ononlinear as direct
80-
atol = 1e-5*fac # seems important
81-
max_it = 100
72+
solver = :fgmres
73+
fac = 1e-3 #NEEDED 1e-4 ok for 3D case 1e-7 need for 1D case
74+
rtol = 1e-4*fac # for simple face rtol=1e7 and atol 1e-9 seems give same number ononlinear as direct
75+
atol = 1e-5*fac # seems important
76+
max_it = 100
8277
verbose = 10
8378

8479
# We combine two preconditioners. One working on a subset of variables and equations (we call it block-preconditioner)

src/setup/model_setup.jl

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ end
6868

6969
function setup_simulation(inputparams::AbstractInputParams;
7070
use_p2d::Bool = true,
71+
use_model_scaling::Bool = true,
7172
extra_timing::Bool = false,
7273
max_step::Union{Integer, Nothing} = nothing,
7374
linear_solver::Symbol = :direct,
@@ -81,8 +82,6 @@ function setup_simulation(inputparams::AbstractInputParams;
8182
general_ad=general_ad,
8283
model_kwargs...)
8384

84-
setup_scalings!(model, parameters)
85-
8685
state0 = setup_initial_state(inputparams, model)
8786

8887
forces = setup_forces(model)
@@ -93,8 +92,10 @@ function setup_simulation(inputparams::AbstractInputParams;
9392

9493
cfg = setup_config(simulator,
9594
model,
95+
parameters,
9696
linear_solver,
97-
extra_timing;
97+
extra_timing,
98+
use_model_scaling;
9899
config_kwargs...)
99100

100101
output = Dict(:simulator => simulator,
@@ -1015,16 +1016,7 @@ end
10151016
# Setup scalings #
10161017
##################
10171018

1018-
function Jutul.get_scaling(model::SimulationModel{O, S, F, C}, equation::JutulEquation) where {O, S <: ElectroChemicalComponent, F, C}
1019-
if haskey(model.system.scalings, equation)
1020-
return model.system.scalings[equation]
1021-
else
1022-
return 1.0
1023-
end
1024-
end
1025-
1026-
1027-
function setup_scalings!(model, parameters)
1019+
function get_scalings(model, parameters)
10281020

10291021
refT = 298.15
10301022

@@ -1131,16 +1123,6 @@ function setup_scalings!(model, parameters)
11311123

11321124
end
11331125

1134-
for scaling in scalings
1135-
1136-
submodel = model[scaling[:model_label]]
1137-
eq = submodel.equations[scaling[:equation_label]]
1138-
value = scaling[:value]
1139-
1140-
submodel.system.scalings[eq] = value
1141-
1142-
end
1143-
11441126
return scalings
11451127

11461128
end
@@ -1237,8 +1219,10 @@ probably be given as inputs in future versions of BattMo.jl
12371219
"""
12381220
function setup_config(sim::Jutul.JutulSimulator,
12391221
model::MultiModel ,
1222+
parameters,
12401223
linear_solver::Symbol ,
1241-
extra_timing::Bool;
1224+
extra_timing::Bool ,
1225+
use_model_scaling::Bool;
12421226
kwargs...)
12431227

12441228
cfg = simulator_config(sim; kwargs...)
@@ -1255,8 +1239,19 @@ function setup_config(sim::Jutul.JutulSimulator,
12551239
cfg[:error_on_incomplete] = false
12561240
cfg[:failure_cuts_timestep] = true
12571241

1258-
for key in Jutul.submodels_symbols(model)
1259-
cfg[:tolerances][key][:default] = 1e-5
1242+
if use_model_scaling
1243+
scalings = get_scalings(model, parameters)
1244+
tol_default = 1e-5
1245+
for scaling in scalings
1246+
model_label = scaling[:model_label]
1247+
equation_label = scaling[:equation_label]
1248+
value = scaling[:value]
1249+
cfg[:tolerances][model_label][equation_label] = value*tol_default
1250+
end
1251+
else
1252+
for key in Jutul.submodels_symbols(model)
1253+
cfg[:tolerances][key][:default] = 1e-5
1254+
end
12601255
end
12611256

12621257
if model[:Control].system.policy isa CyclingCVPolicy

test/3d_example_amg.jl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,6 @@ using AlgebraicMultigrid
2626
cfg = output[:cfg]
2727

2828
cfg[:info_level] = 0
29-
cfg[:tolerances][:Elyte][:mass_conservation] = 1e-3
30-
cfg[:tolerances][:PeAm][:mass_conservation] = 1e-3
31-
cfg[:tolerances][:NeAm][:mass_conservation] = 1e-3
32-
cfg[:tolerances][:Control][:default] = 1e-5
3329

3430
solver = :fgmres
3531
fac = 1e-4 #NEEDED

0 commit comments

Comments
 (0)