Skip to content

[BUG] Max Iterations ignored when set in discontinuous problem #1054

@kaelyndunnell

Description

@kaelyndunnell

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.

Screenshots
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions