-
Notifications
You must be signed in to change notification settings - Fork 32
Open
Description
Describe the bug
Max iterations ignored if set in settings for discontinuous problem.
To Reproduce
import festim as F
import ufl
import h_transport_materials as htm
from dolfinx.mesh import create_rectangle
from mpi4py import MPI
from petsc4py import PETSc
from dolfinx.log import set_log_level, LogLevel
import numpy as np
from dolfinx.mesh import create_unit_square
model_barrier = F.HydrogenTransportProblemDiscontinuous()
import festim as F
fenics_mesh = create_unit_square(MPI.COMM_WORLD, 10, 10)
festim_mesh = F.Mesh(fenics_mesh)
model_barrier.mesh = festim_mesh
# Materials
u = htm.ureg
solubility_alpha_iron = htm.Solubility(
S_0=0.51 * u.mol * u.m**-3 * u.Pa**-0.5,
E_S=27 * u.kJ * u.mol**-1,
)
alpha_iron = F.Material(
D_0=3.87e-8,
E_D=0.04,
K_S_0=solubility_alpha_iron.pre_exp.magnitude,
E_K_S=solubility_alpha_iron.act_energy.magnitude,
)
D_0_PbLi = 4.03e-8
E_D_PbLi = 0.2021
breeder_material = F.Material(D_0=D_0_PbLi, E_D=E_D_PbLi, K_S_0=1.83e21, E_K_S=0.16)
inlet = F.SurfaceSubdomain(id=1, locator=lambda x: np.isclose(x[1], 1.0))
outlet = F.SurfaceSubdomain(id=2, locator=lambda x: np.isclose(x[1], 0.0))
top_volume = F.VolumeSubdomain(
id=1, material=breeder_material, locator=lambda x: x[1] >= 0.5
)
bottom_volume = F.VolumeSubdomain(
id=2, material=alpha_iron, locator=lambda x: x[1] <= 0.5
)
model_barrier.subdomains = [top_volume, bottom_volume, inlet, outlet]
model_barrier.surface_to_volume = {inlet: top_volume, outlet: bottom_volume}
H = F.Species("H", subdomains=model_barrier.volume_subdomains)
model_barrier.species = [H]
model_barrier.interfaces = [
F.Interface(
id=5,
subdomains=[top_volume, bottom_volume],
penalty_term=1e30, # 1e29,1e30 max its' 1e28,27,26,25,24,23,22,21,19 negative
)
]
alpha_Fe_recombination = htm.recombination_coeffs.filter(material=htm.IRON)[0]
model_barrier.boundary_conditions = [
F.FixedConcentrationBC(
subdomain=inlet,
value=9e21,
species=H,
),
# F.FixedConcentrationBC(subdomain=outlet, value=0, species=H),
F.SurfaceReactionBC(
reactant=[H, H],
gas_pressure=0, # assume 0 because vacuum
k_r0=alpha_Fe_recombination.pre_exp.magnitude,
E_kr=0.4,
k_d0=0, # assume 0 because vacuum
E_kd=0,
subdomain=outlet,
),
]
permeation_flux = F.SurfaceFlux(
field=H, surface=outlet, filename="permeation_flux_barrier.csv"
)
inlet_flux = F.SurfaceFlux(field=H, surface=inlet, filename="inlet_flux.csv")
vtx_exports = [
F.VTXSpeciesExport(filename=f"h_{i}.bp", field=H, subdomain=vol)
for i, vol in enumerate(model_barrier.volume_subdomains)
]
model_barrier.exports = [permeation_flux, inlet_flux] + vtx_exports
model_barrier.temperature = 600
model_barrier.settings = F.Settings(
atol=1e-10, rtol=1e-10, transient=False, max_iterations=1000
)
model_barrier.initialise()
set_log_level(LogLevel.INFO)
model_barrier.run()
Expected behavior
Expected iterations to continue to 1000. Instead, stops at 50.
Metadata
Metadata
Assignees
Labels
No labels
