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.
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.
Do the steps that follow to see the inspector work.
.f, .for,
.f90 or .f95 file.SUBROUTINE UMAT(...) line.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.
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.
For each argument the inspector gives this information.
| Field | Content |
|---|---|
| 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. |
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.
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.
Use the search box at the top of the inspector to filter the argument list. The search examines the argument name and the description.
ddsdde uses Monaco. Monaco is the editor component of Visual Studio Code. Most Visual Studio Code key bindings operate as you expect.
The editor reads the file extension to find the source form.
| Extension | Form | Rulers |
|---|---|---|
| .f .for .f77 | Fixed | column 6, column 72 |
| .f90 .f95 | Free | none |
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.
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.
Hold the pointer above an argument name to see a short description. This gives the same data as the inspector, at the pointer.
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.
The two buttons at the right of the tab strip do the same thing. Drag the divider between the panes to change their size.
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.
A new pane is empty. To fill it, do one of these three things.
Each pane keeps its own list of open files. A file can be open in both panes at the same time.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
| Command | Shortcut |
|---|---|
| Command palette | Ctrl+Shift+P |
| Go to file | Ctrl+P |
| Open Abaqus Docs | Ctrl+Shift+D |
| FILE | |
| New file | Ctrl+N |
| Open file | Ctrl+O |
| Open folder | Ctrl+K O |
| Save | Ctrl+S |
| Save as | Ctrl+Shift+S |
| Save all | Ctrl+K S |
| Close editor | Ctrl+W |
| Next editor | Ctrl+Tab |
| Previous editor | Ctrl+Shift+Tab |
| LAYOUT | |
| Toggle file explorer | Ctrl+B |
| Split editor right | Ctrl+\ |
| Split editor down | Ctrl+Shift+\ |
| Close split | Ctrl+K W |
| Focus first pane | Alt+1 |
| Focus second pane | Alt+2 |
| EDITING | |
| Find | Ctrl+F |
| Replace | Ctrl+H |
| Go to line | Ctrl+G |
| Toggle comment | Ctrl+/ |
| Add cursor at next match | Ctrl+D |
| Move line up or down | Alt+Up / Alt+Down |
| Rename symbol | F2 |
| Undo / redo | Ctrl+Z / Ctrl+Y |
| Open docs for argument | Shift+Click |
| VIEW | |
| Settings | Ctrl+, |
| Increase font size | Ctrl+= |
| Decrease font size | Ctrl+- |
| Reset font size | Ctrl+0 |
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.
| Template | Model |
|---|---|
| UMAT | Linear elastic |
| UMAT | J2 plasticity |
| UMAT | Drucker-Prager |
| UMAT | Neo-Hookean |
| UMAT | GTN damage |
| UMAT | Viscoelastic, Prony series |
| VUMAT | Explicit material |
| UEL | 4-node quadrilateral |
| UMATHT | Heat transfer |
| UHARD | Hardening law |
| CREEP | Creep law |
| USDFLD | Field variables |
| DLOAD | Distributed load |
| UEXTERNALDB | External database |
A template is an example. Read it before you use it. Do not put a template into production work without a check.
Press Ctrl+, to open the settings. ddsdde keeps the settings on your computer between sessions.
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.
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.
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.
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.
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.
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 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 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.
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.
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 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.
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.
.dll or .so.msg, .sta and .inp filesThese 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.
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 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.
The inspector needs a SUBROUTINE statement. Make sure of
these three conditions.
SUBROUTINE statement.
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.
Inline completion needs an Anthropic API key and a network connection. Press Ctrl+Shift+P and select Anthropic API Key to check the key.
Send a message to flm2127@columbia.edu. Include the version, the steps that cause the defect, and the file if you can share it.