1. Install

ddsdde is available for Windows 10 and Windows 11, on x64 hardware. macOS and Linux versions are not yet available.

Do the steps that follow.

  1. Download the installer from Gumroad.
  2. Run the installer.
  3. If Windows shows a SmartScreen message, click More info. Then click Run anyway.

The installer is not signed with a code-signing certificate. This is the cause of the SmartScreen message. A certificate costs money that this beta does not have.

ddsdde does not need an Abaqus licence. It does not need a Fortran compiler. It does not send your source code to a server.

2. Start

Do the steps that follow to see the inspector work.

  1. Start ddsdde.
  2. Press Ctrl+O.
  3. Select a Fortran file. Use a .f, .for, .f90 or .f95 file.
  4. Move the cursor onto an argument in the SUBROUTINE UMAT(...) line.
  5. Read the panel on the right.

If you have no subroutine file, press Ctrl+Shift+P and select New UMAT from Template. This gives you a complete subroutine that you can read immediately.

3. The inspector

The inspector is the panel on the right of the window. It reads the file, finds each SUBROUTINE statement, and identifies the type. It then shows the arguments of the subroutine at the cursor.

The three facts

For each argument the inspector gives this information.

FieldContent
Description The physical quantity, in plain words.
Units The dimension of the quantity. Abaqus has no unit system. You must keep the units consistent.
Access READ, WRITE or READ/WRITE. READ means Abaqus supplies the value. WRITE means you must calculate it.

Access direction

The access direction is the most important field. If you write to a READ argument, Abaqus ignores the value. If you do not write to a WRITE argument, Abaqus uses whatever was in memory.

In both cases the subroutine compiles. In both cases the analysis runs. The results are incorrect.

Files with more than one subroutine

A Fortran file can contain more than one subroutine. The inspector shows a tab for each subroutine that it finds. The active tab follows the cursor. To hold one tab, click it.

Search

Use the search box at the top of the inspector to filter the argument list. The search examines the argument name and the description.

4. The editor

ddsdde uses Monaco. Monaco is the editor component of Visual Studio Code. Most Visual Studio Code key bindings operate as you expect.

Fixed form and free form

The editor reads the file extension to find the source form.

ExtensionFormRulers
.f .for .f77Fixedcolumn 6, column 72
.f90 .f95Freenone

In fixed form, columns 1 to 5 hold the statement label. Column 6 holds the continuation character. Statements start at column 7 and end at column 72. The rulers show these limits.

Highlighting

The editor gives Abaqus subroutine names and known argument names a separate colour. Your own variables keep the default colour. You can thus see which names come from the Abaqus interface.

Hover

Hold the pointer above an argument name to see a short description. This gives the same data as the inspector, at the pointer.

Split view

You can divide the editor into two panes. Use a split to compare two subroutines, or to keep a template beside the file that you write.

  • Press Ctrl+\ to split to the right. The two panes are then side by side.
  • Press Ctrl+Shift+\ to split down. The two panes are then one above the other.
  • Press Ctrl+W to close the split.

The two buttons at the right of the tab strip do the same thing. Drag the divider between the panes to change their size.

The focused pane

One pane has the focus. A blue mark on its tab strip shows which one. Click in a pane to give it the focus, or press Ctrl+K to move the focus to the other pane.

The inspector, the status bar, Ctrl+O and Ctrl+S all apply to the focused pane. The argument list on the right thus always agrees with the file that you edit.

Put a file in the second pane

A new pane is empty. To fill it, do one of these three things.

  • Press Ctrl+Shift+P and select Move File to Other Pane. This puts the current file in the other pane. Use it to look at two parts of one long subroutine.
  • Click a file in the file explorer.
  • Press Ctrl+O and select a file.

Each pane keeps its own list of open files. A file can be open in both panes at the same time.

Completion

Inline completion needs an Anthropic API key. To add a key, press Ctrl+Shift+P and select Anthropic API Key. The key stays on your computer. If you add no key, every other function continues to operate.

5. The reference

Click Abaqus Docs at the right of the top bar, or press Ctrl+Shift+D. A window opens above the editor. Click the expand control in its title bar to make it fill the screen. Press Esc to close it.

The window holds a page for each of the 20 subroutine types and a page for each of their 346 arguments. It also holds pages for the Fortran intrinsic functions that occur most in subroutine code.

Two views of each subroutine

Each subroutine has two kinds of page. Full reference is one long document that covers the whole routine: when Abaqus calls it, the component ordering, the finite-strain rules, the common mistakes, and every argument grouped by access direction. The argument pages below it cover one variable each.

Use the full reference when you learn a subroutine. Use the argument pages when you write code and need one fact.

The section order follows the Abaqus User Subroutines Reference Guide, so each topic is where you expect it. The text is written by the ddsdde project.

Shift+Click an argument

Hold Shift and click an argument name in the editor. The window opens at the page for that argument. This is the fastest route from code to documentation.

The subroutine at the clicked line selects the correct page. If you Shift+Click PROPS in a VUMAT, you get the VUMAT page, not the UMAT page.

A word that is not a known argument does nothing. Shift+Click on your own variables is thus safe.

Search

The search box is at the top of the window. Press Ctrl+F to move the cursor to it. The search examines every page. Type an argument name to go straight to it, or type a phrase such as yield stress to find the pages that discuss it.

Contents

The tree on the left lists the subroutine types. Click a type to expand it and to see its arguments. The tree opens the type that contains the page you read.

Follow cursor

Click Follow cursor in the title bar to turn on this mode. The window then shows the argument at your cursor in the editor, and it changes as you move. Use this mode when you read an unfamiliar subroutine. Turn it off to read a page while you type.

Cross-links

Argument names in the text are links. Click a name to go to its page. Use the back control in the title bar to return.

What this reference is not

This reference is written by the ddsdde project. It is not a copy of the Abaqus manual, and it does not replace it. The Abaqus documentation is copyright Dassault Systemes, and ddsdde does not redistribute it. Each subroutine page has a link that opens the official manual in your browser.

6. Commands

The top bar has no buttons. Press Ctrl+Shift+P to open the command palette. The palette lists every command with its shortcut.

Press Ctrl+P to go to a file. This dialog lists your open editors first, then your recent files. It matches on any part of the name, so elum finds elastic_umat.f. Type > to change to the command palette.

The shortcuts follow Visual Studio Code. If you come from Visual Studio Code, your key bindings operate as you expect. The editing shortcuts are supplied by Monaco, which is the Visual Studio Code editor component.

CommandShortcut
Command paletteCtrl+Shift+P
Go to fileCtrl+P
Open Abaqus DocsCtrl+Shift+D
FILE
New fileCtrl+N
Open fileCtrl+O
Open folderCtrl+K O
SaveCtrl+S
Save asCtrl+Shift+S
Save allCtrl+K S
Close editorCtrl+W
Next editorCtrl+Tab
Previous editorCtrl+Shift+Tab
LAYOUT
Toggle file explorerCtrl+B
Split editor rightCtrl+\
Split editor downCtrl+Shift+\
Close splitCtrl+K W
Focus first paneAlt+1
Focus second paneAlt+2
EDITING
FindCtrl+F
ReplaceCtrl+H
Go to lineCtrl+G
Toggle commentCtrl+/
Add cursor at next matchCtrl+D
Move line up or downAlt+Up / Alt+Down
Rename symbolF2
Undo / redoCtrl+Z / Ctrl+Y
Open docs for argumentShift+Click
VIEW
SettingsCtrl+,
Increase font sizeCtrl+=
Decrease font sizeCtrl+-
Reset font sizeCtrl+0

7. Templates

A template is a complete subroutine that compiles. Use a template as a start point, or as an example to read.

To insert a template, press Ctrl+Shift+P and select New UMAT from Template.

ddsdde supplies 14 templates. Six of them are UMAT.

TemplateModel
UMATLinear elastic
UMATJ2 plasticity
UMATDrucker-Prager
UMATNeo-Hookean
UMATGTN damage
UMATViscoelastic, Prony series
VUMATExplicit material
UEL4-node quadrilateral
UMATHTHeat transfer
UHARDHardening law
CREEPCreep law
USDFLDField variables
DLOADDistributed load
UEXTERNALDBExternal database

A template is an example. Read it before you use it. Do not put a template into production work without a check.

8. Settings

Press Ctrl+, to open the settings. ddsdde keeps the settings on your computer between sessions.

  • Theme — 21 themes, eighteen dark and three light. You can also change the theme from the command palette.
  • Font size — 8 to 36 points.
  • Word wrap — on or off.
  • Minimap — on or off.

The settings dialog also shows a compiler path and compiler flags. These two fields have no effect in this release. They stay for the build function, which is not available now. Refer to section 9.

9. Model verification

ddsdde can hold a constitutive model as structure rather than as text: equations, parameters, state variables and assumptions, each with a record of where it came from. From that structure it writes the subroutine and then checks it.

This part of the program is built and tested, but it is not yet reachable from the interface. It arrives in the next release. Refer to section 10.

What the model holds

Every value carries a source: a person typed it, a paper supplied it, or a model inferred it. A value from a paper carries the locator, such as an equation number and a page. A value that was inferred carries a confidence. This is what lets a report state where each number came from.

Each object also has a stable identifier. Generated code cites those identifiers, so a line of Fortran can be traced back to the equation that produced it.

Reading a paper

ddsdde can read a paper and propose a model from it. The proposal is not a model. Every field holds a value, a quote from the paper, and a confidence, and it becomes part of your model only when you accept it.

Every quote is searched for in the paper before you see it. The search allows for paraphrase and for the damage a PDF reader does to text: words broken across lines, ligatures, and typographic punctuation. A claim the paper does not contain is blocked and cannot be accepted in bulk.

Numbers get a second check. The value itself must appear in the paper, in one of the forms a paper prints it. A quote can be true and still say nothing about whether a value is 250 or 520.

