Skip to content

Releases: fkkarakurt/katai2d

KATAI 2D v0.9.0

Choose a tag to compare

@fkkarakurt fkkarakurt released this 31 Aug 20:24

KATAI 2D v0.9.0

Two things this program could not be given, and one thing it could not say.

It could not be given rock. A rock mass had to be entered as a Mohr-Coulomb
fit, which is a straight line through a curve — matchable over a narrow band of
confining stress and wrong outside it in both directions. It now has the
Hoek-Brown 2002 criterion, entered the way a geologist writes it down (σci, mi,
GSI, D) rather than as a c′/φ′ pair somebody had to derive.

It could not be given the ground data itself. Every geotechnical model starts
from borehole logs, and this program could only read polygons — so the logs had
to be redrawn by hand, which is the slowest step in setting a model up and the
easiest place in the whole workflow to put a number in the wrong row. That error
is the one nothing downstream can catch: the mesher meshes the wrong ground,
every phase converges on it, and the answer is a correct solution to a model
nobody meant. Logs are now an input, and the polygons are generated from them.

And a run could not say what its answer had actually satisfied. "Converged"
meant one global force residual. The two criteria beside it in the reference
formulation — the current stiffness parameter, which tightens the test as a
mechanism forms, and the local error at the stress points, which asks whether
the stress a point carries is the stress its own material law would return — had
never been consulted. Both are computed now, both are reported, and a result
file carries which of them were met.


Read this first if you have 0.8.1 files

  • Project files are now .k2d version 18 (from 14), in four steps that each
    added keys: v15 the constitutive integration tolerance, v16 borehole logs,
    v17 the consolidation stop criterion, v18 the rock model. Every one is written
    only when used, so a project that touches none of them produces the same
    bytes 0.8.1 produced. This build reads every older file; older builds refuse
    this one's, which is the version gate doing its job — an older build cannot
    read a rock material or a stop criterion, and would otherwise run a different
    problem from the same drawing.
  • Results files are now .res version 9 (from 6). Same rule: this build
    reads older ones, older builds refuse this one's. Re-open and re-calculate, or
    keep the older build for older result files.
  • SolveResult.stopped_by renamed a value. A solve abandoned because no step
    along the Newton direction reduced the out-of-balance force used to answer
    'mechanism'; it now answers 'stalled line search', because that ending
    happens on well-supported models too and the old name was a claim rather than
    a description. Code that tested stopped_by == 'mechanism' to decide whether
    a load factor is a capacity should read the current stiffness parameter beside
    it instead, as katai.summary() now does.
  • A Hardening Soil answer may move slightly on the same file: the stress-point
    integrator no longer freezes the stress-dependent moduli at the state each
    increment began from, and an increment abandoned for a stalled search is now
    retried with a non-monotone window rather than cut back. Both were adopted
    against a measurement, and both are in the changelog.

Rock, verified where it counts

Hoek-Brown was checked at the material point against the closed forms, then
through the whole path from a .k2d file — and then put into a boundary value
problem, which broke it three ways that element tests cannot see. The model had
never been integrated in axisymmetry at all (a missing switch branch handed the
caller's own values back, so the run merely failed to converge); the tangent was
elastic rather than consistent, which integrates correctly but will not iterate
an ill-conditioned problem to equilibrium; and the retry that would have used a
stronger tangent was armed by a flag that tested for one model by name.

KV-CST-016 is what the repair earned: a circular tunnel in a Hoek-Brown rock
mass under 28 MPa of hydrostatic ground, unloaded in stages, against the
closed-form elasto-plastic ground reaction solution. The radial stress lands on
the closed form to 0.59% inside the plastic annulus and 0.72% outside it.

Four analyses were refused for rock rather than approximated, each in the
schema and in the engine, each with a test: undrained (B) and (C), the safety
phase, EC7 design approaches that reduce a characteristic strength, and interface
strength defaulting to the schema's 1 kPa / 30°. A refusal that also blocks a
working path is another kind of bug, so each refusal test checks that the way
around it still runs.

What a run now says about itself

0.8.1 0.9.0
convergence criteria consulted 1 (global force residual) + current stiffness parameter, + local error at soil, interface and coupling points, + embedded-beam foot force
what the .res file records that it converged which criteria were met, with their values
a mesh that hit its refinement cap silently identical to one that did not says so, with the bound it was asked for
a consolidation phase told a duration can be asked how long until 90%, and answers

Verification

  • 207 automated tests, 69 declared verification cases over 26
    benchmark .k2d files that ship in the repository.
  • The portable composition reproduces the whole suite with the vendored Eigen
    solver — no proprietary component.
  • Full changelog: CHANGELOG.md
  • The record itself: docs/validation/verification-matrix.md

Stated rather than implied

The unsaturated zone is implemented — van Genuchten retention, Mualem relative
permeability, Bishop's χ = S_eff into effective stress, all reachable from the
file — but its verification record covers the saturated limit of that
formulation, not the unsaturated regime itself. Automatic step size from the
iteration band, and arc-length control, are not in this release: both change how
every existing answer is reached, so they open the next line rather than close
this one.


Downloads

file SHA-256
katai2d-0.9.0-win64.zip 57147c8a98e8734a9acfb1096668874628e133fdba7a5115f22230d860382032
katai2d-0.9.0-cp312-abi3-win_amd64.whl 82cab1d8cda73224d1ab3cca76d7d6c5df4f07612cdd2d7f2d92412a197b9441
irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iex
katai info      # KATAI 2D 0.9.0 (2026-08-31)
pip install katai2d-0.9.0-cp312-abi3-win_amd64.whl

KATAI 2D v0.8.1

Choose a tag to compare

@fkkarakurt fkkarakurt released this 20 Aug 09:52

KATAI 2D v0.8.1

Two things a result can be wrong about without looking wrong — and one of them
had been deciding which of the two linear-solver backends was right.

The first is a verdict. A load-controlled analysis that stops short of full
load reports the fraction it reached, and this program was calling that fraction
the soil's capacity whichever of the three ways it had stopped: because no
descent direction existed, because the tangent went singular along a mechanism,
or because the per-increment iteration limit ran out. Only the first two are
statements about the ground. The third is a statement about a setting — and it
was the one KV-STR-004's refined-mesh run was making, on a mesh where the same
model carries its full load once the limit is adequate.

The second is a field. The degree of saturation was drawn, tabulated and
printed for runs that never computed it — a static analysis has no saturation
field, and the reader answered 1.0 when asked anyway. Above a phreatic surface
that is not merely uncomputed; it is certainly wrong. Both reached the
calculation report, which is the document that leaves the building.


If you have .res files from 0.8.0, read this first

  • Results files are now version 6. This build reads every older one; 0.8.0
    and earlier refuse one written by this build, which is the forward-version
    guard doing its job. Re-open the project and re-calculate, or keep the older
    build for older result files. Project files are unaffected — .k2d stays at
    version 14.
  • The per-increment iteration limit is now derived from the material class
    (200 where the tangent is nonsymmetric — nonlinear soil, interfaces, embedded
    beams — and 80 otherwise) instead of always being 80. A run that reported a
    collapse at a low load factor may now converge. To reproduce a 0.8.0 run
    exactly, set that phase's Max iterations to 80.
  • τmax is now τmax (in-plane), and S is no longer offered by runs
    that did not compute it.

What a collapse report says now

An analysis that stops short names which of the three things happened, and only
two of them keep the limit-load reading. The two messages, as the solver writes
them (the numbers are from the runs they were taken from):

Did not fully converge: equilibrated 41% of the applied load. No increment of
the remaining load could be equilibrated at any step size: the tangent
stiffness went singular along a mechanism … This equilibrated fraction is the
incremental limit (collapse) load.

Did not fully converge: equilibrated 0% of the applied load. The last
increment ran out of iterations (4 per increment) while its out-of-balance
force was still falling, so this fraction is a limit of the iteration budget
and NOT a collapse load. Raise the phase's iteration limit and re-run
before reading it as a capacity.

The reason travels with the result — SolveResult.stopped_by in C++, in Python
and in the .res file — so the Studio's panels and both reports ask it instead
of inferring a capacity from a number.

Measurements behind the change

before after
KV-STR-004, refined mesh, MKL converges, 66 s converges, 37 s
KV-STR-004, refined mesh, portable (Eigen) "collapse at 10% of the load" converges
both backends agree on max|u| 0.1822167 m (7 figures)
tension cut-off on / off, same file 561 / 57 Newton iterations

Verification

  • 153/153 on the MKL composition, 151/151 on portable (the vendored
    Eigen solver, no proprietary component) — the first full run of the suite on
    that composition.
  • 58 declared verification cases over 26 benchmark .k2d files.
  • Full changelog: CHANGELOG.md
  • What the backend disagreement was, and what closed it:
    docs/validation/numerical-uncertainty.md §10

Downloads

file SHA-256
katai2d-0.8.1-win64.zip af52d11f38151d71c9652d37f7fd6e330c28e3ff172a637ef2b4fc00282ea6e1
katai2d-0.8.1-cp312-abi3-win_amd64.whl d41169af526eb261b2323048ac9e0cd93cb5171b1b74c248dc5e85928d23ff4a
irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iex
katai info      # KATAI 2D 0.8.1 (2026-08-19)
pip install katai2d-0.8.1-cp312-abi3-win_amd64.whl

KATAI 2D v0.8.0

Choose a tag to compare

@fkkarakurt fkkarakurt released this 18 Aug 20:37

KATAI 2D v0.8.0

Verification release, and the first one in which the Python surface reaches the
whole engine.

Six capabilities — the interface, the plate, the geogrid, the embedded beam,
HS small, and Soft Soil with its creep — were implemented and tested at the
element, but had never been run along the path a user actually takes: from a
file, through the mesher and the driver. Run that way for the first time,
five of the six were wrong. Each one converged, reported success and
returned a number.

The verification record grows from 45 declared cases over 17 input files to
57 cases over 26 files
; the suite is 152 tests. The project file moves
from v12 to v14.


If you script KATAI 2D, read this first

The Python builder now covers the whole model. Before this release a script
could build soil, water, loads and phases — and for a wall, an anchor, a
geogrid, a pile row or an interface you had to drop to the raw bindings and
assemble the material list, the element list and the index between them by
hand. The pleasant layer covered the tutorial and gave up at the first real job.

wall = prj.structures.plate((12, 20), (12, 6), EA=1.2e7, EI=1.0e5,
                            interfaces="both", name="Diaphragm wall")
anchor = prj.structures.anchor((12, 18), (20, 14), EA=2.0e5, spacing=2.5,
                               prestress=300.0)
prj.phases.plastic("Excavate", activate=[anchor], deactivate=[pit])
print(katai.summary(prj.run(), prj))

New on the Python surface: prj.structures (plate · anchor · geogrid · pile ·
interface), katai.summary() and katai.extremes(), the bound structural
forces (StructForce / ForceStation — a wall's moment and a pile's axial
force were previously readable from everywhere except a script),
prj.phases.transient_flow(...) and .fully_coupled(...), and the per-phase
design= (EC7 / TBDY 2018 partial factors) and water= (staged dewatering).

These are new in 0.8.0. If prj.structures raises AttributeError on your
machine, you are on an older wheel — check with python -c "import katai; print(katai.__version__)" and reinstall from the assets below. The release gate
now proves this from the installed wheel: a fresh virtual environment with the
environment scrubbed must run the anchored-excavation example, wall, anchor,
interfaces and all, before the wheel is allowed to leave the build.


Wrong answers this release fixes

Each of these produced a converged run and a green suite.

  • An interface drawn along a fixed boundary was welded shut. Both sides of
    the split sit at identical coordinates, and boundary conditions are applied
    by coordinate, so both were fixed: the block sheared elastically against its
    own base instead of sliding. PLAXIS's own sliding-block case returned
    5,401,612 kN/m where the manual's arithmetic gives 60.
  • Deactivating the soil welded the beams standing in it. The run converged,
    reported "ok" and handed back max|u| = 0.000000e+00 with no diagnostic.
  • HS small rode the virgin backbone — Masing's rule was not applied, and the
    E₀/E_ur ceiling was missing. Measured +5.7% / +12.9% / +34.8% too much
    heave at three unloading sizes.
  • The tension cut-off did not reach the models it belongs to. Every
    Hardening Soil, HS small, Soft Soil and Soft Soil Creep run allowed tension
    past σ_t, while the schema switches the cut-off on by default — a systematic
    difference from the reference code, in the unsafe direction.
  • Every embedded-beam interface spring was 2.5× too stiff, and a pile row
    could not be loaded at its head at all.
  • The installer compared a real hash against the number 55. Windows
    PowerShell 5.1 returns a .sha256 attachment as a byte array without
    -UseBasicParsing, so the integrity check was comparing a hash against one
    byte of itself. It would have "passed" for any file whose hash began with a
    matching byte.

Also new: "Reset small strain" as a phase option (Material Models Manual
sec. 7.6), the Li & Dafalias dilatancy below the phase-transformation line
for HS small, and numerical-uncertainty cases on axes other than the mesh — one
of which measured a prediction of ours wrong and is recorded that way.

Full detail, with the citation for every clause: CHANGELOG.md.


One limitation found while preparing this release, declared rather than quietly fixed

A verification case was asserting a result that only one of the two solver
backends could produce. Halving the element size on the pile-capacity case under
its 1500 kN/m overload converges on the MKL build and returns the pile's
600.0000 kN/m capacity; on the vendored Eigen solver — same source, same file,
same mesh — the run reports a collapse mechanism after equilibrating 10% of the
load. Continuous integration builds the Eigen composition, which is why it had
been red while every local run was green.

The case has been moved to a load where both backends return the capacity
exactly. The disagreement itself is open, and the practical consequence is
worth stating: a number computed within a few percent of a model's own limit
load should be treated as backend-dependent on this build.
Iterative refinement
in the Eigen solver was tried as the obvious fix and did not recover the run, so
it was reverted rather than shipped on a hypothesis the measurement refused. The
whole account, with the measurements, is in
numerical-uncertainty.md §10.


Upgrading

Files are guarded in one direction only. This build reads every older .k2d
unchanged; an older build refuses a v14 file rather than misreading it,
which is the point of the guard — each bump marks an input the older build
would have dropped in silence and solved a different problem for.


Assets

File What it is
katai2d-0.8.0-win64.zip Self-contained command line for Windows: one executable, no runtime dependency, Eigen solver backend.
katai2d-0.8.0-cp312-abi3-win_amd64.whl Python package (pip install), CPython ≥ 3.12, with the katai console script. Verified in a fresh virtual environment.
*.sha256 Checksums, also used by install.ps1.
katai2d-0.8.0-win64.zip
  dedb4dac27ea88bec754050ae0e8026568645df7fed15bd7104d2b7ef45c3908
katai2d-0.8.0-cp312-abi3-win_amd64.whl
  4e19dd9c7943eae6e07dab8d13db7e841c53ad36de3525296955002ca9141a04

The Windows executable is still unsigned, so SmartScreen or Defender may
warn about it — v0.7.0 drew a generic Trojan:Win32/Wacatac.B!ml verdict, which
is what a reputation heuristic says about an unknown unsigned binary rather than
an identification of anything. Verify the checksum above, upload the asset to
VirusTotal if you want an independent opinion, or use the wheel, which has never
been flagged. Code signing is on the roadmap; it is a purchase, not a patch.

KATAI 2D v0.7.1

Choose a tag to compare

@fkkarakurt fkkarakurt released this 09 Aug 21:23

KATAI 2D v0.7.1

Packaging release. No engine change: the same solver, the same results, the
same verification record (150 automated tests, 45 declared verification cases).
If v0.7.0 runs for you, there is nothing new to compute here.

Why this release exists

The v0.7.0 Windows executable shipped with an empty version resource — no
product name, no version, no publisher, no copyright. That is poor practice on
its own, and on a binary that is also unsigned and newly published it is what a
reputation heuristic reads as anonymous: Microsoft Defender flagged
katai2d-0.7.0-win64.zip as Trojan:Win32/Wacatac.B!ml and removed it.

Wacatac.B!ml is a generic machine-learning label, not an identification of any
known malware — the !ml suffix says the verdict came from a heuristic. The
downloaded file's SHA-256 matched the published checksum exactly, so what was
flagged was this project's own build, unmodified.

What changed

  • The executable now declares its product name, version, publisher, copyright
    and origin
    , generated at build time from version.hpp, so the binary's
    Properties tab cannot drift from what katai info prints. The rebuilt
    executable and its zip both scan clean.

That is a mitigation, not a guarantee. An unsigned binary from a project with no
download history can be flagged again by any engine, and the honest answers are:

  • Verify what you downloaded. Every release publishes a SHA-256 beside each
    asset:
    (Get-FileHash .\katai2d-0.7.1-win64.zip -Algorithm SHA256).Hash.ToLower()
  • Get an independent opinion if you want one: the assets are public, so
    uploading one to VirusTotal discloses nothing private.
  • Use the wheel, which has never been flagged:
    pip install katai2d-0.7.1-cp312-abi3-win_amd64.whl.
  • Code signing is on the roadmap; it is the only real fix for the underlying
    reputation problem, and it is a purchase, not a patch.

The detection has been reported to Microsoft as a false positive.

Assets

File What it is
katai2d-0.7.1-win64.zip Self-contained command line for Windows: one executable, no runtime dependency, Eigen solver backend. Smoke-tested with PATH scrubbed to C:\Windows\System32.
katai2d-0.7.1-cp312-abi3-win_amd64.whl Python package (pip install), CPython ≥ 3.12, with the katai console script. Verified in a fresh virtual environment.
*.sha256 Checksums, also used by install.ps1.
katai2d-0.7.1-win64.zip
  7112f4784ee2f6dd1154f183e9d50de91fece59a5e62f8db41d732b8caca7faf
katai2d-0.7.1-cp312-abi3-win_amd64.whl
  572f1c8a2ba1d4b8d6e37472d8c4e75ed29c9da67803e221c5150741e3c7edb5

What is in 0.7.0, if you are coming from 0.6.x

Ten inputs a geotechnical model needs and could not express — wells and drains,
a wall that blocks water, rainfall boundaries, anchor prestress, per-phase water
conditions, Undrained (C), per-material undrained stiffness, a dilatancy
cut-off, a staged-construction target and per-phase numerical controls — plus
the diagnostics that stop an input from being discarded in silence, and a
numerical uncertainty band for published numbers. See the v0.7.0 notes.

KATAI 2D v0.7.0

Choose a tag to compare

@fkkarakurt fkkarakurt released this 09 Aug 20:40

KATAI 2D v0.7.0

Capability release. Ten inputs a geotechnical model needs — and this program
could not express — are now in the file format. Four of them closed a silently
wrong
answer rather than a missing convenience: the analysis ran, converged and
reported a plausible number for a model the engineer had not drawn.

Every closure arrives with a verification case and a citation to the manual
clause it implements. The verification record grows from 27 to 45 declared
cases
over 17 checked-in .k2d benchmark inputs, re-asserted by 150
automated tests
on every build.

What you can model now that you could not

  • Dewatering from inside the model — wells (a prescribed discharge, stopping
    at h_min) and drains (a held head, normal or vacuum), switched per phase.
  • A cut-off wall that actually blocks water — cross permeability on walls and
    interfaces: impermeable, semi-permeable (hydraulic resistance d/k), or fully
    permeable. Until now the flow net ran straight through a diaphragm wall.
  • Rainfall and recharge boundaries — a prescribed flux (Neumann) flow
    boundary condition.
  • An anchored, dewatered excavation as it is actually built — anchor lock-off
    force, and water conditions per phase, so the pit is dewatered before it is
    dug. Every anchored excavation built before this was the model of a slacker,
    weaker structure.
  • Undrained (C) — a total-stress analysis with undrained parameters, for the
    Linear Elastic and Mohr-Coulomb models.
  • Per-material undrained stiffness — the equivalent undrained Poisson ratio
    or Skempton's B, per material, instead of one fixed 0.495 for everybody.
  • A dilatancy cut-off, a staged-construction target (Σ Mstage < 1),
    "ignore undrained behaviour", and per-phase numerical controls so a
    published run carries the numerics it was computed with.

Silently wrong answers this release removes

  • The Hardening Soil family sized its pore fluid from the E/nu boxes that
    model never reads — a factor of 7.6 on an otherwise ordinary data set.
  • A dense sand dilated without limit, over-predicting bearing capacity.
  • Sixteen input paths were discarded without a word — a load drawn above the
    surface, a wall the mesh never sees, a prescribed displacement that catches no
    node. They are now refused or reported through stable diagnostic codes
    (docs/diagnostics.md).
  • A verification case that measured nothing: the strength-reduction search
    hard-coded its own trial tolerance, so a published tolerance sweep had been
    setting a number nothing read. Re-measured with the control connected: the
    factor of safety is bit-identical at and below 1e-3, but +2.0% at 1e-2 and
    +45.6% at 1e-1 — always on the unsafe side.

Numbers now carry a numerical uncertainty

Published results can state how far they are from the exact answer of the same
equations: the Grid Convergence Index after Roache (1994) and Celik et al.
(2008), in the ASME V&V 20 sense, fed by nested (uniform) mesh refinement. No
geotechnical vendor manual defines a discretisation-error estimator; this one is
taken from the verification literature and is itself verified against
manufactured triplets whose answer is known.

Measured with it on the Giroud rigid-footing benchmark: the converged force is
15.244 kN/m ± 0.21%, which is 0.03% from the published PLAXIS 2D value —
while the input file's own mesh reads 0.5% higher. The difference was the mesh,
not the physics.

A factor of safety computed with a non-associated flow rule is mesh-dependent
and falls as the mesh is refined (−7.9% over a fourfold refinement on Griffiths
& Lane). The run says so, on every such phase (K2D-A005).

File format

The project file moves from version 8 to version 12. This build reads every
older .k2d unchanged. An older build refuses these files, which is the point:
each bump marks an input that an older build would have dropped in silence and
solved a different problem for. The .res results format is unchanged (v5).

Assets

File What it is
katai2d-0.7.0-win64.zip Self-contained command line for Windows. One 1.6 MB executable, no runtime dependency, Eigen solver backend. Verified on a scrubbed PATH.
katai2d-0.7.0-cp312-abi3-win_amd64.whl Python package (pip install), Python ≥ 3.12, with the katai console script. Verified in a fresh virtual environment with a scrubbed environment.
*.sha256 Checksums, verified by install.ps1.
katai2d-0.7.0-win64.zip
  b0894263bbc0e5840c6cdd0079542371ed2cf8e6fc00576ace093e8c076e6b58
katai2d-0.7.0-cp312-abi3-win_amd64.whl
  100f504537210bbf36ff5919fba4f379ee09a48342f8dfc22c9932016ed85f14

Compatibility

No breaking change to the Python surface or the command-line contract; both
gained the new inputs. Files written by 0.7.0 are refused by 0.6.x by design.

KATAI 2D v0.6.1

Choose a tag to compare

@fkkarakurt fkkarakurt released this 06 Aug 22:14

KATAI 2D v0.6.1

Patch release. The v0.6.0 release assets were built before the axisymmetric
staged-phase fix landed on main; these binaries catch up with the tree.

Fixed

  • The command line and the Python package refused axisymmetric staged
    (Plastic) phases that the engine itself supports — an over-broad guard.
    The guard is now narrow: what is genuinely unsupported is still refused,
    by name. This is the difference that matters for the published benchmark
    walkthroughs: katai solve tests/corpus/kv-fnd-013-cox-circular-footing.k2d
    runs with these binaries.

Added since the v0.6.0 assets were built

  • Three published benchmarks checked in as plain .k2d corpus files, each
    re-solved and asserted on every build: Cox (1962) circular footing
    (KV-FND-013), Davis & Booker (1973) strip footing on clay with strength
    increasing with depth (KV-FND-014), and Griffiths & Lane (1999) Example 1
    slope (KV-SLP-002). The verification matrix now records 27 cases over 16
    checked-in benchmark inputs.
  • docs/validation/three-published-benchmarks.md — the three cases end to
    end from the command line, with transcripts and reading recipes.
  • docs/validation/plaxis-2d-validation-comparison.md — four problems from
    the PLAXIS 2D Validation Manual, Version 8 (Bentley Systems), reproduced
    input for input: closed form, published PLAXIS 2D value and KATAI 2D
    result side by side.
  • CMake: the test suite is optional for embedders (KATAI_WITH_TESTS,
    default ON); script paths resolve via PROJECT_SOURCE_DIR.

Verification

  • Full suite on the release commit: 133/133.
  • The wheel is exercised in a fresh virtual environment before packaging:
    documented CLI exit codes hold (0/0/0/5) and the slope corpus case
    reproduces its verification band (FoS 1.010).

Assets

File SHA-256
katai2d-0.6.1-win64.zip 2e03b10c3de0ef745b8a797dbf3806fd2236b3b61d83494fb424fb0f13e3ff7e
katai2d-0.6.1-cp312-abi3-win_amd64.whl 94922caac356c699af402cdc08c0283a62926d3176e4994b8c80d15e176c6b2e

The zip is the self-contained command line (win64, static CRT, Eigen
solver backend — no proprietary component, no runtime dependency). The
wheel is abi3 and serves every CPython >= 3.12 on Windows x64. Each asset
ships with a .sha256 file; install.ps1 verifies the hash on install.

v0.6.0

Choose a tag to compare

@fkkarakurt fkkarakurt released this 03 Aug 21:13

KATAI 2D 0.6.0 — the first published version: the engine, the command line,
the Python surface and the verification record.

Install

Command line (Windows x64, self-contained — no dependencies):

irm https://raw.githubusercontent.com/fkkarakurt/katai2d/main/install.ps1 | iex

or unzip katai2d-0.6.0-win64.zip anywhere and run katai.exe.

Python (CPython ≥ 3.12, Windows x64 — one abi3 wheel serves every version;
it ships the katai package and the same katai command line):

pip install katai2d-0.6.0-cp312-abi3-win_amd64.whl

What is in it

  • Staged construction (plastic phases with inherited activation), K0 procedure
    and gravity initial stress.
  • Constitutive models: Linear Elastic, Mohr–Coulomb with a tension cut-off,
    Hardening Soil, HS-small, Soft Soil, Soft Soil Creep; drained, undrained
    (A/B) and non-porous drainage types.
  • Groundwater: steady-state and transient flow with free surfaces and seepage
    faces, Biot consolidation (elastoplastic), fully coupled flow–deformation.
  • Dynamics: seismic time histories with compliant-base and free-field
    boundaries, Rayleigh damping, optional full plasticity during shaking,
    response spectra.
  • Safety: phi–c strength reduction with an honest lower-bound flag.
  • Structural elements: plates with elastoplastic Mp/Np hinges, embedded beam
    rows, node-to-node anchors, geogrids, Coulomb interfaces; 6- and 15-node
    triangles, plane strain and axisymmetric.
  • Design codes: EC7 (EN 1997-1) and TBDY 2018 partial-factor catalogues.
  • The katai CLI (solve / validate / info) with a documented,
    test-pinned exit-code contract; the Python katai.Project builder writes
    the same .k2d contract byte for byte.

Verification

Every capability is checked in CTest against a closed-form solution, an

Verification

Every capability is checked in CTest against a closed-form solution, an
independent computation path that shares no code with the solver, or a
published benchmark — self-consistency does not count. The record is the
generated verification matrix
with its bibliography; the 13 benchmark inputs are checked in under
tests/corpus/. Both artifacts below reproduced the corpus numbers in a
clean environment before upload.

Checksums (SHA-256)

asset sha256
katai2d-0.6.0-win64.zip 83194773834a5fc417a506dd8988917f9e2b67bca16976b341b1199e0a5fc445
katai2d-0.6.0-cp312-abi3-win_amd64.whl 9cd490181175200e370fde4342c0acb60ed2c38918e33511b800a1ac5f84fd16

This release is Windows x64 only. Full changelog:
CHANGELOG.md