The strongest signal is a confident claim with no supporting text. That combination is reported differently from a weak citation, because it is the signature of an invented field, and it is the one failure that no later check can find. Generated code from an invented parameter compiles, converges and passes every verification test.

What the paper does not say is reported as plainly as what it does. A paper that omits its elastic constants is normal. A tool that fills them in from experience is not.

Your key

The request goes from your machine using your own API key. ddsdde runs no service and does not see the document. The estimated size of the request is shown before anything is sent, and each response is stored locally so the same paper is not paid for twice.

What you still decide

  • Which proposals to accept, correct or reject
  • The order the equations are evaluated in, which a paper does not give
  • Which steps need a local solve
  • The solver interface, because papers do not describe UMAT

An accepted field records that the paper stated it, with the page and the locator. A field you corrected records that you stated it. That distinction is what a report is built on.

The generated subroutine

The generator writes fixed-form Fortran 77. Statements stay inside column 72. Real constants carry a D0 suffix. Array subscripts and loop bounds use integers. The file is plain ASCII.

Scalar equations are compiled from the notation you wrote. A hardening law becomes an assignment, and its derivative is worked out for you. That derivative is what a local Newton solve needs, and it is also what the consistent tangent needs at the end of the increment.

Tensor operations come from a verified template. The deviatoric split, the equivalent stress, the return mapping and the tangent assembly hold the Voigt conventions and the engineering-shear factors. The generator reports which equations it compiled and which the template supplied.

The material Jacobian check

The program perturbs the strain increment, runs the stress update again, and builds a numerical Jacobian from the result. It compares that against the DDSDDE the subroutine returns, at ten states: elastic, first yield, developed plastic flow, unloading, biaxial, shear, and combinations.

A disagreement is named where possible. The program applies known mistakes as transforms and reports the one that reconstructs the reference matrix. It also reports what the error costs: quadratic convergence, a set number of extra iterations, or a cutback.

A pass here means the Jacobian is the derivative of the stress update in the same subroutine. It does not mean the stress update is correct. That is a separate question, and the tests below answer it.

The verification tests

Twenty-seven tests, each with a criterion stated before it runs. Every result carries a verdict, the observed number, the likely cause and the model artifacts to look at.

  • Elastic. The four moduli, reversibility below yield, path independence.
  • Yield. Where flow starts, and whether the surface has the declared shape.
  • Flow. Plastic volume change, and the direction of plastic strain.
  • Hardening. The post-yield slope, reverse yield, and stability under cycling.
  • State. Variables that stay put below yield, move above it, and never unwind.
  • Thermodynamics. Plastic work over a full cycle.
  • Discretisation. One increment against sixty-four, and convergence under refinement.

A test that does not apply is reported as such, with the reason. A rotation test does not run on a small-strain model. A test that needs a value the model did not declare says which value it needs.

The single-element job

The last step runs on your machine. ddsdde writes an Abaqus input file with one element, boundary conditions that give a uniaxial stress state, and a table of the stress expected at each strain level. It also lists what to look for in the message file, because the convergence history is the only place the Jacobian quality becomes directly visible.

10. Limits

This release does one job: it helps you write a subroutine. It does not compile, test or run anything.

These functions are not in this release.

  • Compilation of a subroutine to a .dll or .so
  • Abaqus job control
  • Analysis of .msg, .sta and .inp files
  • The STATEV manager and the interface checker
  • The unit checker and the hardening-curve tool

These functions were in an earlier release. They are removed from the program, but they are not deleted from the source. The plan is to return them one at a time, after UMAT support is correct.

Built, but not yet in the interface

Everything in section 9 is written and tested. It is not yet wired to a screen, so you cannot reach it from this release. It is listed separately from the removed functions above because the two are different: one set is waiting for a user interface, the other is waiting to be rebuilt.

  • The constitutive model schema, with provenance on every value
  • Extraction of a model from a paper, with every claim checked against the text
  • Generation of a UMAT from a model, with each line traced to its equation
  • The material Jacobian check, at ten states, with named faults
  • Twenty-seven verification tests with verdicts and implicated artifacts
  • The single-element Abaqus deck, with its acceptance table

Argument data

The argument data covers 20 subroutine types. Every argument has a description, a unit and an access direction. UMAT has the most detail, because UMAT is the primary target of this release.

11. Problems

The inspector shows nothing

The inspector needs a SUBROUTINE statement. Make sure of these three conditions.

  • The file contains a SUBROUTINE statement.
  • The subroutine name is one of the 19 known types.
  • The cursor is inside the subroutine.

The columns are in the wrong place

The editor selects the source form from the file extension. A free-form file with a .f extension gets fixed-form rulers. Change the extension to .f90.

Completion does not operate

Inline completion needs an Anthropic API key and a network connection. Press Ctrl+Shift+P and select Anthropic API Key to check the key.

Report a defect

Send a message to flm2127@columbia.edu. Include the version, the steps that cause the defect, and the file if you can share it.