最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

【入门篇】软件与Fortran语言——Abaqus子程序 notes(1) 1212025

业界 admin 4浏览 0评论

目录

1 软件操作问题

1.1 Fortran文件格式转换(fortran77↔fortran90)

1.2 Abaqus2016打开前的许可文件设置

1.3 Abaqus导入.inp文件

1.4 命令行报错:不是内部或外部命令,也不是可运行的程序

1.5 VS code 调试时显示无对应驱动,是否需要从商店搜索扩展 

1.6 Abaqus与VS code验证软件安装与子程序关联

1.8 Abaqus 子程序提交命令方法(cae,命令行,批处理,cmd)

1.9 CAE快捷方式修复

2 编程问题

2.1 Fortran语言扩展名

 2.2 报错:Cannot open included file 'VABA_PARAM.INC'

2.3 报错:Unclassifiable statement

2.4 报错:Expected a right parenthesis in expression

3 碎碎念+随笔


工具:

VS2012+Fortran2013+Abaqus2016

由于太长不好找,可能之后会把案例实操单独放另一篇。以及辱骂一下,之前写了几天写到1.5w的全没存上草稿箱,现在只剩8k了,我恨……

1/14更新:已经把案例学习单开一篇了,专门读代码记笔记。这篇就只放零碎问题。


1 软件操作问题

1.1 Fortran文件格式转换(fortran77↔fortran90)

【跟兵哥学ABAQUS子程序2-如何使用VS编写Fortran】https://www.bilibili/video/BV19Q4y1U7FR/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

个人安装路径,记事本打开:

G:\APP\Abaqus2016\Program1\win_b64\SMA\site

*未设置格式,因常用固定格式,暂不需要自由格式。

在线F77转F90工具-鹅毛笔ForQuill:

鹅毛笔ForQuillhttp://quill.fcode/

1.2 Abaqus2016打开前的许可文件设置

Abaqus2016安装教程-软件管家https://mp.weixin.qq/s?__biz=MzA4MjU4MTg2Ng==&mid=2247552100&idx=4&sn=71e9440e30b8b391aba57173f8a01e98&chksm=9f81cc61a8f645774162cebd7df828a31cf688f7a994c40c76d2bf9844b375b9becac896f0c6&scene=178&cur_album_id=3421667922500681732#rd

步骤第20条~第23条:设置lmtools工具。

1. 以管理员身份运行桌面快捷方式。原文件路径:

C:\SIMULIA\License\2016\win_b64\code\bin

2. 点击【Config Services】,点击【Browse】选择【对应的文件】(如下图所示,从上往下依次是:lmgrd.exe、abaqus.lic、abaqus.log),点击【Save Services】。弹出的确认窗口点击【是】。 

*由于已设置好,则直接单击⑤【Save Services】,单击【是】确认。

3. 点击【Start/Stop/Reread】,点击【Start Server】,显示【Server Start Successful】后点击右上角【X】退出。

4. 直接Abaqus CAE桌面快捷方式,管理员身份运行。

1.3 Abaqus导入.inp文件

1. 设置许可认证,打开空白Abaqus。

2. 导入模型:.inp文件(Abaqus输入文件)

File>Import>Model

*该案例(AM-HEA)中,README文档中备注的example文件为.inp文件。

1.4 命令行报错:不是内部或外部命令,也不是可运行的程序

Powershell试着运行命令行,无法直接唤起abaqus运行。尝试该方法:

cmd运行abaqus 出现‘abaqus’不是内部或外部命令的错误提示http://zhidao.baidu/question/1604414788219138427

A:

首先不是在电脑自带的常规cmd中运行,要到abaqus command中运行,如果还是提示相同问题,那么你就要自己手动把abaqus的主程序所在路径添加到系统的path环境变量中去,OK!

Q:

abaqus的主程序所在路径是不是在开始中,abaqus cae右键属性快捷方式目标中的内容?  系统的path环境变量有很多软件的路径,但是没有abaqus的,我把“开始中,abaqus cae右键属性快捷方式目标中的内容”复制到path环境变量中去,中间用分号分隔,这样的操作对吗?

A:

不是目标里的内容,而是目标指向的那个bat文件所在的文件夹,比如我的abq6111.bat文件所在的文件夹路径是D:\SIMULIA\Abaqus\Commands,把这个加到系统path变量中去,用英文分号隔开不同路径。

然而不知道是否需要重启电脑才能生效,未解决。

记一下尝试过的路径,黔驴技穷了属于是qwq:

1 

G:\APP\...\SIMULIA\CAE

!这个是Powershell窗口直接报错的.bat文件路径,可能是安装的时候失败又换路径重装的问题,路径混乱。原报错命令如下:

'"G:\APP\...\SIMULIA\CAE\abq2016.bat"' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

2 

G:\APP\Abaqus2016\CAE2016\win_b64\resources\install\cae

!按上述方法操作的桌面快捷方式指向的.bat文件的文件夹路径。

3

G:\APP\...c\WINX64\_SolidSQUAD_\SIMULIA

4

G:\APP\Abaqus2016\CAE2016

5

C:\SIMULIA\License\2016\win_b64\code\bin

6

G:\APP\Abaqus2016\CAE2016\win_b64\code\bin

*尝试很多方法无果,最终决定最简单的方法是重装。为了解惑,找了b站大佬重装软件,并搞清楚了一些问题。

大佬同时给了很多自己录的教程。附大佬自己的abaqus2016版安装与vs code关联教程如下:

【abaqus2016+vs+fortran子程序安装关联全过程】https://www.bilibili/video/BV1eZ4y1M76M/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971*修改环境变量的路径时,一定不能双击后直接输入,否则会覆盖掉先前添加的路径。应选中Path,点击编辑,再选择相应的路径添加/删除/修改。

*win识别路径是按照从上到下的顺序的。如果重装的时候没有删除顺序在前的错误路径,则会直接读取错误路径并报错。应当删除顺序在前的无效路径后,再添加正确路径。

*其他可能需要添加环境路径的文件路径:

MinGW:

含gdb,gcc等,如果在cmd窗口运行 --version发现已安装却找不到的时候,可以尝试添加这个路径。

亲测网上教程很多乱七八糟的配置都不必要,因为现在MinGW整合了,从官网下好安装包即可一键配置好Fortran必备的环境。

G:\APP\...\mingw\mingw64\bin

1.5 VS code 调试时显示无对应驱动,是否需要从商店搜索扩展 

已经装好了Modern Fortran,仍然报这个错。最终发现该扩展未激活,因为激活命令冲突。

删除命令冲突的扩展后,显示激活。

亲测现在绝大多数Fortran教程中要求安装的扩展均为多余,会导致命令冲突,只需要保留如下三个扩展即可,注意前两个为Modern Fortran的运行基础:

1.6 Abaqus与VS code验证软件安装与子程序关联

原本重装后按网上例子找了个验证方法,但装系统的大佬说不对。

大佬原话:

首先这种验证方式是很不合适的,甚至是错的

2016这个版本比较特殊

想同时命令提交子程序和cae界面提交子程序有点麻烦,但能搞定

官方开发混乱的问题,他们自己也知道,2018以后就改了

大佬手动帮忙改了一些设置才ok。感谢售后这么完善的大佬!

目前配置和参考链接:

Windows 10/11下使用VSCode进行Fortran程序开发 - 泊舟坞https://www.pramsin.site/archives/tutorial/805/这个链接已失效,找不到原文地址了。但是拿来验证的案例的 fortran 程序,和工作区中 .vscode 文件夹的配置是按这篇文来的。

launch.json:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Fortran: Debug (launch)",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "internalConsoleOptions": "neverOpen",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "G:/APP/PolyU Academic/mingw/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "gfortran.exe build active file"
        }
    ]
}

tasks.json:

{
    "tasks": [
        {
            "type": "shell",
            "label": "gfortran.exe build active file",
            "command": "gfortran.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "G:/APP/PolyU Academic/mingw/mingw64/bin"
            }
        }
    ],
    "version": "2.0.0"
}

验证案例(.f90):

! https://www.pramsin.site/archives/tutorial/805/

program array_slice
    implicit none

    integer :: i
    integer :: array1(10)  ! 1D integer array of 10 elements

    array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  ! Array constructor
    array1 = [(i, i = 1, 10)]  ! Implied do loop constructor

    print *, array1(1:10:2)  ! Print out elements at odd indices
    print *, array1(10:1:-1)  ! Print an array in reverse
end program array_slice

打个断点可以暂停在左边窗口查看变量。

下面链接的博文的方法没用上,但是提供了一些思路,记一下:

【vs code】Modern Fortran插件设置https://blog.csdn/qq_42988706/article/details/132131678?fromshare=blogdetail&sharetype=blogdetail&sharerId=132131678&sharerefer=PC&sharesource=weixin_50797997&sharefrom=from_link用 VS Code + MSYS 搞定 Windows 上的 Fortran 开发https://stblog.penclub.club/posts/Fortran/#python-%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE

1.8 Abaqus 子程序提交命令方法(cae,命令行,批处理,cmd)

参考大佬教程:

【干货!Abaqus子程序模型提交的几种方式综述(cae,命令行,批处理,cmd)】https://www.bilibili/video/BV1aG4y1n7kY/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

  • cae直接提交

直接打开.cae文件,或.inp文件,创建job,提交。

  • 命令行(Abaqus command)

快捷方式所在路径(跟cae同一个路径,开始菜单的Dassault Systemes SIMULIA Abaqus CAE 2016文件夹下):

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Dassault Systemes SIMULIA Abaqus CAE 2016

手动放到桌面了。

提交工作的代码:

cd G:\Study\...\...

abaqus job=test user=program_name int

cd跳转到工作文档。

job输入.inp文件的工作名,user输入子程序名,int让命令行窗口显示计算过程。

*该方法输入的工作文件均为.inp文件。因为.cae受限于abaqus版本,可能报错,所以.inp比较好。

  • cmd(免手动路径转换,基于命令行)

在工作文档的路径处输入cmd,直接回车,即直接在本文档路径下打开命令行窗口。

  • 批处理(基于命令行)

新建文本文档,改为.rat文件,放在.inp等文件所在的工作文档下。编辑,输入:

call abaqus job=test1 user=test1 int cpus=2

cpus输入的是计算要求的cpu数量,自定义。

若需要让abaqus同时跑多个工作:

cmd/c abaqus job=test1 user=test1 int cpus=2
cmd/c abaqus job=test2 user=test2 int cpus=2
...
cmd/c abaqus job=test_n user=test_n int cpus=2

*不能用call,因为多个工作时算完第一个就闪退。

1.9 CAE快捷方式修复

应该是大佬改命令行的时候动了属性的问题,想自己先琢磨改一下,遂记录。

存档:

Abaqus CAE属性:

目标:

"C:\Program Files (x86)\Intel\Composer XE 2013\bin\ipsxe-comp-vars.bat" intel64 vs2012 & "G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\launcher.bat" cae || pause

*应该是这个地方加了Fortran关联,所以不能直接快捷方式启动。

起始位置:

G:\temp

文件所在位置:

C:\Program Files (x86)\Intel\Composer XE 2013\bin\ipsxe-comp-vars.bat

以上为原快捷方式属性。

看了一下不敢乱动大佬改过的,唯恐出错,遂自己桌面右键新建快捷方式。

键入对象位置:

"G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\launcher.bat" cae || pause

完成。试着右键管理员运行。

应该ok了,目测没啥问题,试着导了个.inp文件也没毛病。

看着不顺眼改了一下图标,名字就没改了,便于区分原快捷方式。

图标位置:

G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\abq.ico


2 编程问题

2.1 Fortran语言扩展名

常见后缀文件:

  •  .f

固定格式 Fortran 77。

常用于unix系统。

使用一定的列限制(如第一列用于注释,1-5 列用于行号,6 列用于继续行标记,7-72 列用于代码,73-80 列通常可以用作行号,但不再使用)。

  •  .for

自由格式 Fortran 77。

常用于win系统。

不受列约束。

在某些环境中,可以是 Fortran 90 或更高版本的代码。

  •  .f90

自由格式 Fortran 90。

引入新特性,如模块和面向对象编程,语法更加灵活。

  •  .f95

自由格式 Fortran 95。

包含F90所有特性,并引入新特性。

  •  .f03 .f08 .f202x等

自由格式 Fortran 2003、2008、202x。

新标准引入新特性。

  •  .F .F90(大写)

这些文件通常带有预处理器,适用于 Fortran 代码中的 C 风格预处理指令(如 #include)。

编译前会经过预处理,可以用于包含头文件或条件编译。

格式:

固定格式

  • 列限制:固定格式对代码的列位置有严格要求。第一列用来标记注释(如有字符则此行被视为注释),格式为:
    • 列 1-5:行号(可选)。
    • 列 6:继续行指示符(例如,&)。
    • 列 7-72:实际代码。
    • 列 73-80:通常用于行号,但可以省略。
    PROGRAM HELLO  
    PRINT *, 'Hello, World!'  
    END PROGRAM HELLO

自由格式

  • 排版灵活:自由格式不需要严格的列限制。代码可以在任何地方开始和结束,通常使用空格和缩进来增强可读性。

  • 新特性:自 Fortran 90 开始,引入了新的话语和结构,更容易使用现代编程的风格。

program hello  
    print *, 'Hello, World!'  
end program hello

转换示例

! 固定格式  
    PROGRAM HELLO  
    PRINT *, 'Hello, World!'  
    END PROGRAM HELLO
! 自由格式  
program hello  
    print *, 'Hello, World!'  
end program hello

 2.2 报错:Cannot open included file 'VABA_PARAM.INC'

在vs code里运行主程序(.for),终端报错如下:

Fatal Error: Cannot open included file 'VABA_PARAM.INC'
compilation terminated.

首先查到这两个讨论:

报错:选定的主变量在当前帧中对于当前显示组中的任何元素均不可用。The selected Primary Variable is not available in the current frame for any elements in the current display group.https://www.researchgate/post/Can_anyone_help_with_an_error_running_UMAT_subroutine_in_ABAQUS报错:错误 #5102: 无法打开包含文件 'ABA_PARAM.INC'。error #5102: Cannot open include file ‘ABA_PARAM.INC’https://www.researchgate/post/How-to-solve-an-error-during-compilation-of-an-Abaqus-Subroutine

总结:

在函数SUBROUTINE后添加这行代码:

INCLUDE 'ABA_PARAM.INC'

该文件处理实值变量的单/双精度问题。

*案例的主程序代码中为VABA_PARAM.INC。猜测:vumat与umat不同,且需要手动添加该文件到某文档中。

*案例所用精度为单精度。

不同版本该文档所在位置不同。

Q:

Dear Sir, I have followed the video and getting pass message for product verification of subroutine. I have two include files in "C:\SIMULIA\CAE\2016\win_b64\SMA\site" directory named as 'aba_param_dp' and 'aba_param_sp' but not 'ABA_PARAM '. I have added the path of this directory to Visual studio ( 'Solution Explorer>Properties page>Fortran>General>'Additional Include Directories'). but same error because no 'ABA_PARAM ' in the "site". I am getting frustrated. Kindly help.
亲爱的先生,我已按照视频并获取子程序产品验证的通过消息。我在“C:\SIMULIA\CAE\2016\win_b64\SMA\site”目录中有两个包含文件,名为“aba_param_dp”和“aba_param_sp”,但不是“ABA_PARAM”。我已将此目录的路径添加到 Visual Studio(“解决方案资源管理器>Properties 页>Fortran>General>'附加包含目录”)。但同样的错误,因为“站点”中没有“ABA_PARAM”。我越来越沮丧了。请帮忙。

A:

Try changing ABA_PARAM to ABA_PARAM_DP then.
那么尝试将 ABA_PARAM 更改为 ABA_PARAM_DP。


Q:

Sir, Thank you very much. After using 'ABA_PARAM_DP' I am getting only one error " error LNK2019: unresolved external symbol _MAIN__ referenced in function _main libifcoremdd.lib(for_main.obj)" which is what you mentioned in your comment. But how should I get rid of it? I did not understand the term " telling the compiler that it should create an intermediate file (.OBJ), and not a final executable (.EXE)". Kindly tell the steps to follow.
先生,非常感谢您。使用“ABA_PARAM_DP”后,我只收到一个错误“错误 LNK2019:函数 _main libifcoremdd.lib(for_main.obj) 中引用的无法解析的外部符号 _MAIN__”,这就是您在评论中提到的内容。但我该如何摆脱它呢?我不理解术语“告诉编译器它应该创建一个中间文件(.OBJ),而不是最终的可执行文件(.EXE)”。请告知要遵循的步骤。

A:

I still recommend you follow the standard procedure (i.e. letting Abaqus do the compilation for you) with the recent changes, and let me know about the errors (if any) in the Abaqus logs.
我仍然建议您遵循标准程序(即让 Abaqus 为您进行编译)以及最近的更改,并让我知道 Abaqus 日志中的错误(如果有)。


If anyone got an error regarding aba_param.inc not found then write aba_param_dp.inc instead of aba_param.inc in UMAT code and place aba_param_dp.inc file into your working directory. It will work.
如果有人收到有关 aba_param.inc 未找到的错误,请在 UMAT 代码中写入 aba_param_dp.inc 而不是 aba_param.inc,并将 aba_param_dp.inc 文件放入您的工作目录中。它会起作用的。

单精度 = SP,双精度 = DP

题主的最终回复,建议不用编辑器,直接abaqus编译:

Guys! I have found the solution to the problem. Thank you Farshid Mossaiby sir for helping me in finding the solution. This is the common problem when one starts learning UMAT. The solution to the above problem is that you should run the UMAT FORTRAN subroutine in Abaqus itself, not in the visual studio. If your file aborts or gets a compilation error, go to your Abaqus working directory and see the text file. There you will see that which line has the problem. Now go to your UMAT code and correct it then again run the Abaqus file with UMAT. Using this trial and error method, your UMAT code will be corrected after which it will not give any compilation error (This is what I did, There may more shortcut method available). Some author suggests a PRINT statement in your UMAT code. All the best.
伙计们!我已经找到了问题的解决方案。感谢 Farshid Mossaiby 先生帮助我找到解决方案。这是刚开始学习UMAT时常见的问题。上述问题的解决方案是您应该在 Abaqus 本身中运行 UMAT FORTRAN 子例程,而不是在 Visual Studio 中。如果您的文件中止或出现编译错误,请转到 Abaqus 工作目录并查看文本文件。在那里您将看到哪一行有问题。现在转到您的 UMAT 代码并更正它,然后再次使用 UMAT 运行 Abaqus 文件。使用这种试错方法,您的 UMAT 代码将得到纠正,之后不会出现任何编译错误(这就是我所做的,可能还有更多快捷方法可用)。一些作者建议在 UMAT 代码中使用 PRINT 语句。一切顺利。


Compilation error is because there is some error in your UMAT. when you run it in Abaqus (see youtube videos on how to use UMAT in Abaqus) a text file (or log file) is generated where errors are given. Correct your UMAT as per that file then again use updated UMAT in Abaqus. use this trial and error method.
编译错误是因为您的 UMAT 中有一些错误。当您在 Abaqus 中运行它时(请参阅有关如何在 Abaqus 中使用 UMAT 的 YouTube 视频),会生成一个文本文件(或日志文件),其中给出错误。根据该文件更正您的 UMAT,然后再次在 Abaqus 中使用更新的 UMAT。使用这种试错方法。


Q:

Please is there a way one can know if code is written is correct before running it on Abaqus?
请问有没有一种方法可以在 Abaqus 上运行之前知道编写的代码是否正确?

A:

If you mean the functionality, there is no way to know, even AFTER running the code. If you mean 'just the syntax', you might try compiling it outside Abaqus. Of course, you still need the include files and you cannot 'link' the code to make an executable.
如果您指的是功能,则即使在运行代码之后也无法知道。如果您的意思是“只是语法”,您可以尝试在 Abaqus 之外编译它。当然,您仍然需要包含文件,并且无法“链接”代码来生成可执行文件。

另一个思路:如果未找到该文件(.inc):

In your UMAT subroutine, replace include 'aba_param.inc'
with
implicit real*4(a-h,o-z) (for single precision)
or
implicit real*8(a-h,o-z) (for double precision)
Be careful, the above statement indicates that all the variables starting with a-h or o-z will be treated as real variables.

在您的 UMAT 子例程序中,将include 'aba_param.inc'替换为
隐式实数*4(ah,oz) (对于单精度)
或者
隐式实数*8(ah,oz) (对于双精度)
注意,上面的语句表示所有以 ah 或 oz 开头的变量都将被视为实变量。


یه جایی داخل کد مخرج کسر صفر میشه. باید خط به خط بررسی کنی و فایل دات لوگ را چک کنی بعد یه 1*10^-8بهش اضافه کنی ایراد حل میشه
在代码中的某个位置,分数的分母变为零。你必须逐行检查并检查.log文件,然后在其中添加1*10^-8,问题就解决了。

另一个相关链接:

连接 ABAQUS 与 Fortran。Linking ABAQUS with Fortran.https://imechanica/node/11416似乎多半都出问题在abaqus和fortran的链接上。

关于精度的链接:

Fortran 函数中单精度,双精度不匹配的错误https://blog.csdn/u012063703/article/details/51496248?fromshare=blogdetail&sharetype=blogdetail&sharerId=51496248&sharerefer=PC&sharesource=weixin_50797997&sharefrom=from_link通过这个链接,判断案例所用为单精度,因为出现了1.1d0的表达。

本人最直接的思路其实是,搞到这个缺失的文件然后塞进对应文件夹不就完事了。但是种种其他软件报错累积在一起,导致决定最终重装软件。

其他参考:

Re: 一个关于abquas中umat执行的问题https://www.newsmth/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FFEA%2F10%2Fabaqus%2Ftrick%2FG.1039051303.G0

ABA_PARAM.INC是ABAQUS设置变量是默认采用单精度还是双精度的Include文件,就和我们的implicit real*4和implicit real*8的功能相同。

它的位置在Site文件夹下,有两个ABA_PARAM.INC.dp和ABA_PARAM.INC.sp,分别对应默认双精度和单精度,也就是说,如果你的机器是32位,那么ABAQUS默认的就是单精度,如果是64位的机器,那么默认双精度,因此,你也可以修改ABA_PARAM.INC.sp使之和ABA_PARAM.INC.dp的内容一样,这样,我们普通的32位机器就默认采用双精度了。

Error: Cannot open include file 'ABA_PARAM.INC'

这是因为你在visual fortran65中调试的结果,因为visual fortran65找不到ABA_PARAM.
INC文件,因此,若要在visual fortran65中调试,你可以将ABA_PARAM.INC.dp和ABA_PARAM.INC.sp两个文件加到你的工作空间或者干脆拷贝到你的工作目录

*最终操作:重装软件后,找到两个.inc文件,复制粘贴到HEA主程序所在的工作文档下。原文件路径如下:

G:\APP\...\Abaqus2016\Abaqus\SMAUsubs\PublicInterfaces

2.3 报错:Unclassifiable statement

终端报错代码:

Error: Unclassifiable statement

*跳过了,多半是代码缺变量。这个回答也说是没有解释变量。

Error: unclassifiable statement in fortranhttps://stackoverflow/questions/16930096/error-unclassifiable-statement-in-fortran

2.4 报错:Expected a right parenthesis in expression

Error: Expected a right parenthesis in expression

同上。

2.5 VS code标识列数、Fortran换行

固定格式fortran有字符限制,为了方便改一下:

设置→editor.rulers→.json里添加代码:

    "editor.rulers": [
        6,72,80//Fortran77
    ]

第6列~72列可输入字符,73~80列默认注释(可能报错,所以谨慎起见不写东西)

换行还有点麻烦,有个文件路径字符串超字符数了。可以改定义的character长度,但换行不行。

*弄了个短代码试了一下发现也可以字符串中间换行。就是可能输出的时候,换行的地方有空格,这个还没解决。

      PROGRAM SQUARE
          IMPLICIT NONE
          CHARACTER*12 NUM
          INTEGER SQUARE_NUM, NUM_INT

          PRINT *, '请输入一个整数:'
          READ *, NUM
          READ(NUM, *) NUM_INT
          SQUARE_NUM = NUM_INT * NUM_INT


          PRINT *, '您输入的整数
     +的平方是:',
     +     SQUARE_NUM

          IF (SQUARE_NUM .GT. 100) THEN
              PRINT *, '这个平方大于 100。'
          ELSE
              PRINT *, '这个平方不大于 100。'
          END IF

      end program SQUARE

输出:

 请输入一个整数:
66
 您输入的整数                                      的平方是:        4356
 这个平方大于 100。

折腾半天给超字数的都换行了,但还有个疑点:保存后自动对齐。

猜测:应该是插件的功能,但会导致直接删除空格这样没用,因为保存后自动给你对齐了。所以只能超字符的换行。这个应该可以调整,但懒得找了,不如直接换行。等行数超限制再说)

自由格式:

一行超过132个字符时,至多可以有39个续行。

行末为“&”时,则表示下一行与本行接续,下一行行首无标识。

在不同的类型之间进行转换是有限制条件的:

数值型以及逻辑型数据之间允许相互赋值转换;

数值型数据与字符型数据之间则不允许进行直接赋值转换,需要使用专用的字符函数;

逻辑型数据不允许与字符型数据之间进行直接或间接的转换。

整型数据与实型数据的相互转换遵循如下规则:

整形向实型转换时,保持数值的大小不变;

实型向整型转换时,直接将实型的小数部分截去。

f95 允许 999 个续行(1 个初始行和 999 个续行)。对于固定格式,标准 Fortran 允许 19 个续行;对于自由格式,允许 39 个续行。

在固定格式源代码中,行的长度可以超过 72 个字符,但忽略第 73 列以后的任何内容。标准 Fortran 95 仅允许 72 个字符长的行。

固定格式:

一行超过80个字符时,至多可以有19个续行。

下一行行首在第6格写入任意非空格非0字符,行末无标识。


其他感觉有用的资源:

【Learn Microstructure based Modelling (CPFEM via UMAT) - Step by step Practical ABAQUS Guide】https://youtu.be/ZZvm6Iu3rps?si=7GI7ICyzsDGLTWCQ

【ABAQUS晶体塑性有限元UMAT代码使用教程】https://www.bilibili/video/BV1Az4y1H7K4/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

3 碎碎念+随笔

好崩溃,千防万防没防住win自动更新重启,写了好多的笔记全没了。从头又太累……太难过了。

感觉一个寒假完全没进度,急死了又没有办法……

感觉走了好多弯路,叹气。

目录

1 软件操作问题

1.1 Fortran文件格式转换(fortran77↔fortran90)

1.2 Abaqus2016打开前的许可文件设置

1.3 Abaqus导入.inp文件

1.4 命令行报错:不是内部或外部命令,也不是可运行的程序

1.5 VS code 调试时显示无对应驱动,是否需要从商店搜索扩展 

1.6 Abaqus与VS code验证软件安装与子程序关联

1.8 Abaqus 子程序提交命令方法(cae,命令行,批处理,cmd)

1.9 CAE快捷方式修复

2 编程问题

2.1 Fortran语言扩展名

 2.2 报错:Cannot open included file 'VABA_PARAM.INC'

2.3 报错:Unclassifiable statement

2.4 报错:Expected a right parenthesis in expression

3 碎碎念+随笔


工具:

VS2012+Fortran2013+Abaqus2016

由于太长不好找,可能之后会把案例实操单独放另一篇。以及辱骂一下,之前写了几天写到1.5w的全没存上草稿箱,现在只剩8k了,我恨……

1/14更新:已经把案例学习单开一篇了,专门读代码记笔记。这篇就只放零碎问题。


1 软件操作问题

1.1 Fortran文件格式转换(fortran77↔fortran90)

【跟兵哥学ABAQUS子程序2-如何使用VS编写Fortran】https://www.bilibili/video/BV19Q4y1U7FR/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

个人安装路径,记事本打开:

G:\APP\Abaqus2016\Program1\win_b64\SMA\site

*未设置格式,因常用固定格式,暂不需要自由格式。

在线F77转F90工具-鹅毛笔ForQuill:

鹅毛笔ForQuillhttp://quill.fcode/

1.2 Abaqus2016打开前的许可文件设置

Abaqus2016安装教程-软件管家https://mp.weixin.qq/s?__biz=MzA4MjU4MTg2Ng==&mid=2247552100&idx=4&sn=71e9440e30b8b391aba57173f8a01e98&chksm=9f81cc61a8f645774162cebd7df828a31cf688f7a994c40c76d2bf9844b375b9becac896f0c6&scene=178&cur_album_id=3421667922500681732#rd

步骤第20条~第23条:设置lmtools工具。

1. 以管理员身份运行桌面快捷方式。原文件路径:

C:\SIMULIA\License\2016\win_b64\code\bin

2. 点击【Config Services】,点击【Browse】选择【对应的文件】(如下图所示,从上往下依次是:lmgrd.exe、abaqus.lic、abaqus.log),点击【Save Services】。弹出的确认窗口点击【是】。 

*由于已设置好,则直接单击⑤【Save Services】,单击【是】确认。

3. 点击【Start/Stop/Reread】,点击【Start Server】,显示【Server Start Successful】后点击右上角【X】退出。

4. 直接Abaqus CAE桌面快捷方式,管理员身份运行。

1.3 Abaqus导入.inp文件

1. 设置许可认证,打开空白Abaqus。

2. 导入模型:.inp文件(Abaqus输入文件)

File>Import>Model

*该案例(AM-HEA)中,README文档中备注的example文件为.inp文件。

1.4 命令行报错:不是内部或外部命令,也不是可运行的程序

Powershell试着运行命令行,无法直接唤起abaqus运行。尝试该方法:

cmd运行abaqus 出现‘abaqus’不是内部或外部命令的错误提示http://zhidao.baidu/question/1604414788219138427

A:

首先不是在电脑自带的常规cmd中运行,要到abaqus command中运行,如果还是提示相同问题,那么你就要自己手动把abaqus的主程序所在路径添加到系统的path环境变量中去,OK!

Q:

abaqus的主程序所在路径是不是在开始中,abaqus cae右键属性快捷方式目标中的内容?  系统的path环境变量有很多软件的路径,但是没有abaqus的,我把“开始中,abaqus cae右键属性快捷方式目标中的内容”复制到path环境变量中去,中间用分号分隔,这样的操作对吗?

A:

不是目标里的内容,而是目标指向的那个bat文件所在的文件夹,比如我的abq6111.bat文件所在的文件夹路径是D:\SIMULIA\Abaqus\Commands,把这个加到系统path变量中去,用英文分号隔开不同路径。

然而不知道是否需要重启电脑才能生效,未解决。

记一下尝试过的路径,黔驴技穷了属于是qwq:

1 

G:\APP\...\SIMULIA\CAE

!这个是Powershell窗口直接报错的.bat文件路径,可能是安装的时候失败又换路径重装的问题,路径混乱。原报错命令如下:

'"G:\APP\...\SIMULIA\CAE\abq2016.bat"' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

2 

G:\APP\Abaqus2016\CAE2016\win_b64\resources\install\cae

!按上述方法操作的桌面快捷方式指向的.bat文件的文件夹路径。

3

G:\APP\...c\WINX64\_SolidSQUAD_\SIMULIA

4

G:\APP\Abaqus2016\CAE2016

5

C:\SIMULIA\License\2016\win_b64\code\bin

6

G:\APP\Abaqus2016\CAE2016\win_b64\code\bin

*尝试很多方法无果,最终决定最简单的方法是重装。为了解惑,找了b站大佬重装软件,并搞清楚了一些问题。

大佬同时给了很多自己录的教程。附大佬自己的abaqus2016版安装与vs code关联教程如下:

【abaqus2016+vs+fortran子程序安装关联全过程】https://www.bilibili/video/BV1eZ4y1M76M/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971*修改环境变量的路径时,一定不能双击后直接输入,否则会覆盖掉先前添加的路径。应选中Path,点击编辑,再选择相应的路径添加/删除/修改。

*win识别路径是按照从上到下的顺序的。如果重装的时候没有删除顺序在前的错误路径,则会直接读取错误路径并报错。应当删除顺序在前的无效路径后,再添加正确路径。

*其他可能需要添加环境路径的文件路径:

MinGW:

含gdb,gcc等,如果在cmd窗口运行 --version发现已安装却找不到的时候,可以尝试添加这个路径。

亲测网上教程很多乱七八糟的配置都不必要,因为现在MinGW整合了,从官网下好安装包即可一键配置好Fortran必备的环境。

G:\APP\...\mingw\mingw64\bin

1.5 VS code 调试时显示无对应驱动,是否需要从商店搜索扩展 

已经装好了Modern Fortran,仍然报这个错。最终发现该扩展未激活,因为激活命令冲突。

删除命令冲突的扩展后,显示激活。

亲测现在绝大多数Fortran教程中要求安装的扩展均为多余,会导致命令冲突,只需要保留如下三个扩展即可,注意前两个为Modern Fortran的运行基础:

1.6 Abaqus与VS code验证软件安装与子程序关联

原本重装后按网上例子找了个验证方法,但装系统的大佬说不对。

大佬原话:

首先这种验证方式是很不合适的,甚至是错的

2016这个版本比较特殊

想同时命令提交子程序和cae界面提交子程序有点麻烦,但能搞定

官方开发混乱的问题,他们自己也知道,2018以后就改了

大佬手动帮忙改了一些设置才ok。感谢售后这么完善的大佬!

目前配置和参考链接:

Windows 10/11下使用VSCode进行Fortran程序开发 - 泊舟坞https://www.pramsin.site/archives/tutorial/805/这个链接已失效,找不到原文地址了。但是拿来验证的案例的 fortran 程序,和工作区中 .vscode 文件夹的配置是按这篇文来的。

launch.json:

{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Fortran: Debug (launch)",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "internalConsoleOptions": "neverOpen",
            "externalConsole": false,
            "MIMode": "gdb",
            "miDebuggerPath": "G:/APP/PolyU Academic/mingw/mingw64/bin/gdb.exe",
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "gfortran.exe build active file"
        }
    ]
}

tasks.json:

{
    "tasks": [
        {
            "type": "shell",
            "label": "gfortran.exe build active file",
            "command": "gfortran.exe",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "G:/APP/PolyU Academic/mingw/mingw64/bin"
            }
        }
    ],
    "version": "2.0.0"
}

验证案例(.f90):

! https://www.pramsin.site/archives/tutorial/805/

program array_slice
    implicit none

    integer :: i
    integer :: array1(10)  ! 1D integer array of 10 elements

    array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  ! Array constructor
    array1 = [(i, i = 1, 10)]  ! Implied do loop constructor

    print *, array1(1:10:2)  ! Print out elements at odd indices
    print *, array1(10:1:-1)  ! Print an array in reverse
end program array_slice

打个断点可以暂停在左边窗口查看变量。

下面链接的博文的方法没用上,但是提供了一些思路,记一下:

【vs code】Modern Fortran插件设置https://blog.csdn/qq_42988706/article/details/132131678?fromshare=blogdetail&sharetype=blogdetail&sharerId=132131678&sharerefer=PC&sharesource=weixin_50797997&sharefrom=from_link用 VS Code + MSYS 搞定 Windows 上的 Fortran 开发https://stblog.penclub.club/posts/Fortran/#python-%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AE

1.8 Abaqus 子程序提交命令方法(cae,命令行,批处理,cmd)

参考大佬教程:

【干货!Abaqus子程序模型提交的几种方式综述(cae,命令行,批处理,cmd)】https://www.bilibili/video/BV1aG4y1n7kY/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

  • cae直接提交

直接打开.cae文件,或.inp文件,创建job,提交。

  • 命令行(Abaqus command)

快捷方式所在路径(跟cae同一个路径,开始菜单的Dassault Systemes SIMULIA Abaqus CAE 2016文件夹下):

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Dassault Systemes SIMULIA Abaqus CAE 2016

手动放到桌面了。

提交工作的代码:

cd G:\Study\...\...

abaqus job=test user=program_name int

cd跳转到工作文档。

job输入.inp文件的工作名,user输入子程序名,int让命令行窗口显示计算过程。

*该方法输入的工作文件均为.inp文件。因为.cae受限于abaqus版本,可能报错,所以.inp比较好。

  • cmd(免手动路径转换,基于命令行)

在工作文档的路径处输入cmd,直接回车,即直接在本文档路径下打开命令行窗口。

  • 批处理(基于命令行)

新建文本文档,改为.rat文件,放在.inp等文件所在的工作文档下。编辑,输入:

call abaqus job=test1 user=test1 int cpus=2

cpus输入的是计算要求的cpu数量,自定义。

若需要让abaqus同时跑多个工作:

cmd/c abaqus job=test1 user=test1 int cpus=2
cmd/c abaqus job=test2 user=test2 int cpus=2
...
cmd/c abaqus job=test_n user=test_n int cpus=2

*不能用call,因为多个工作时算完第一个就闪退。

1.9 CAE快捷方式修复

应该是大佬改命令行的时候动了属性的问题,想自己先琢磨改一下,遂记录。

存档:

Abaqus CAE属性:

目标:

"C:\Program Files (x86)\Intel\Composer XE 2013\bin\ipsxe-comp-vars.bat" intel64 vs2012 & "G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\launcher.bat" cae || pause

*应该是这个地方加了Fortran关联,所以不能直接快捷方式启动。

起始位置:

G:\temp

文件所在位置:

C:\Program Files (x86)\Intel\Composer XE 2013\bin\ipsxe-comp-vars.bat

以上为原快捷方式属性。

看了一下不敢乱动大佬改过的,唯恐出错,遂自己桌面右键新建快捷方式。

键入对象位置:

"G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\launcher.bat" cae || pause

完成。试着右键管理员运行。

应该ok了,目测没啥问题,试着导了个.inp文件也没毛病。

看着不顺眼改了一下图标,名字就没改了,便于区分原快捷方式。

图标位置:

G:\APP\PolyU Academic\Abaqus2016\CAE2016\win_b64\resources\install\cae\abq.ico


2 编程问题

2.1 Fortran语言扩展名

常见后缀文件:

  •  .f

固定格式 Fortran 77。

常用于unix系统。

使用一定的列限制(如第一列用于注释,1-5 列用于行号,6 列用于继续行标记,7-72 列用于代码,73-80 列通常可以用作行号,但不再使用)。

  •  .for

自由格式 Fortran 77。

常用于win系统。

不受列约束。

在某些环境中,可以是 Fortran 90 或更高版本的代码。

  •  .f90

自由格式 Fortran 90。

引入新特性,如模块和面向对象编程,语法更加灵活。

  •  .f95

自由格式 Fortran 95。

包含F90所有特性,并引入新特性。

  •  .f03 .f08 .f202x等

自由格式 Fortran 2003、2008、202x。

新标准引入新特性。

  •  .F .F90(大写)

这些文件通常带有预处理器,适用于 Fortran 代码中的 C 风格预处理指令(如 #include)。

编译前会经过预处理,可以用于包含头文件或条件编译。

格式:

固定格式

  • 列限制:固定格式对代码的列位置有严格要求。第一列用来标记注释(如有字符则此行被视为注释),格式为:
    • 列 1-5:行号(可选)。
    • 列 6:继续行指示符(例如,&)。
    • 列 7-72:实际代码。
    • 列 73-80:通常用于行号,但可以省略。
    PROGRAM HELLO  
    PRINT *, 'Hello, World!'  
    END PROGRAM HELLO

自由格式

  • 排版灵活:自由格式不需要严格的列限制。代码可以在任何地方开始和结束,通常使用空格和缩进来增强可读性。

  • 新特性:自 Fortran 90 开始,引入了新的话语和结构,更容易使用现代编程的风格。

program hello  
    print *, 'Hello, World!'  
end program hello

转换示例

! 固定格式  
    PROGRAM HELLO  
    PRINT *, 'Hello, World!'  
    END PROGRAM HELLO
! 自由格式  
program hello  
    print *, 'Hello, World!'  
end program hello

 2.2 报错:Cannot open included file 'VABA_PARAM.INC'

在vs code里运行主程序(.for),终端报错如下:

Fatal Error: Cannot open included file 'VABA_PARAM.INC'
compilation terminated.

首先查到这两个讨论:

报错:选定的主变量在当前帧中对于当前显示组中的任何元素均不可用。The selected Primary Variable is not available in the current frame for any elements in the current display group.https://www.researchgate/post/Can_anyone_help_with_an_error_running_UMAT_subroutine_in_ABAQUS报错:错误 #5102: 无法打开包含文件 'ABA_PARAM.INC'。error #5102: Cannot open include file ‘ABA_PARAM.INC’https://www.researchgate/post/How-to-solve-an-error-during-compilation-of-an-Abaqus-Subroutine

总结:

在函数SUBROUTINE后添加这行代码:

INCLUDE 'ABA_PARAM.INC'

该文件处理实值变量的单/双精度问题。

*案例的主程序代码中为VABA_PARAM.INC。猜测:vumat与umat不同,且需要手动添加该文件到某文档中。

*案例所用精度为单精度。

不同版本该文档所在位置不同。

Q:

Dear Sir, I have followed the video and getting pass message for product verification of subroutine. I have two include files in "C:\SIMULIA\CAE\2016\win_b64\SMA\site" directory named as 'aba_param_dp' and 'aba_param_sp' but not 'ABA_PARAM '. I have added the path of this directory to Visual studio ( 'Solution Explorer>Properties page>Fortran>General>'Additional Include Directories'). but same error because no 'ABA_PARAM ' in the "site". I am getting frustrated. Kindly help.
亲爱的先生,我已按照视频并获取子程序产品验证的通过消息。我在“C:\SIMULIA\CAE\2016\win_b64\SMA\site”目录中有两个包含文件,名为“aba_param_dp”和“aba_param_sp”,但不是“ABA_PARAM”。我已将此目录的路径添加到 Visual Studio(“解决方案资源管理器>Properties 页>Fortran>General>'附加包含目录”)。但同样的错误,因为“站点”中没有“ABA_PARAM”。我越来越沮丧了。请帮忙。

A:

Try changing ABA_PARAM to ABA_PARAM_DP then.
那么尝试将 ABA_PARAM 更改为 ABA_PARAM_DP。


Q:

Sir, Thank you very much. After using 'ABA_PARAM_DP' I am getting only one error " error LNK2019: unresolved external symbol _MAIN__ referenced in function _main libifcoremdd.lib(for_main.obj)" which is what you mentioned in your comment. But how should I get rid of it? I did not understand the term " telling the compiler that it should create an intermediate file (.OBJ), and not a final executable (.EXE)". Kindly tell the steps to follow.
先生,非常感谢您。使用“ABA_PARAM_DP”后,我只收到一个错误“错误 LNK2019:函数 _main libifcoremdd.lib(for_main.obj) 中引用的无法解析的外部符号 _MAIN__”,这就是您在评论中提到的内容。但我该如何摆脱它呢?我不理解术语“告诉编译器它应该创建一个中间文件(.OBJ),而不是最终的可执行文件(.EXE)”。请告知要遵循的步骤。

A:

I still recommend you follow the standard procedure (i.e. letting Abaqus do the compilation for you) with the recent changes, and let me know about the errors (if any) in the Abaqus logs.
我仍然建议您遵循标准程序(即让 Abaqus 为您进行编译)以及最近的更改,并让我知道 Abaqus 日志中的错误(如果有)。


If anyone got an error regarding aba_param.inc not found then write aba_param_dp.inc instead of aba_param.inc in UMAT code and place aba_param_dp.inc file into your working directory. It will work.
如果有人收到有关 aba_param.inc 未找到的错误,请在 UMAT 代码中写入 aba_param_dp.inc 而不是 aba_param.inc,并将 aba_param_dp.inc 文件放入您的工作目录中。它会起作用的。

单精度 = SP,双精度 = DP

题主的最终回复,建议不用编辑器,直接abaqus编译:

Guys! I have found the solution to the problem. Thank you Farshid Mossaiby sir for helping me in finding the solution. This is the common problem when one starts learning UMAT. The solution to the above problem is that you should run the UMAT FORTRAN subroutine in Abaqus itself, not in the visual studio. If your file aborts or gets a compilation error, go to your Abaqus working directory and see the text file. There you will see that which line has the problem. Now go to your UMAT code and correct it then again run the Abaqus file with UMAT. Using this trial and error method, your UMAT code will be corrected after which it will not give any compilation error (This is what I did, There may more shortcut method available). Some author suggests a PRINT statement in your UMAT code. All the best.
伙计们!我已经找到了问题的解决方案。感谢 Farshid Mossaiby 先生帮助我找到解决方案。这是刚开始学习UMAT时常见的问题。上述问题的解决方案是您应该在 Abaqus 本身中运行 UMAT FORTRAN 子例程,而不是在 Visual Studio 中。如果您的文件中止或出现编译错误,请转到 Abaqus 工作目录并查看文本文件。在那里您将看到哪一行有问题。现在转到您的 UMAT 代码并更正它,然后再次使用 UMAT 运行 Abaqus 文件。使用这种试错方法,您的 UMAT 代码将得到纠正,之后不会出现任何编译错误(这就是我所做的,可能还有更多快捷方法可用)。一些作者建议在 UMAT 代码中使用 PRINT 语句。一切顺利。


Compilation error is because there is some error in your UMAT. when you run it in Abaqus (see youtube videos on how to use UMAT in Abaqus) a text file (or log file) is generated where errors are given. Correct your UMAT as per that file then again use updated UMAT in Abaqus. use this trial and error method.
编译错误是因为您的 UMAT 中有一些错误。当您在 Abaqus 中运行它时(请参阅有关如何在 Abaqus 中使用 UMAT 的 YouTube 视频),会生成一个文本文件(或日志文件),其中给出错误。根据该文件更正您的 UMAT,然后再次在 Abaqus 中使用更新的 UMAT。使用这种试错方法。


Q:

Please is there a way one can know if code is written is correct before running it on Abaqus?
请问有没有一种方法可以在 Abaqus 上运行之前知道编写的代码是否正确?

A:

If you mean the functionality, there is no way to know, even AFTER running the code. If you mean 'just the syntax', you might try compiling it outside Abaqus. Of course, you still need the include files and you cannot 'link' the code to make an executable.
如果您指的是功能,则即使在运行代码之后也无法知道。如果您的意思是“只是语法”,您可以尝试在 Abaqus 之外编译它。当然,您仍然需要包含文件,并且无法“链接”代码来生成可执行文件。

另一个思路:如果未找到该文件(.inc):

In your UMAT subroutine, replace include 'aba_param.inc'
with
implicit real*4(a-h,o-z) (for single precision)
or
implicit real*8(a-h,o-z) (for double precision)
Be careful, the above statement indicates that all the variables starting with a-h or o-z will be treated as real variables.

在您的 UMAT 子例程序中,将include 'aba_param.inc'替换为
隐式实数*4(ah,oz) (对于单精度)
或者
隐式实数*8(ah,oz) (对于双精度)
注意,上面的语句表示所有以 ah 或 oz 开头的变量都将被视为实变量。


یه جایی داخل کد مخرج کسر صفر میشه. باید خط به خط بررسی کنی و فایل دات لوگ را چک کنی بعد یه 1*10^-8بهش اضافه کنی ایراد حل میشه
在代码中的某个位置,分数的分母变为零。你必须逐行检查并检查.log文件,然后在其中添加1*10^-8,问题就解决了。

另一个相关链接:

连接 ABAQUS 与 Fortran。Linking ABAQUS with Fortran.https://imechanica/node/11416似乎多半都出问题在abaqus和fortran的链接上。

关于精度的链接:

Fortran 函数中单精度,双精度不匹配的错误https://blog.csdn/u012063703/article/details/51496248?fromshare=blogdetail&sharetype=blogdetail&sharerId=51496248&sharerefer=PC&sharesource=weixin_50797997&sharefrom=from_link通过这个链接,判断案例所用为单精度,因为出现了1.1d0的表达。

本人最直接的思路其实是,搞到这个缺失的文件然后塞进对应文件夹不就完事了。但是种种其他软件报错累积在一起,导致决定最终重装软件。

其他参考:

Re: 一个关于abquas中umat执行的问题https://www.newsmth/bbsanc.php?path=%2Fgroups%2Fsci.faq%2FFEA%2F10%2Fabaqus%2Ftrick%2FG.1039051303.G0

ABA_PARAM.INC是ABAQUS设置变量是默认采用单精度还是双精度的Include文件,就和我们的implicit real*4和implicit real*8的功能相同。

它的位置在Site文件夹下,有两个ABA_PARAM.INC.dp和ABA_PARAM.INC.sp,分别对应默认双精度和单精度,也就是说,如果你的机器是32位,那么ABAQUS默认的就是单精度,如果是64位的机器,那么默认双精度,因此,你也可以修改ABA_PARAM.INC.sp使之和ABA_PARAM.INC.dp的内容一样,这样,我们普通的32位机器就默认采用双精度了。

Error: Cannot open include file 'ABA_PARAM.INC'

这是因为你在visual fortran65中调试的结果,因为visual fortran65找不到ABA_PARAM.
INC文件,因此,若要在visual fortran65中调试,你可以将ABA_PARAM.INC.dp和ABA_PARAM.INC.sp两个文件加到你的工作空间或者干脆拷贝到你的工作目录

*最终操作:重装软件后,找到两个.inc文件,复制粘贴到HEA主程序所在的工作文档下。原文件路径如下:

G:\APP\...\Abaqus2016\Abaqus\SMAUsubs\PublicInterfaces

2.3 报错:Unclassifiable statement

终端报错代码:

Error: Unclassifiable statement

*跳过了,多半是代码缺变量。这个回答也说是没有解释变量。

Error: unclassifiable statement in fortranhttps://stackoverflow/questions/16930096/error-unclassifiable-statement-in-fortran

2.4 报错:Expected a right parenthesis in expression

Error: Expected a right parenthesis in expression

同上。

2.5 VS code标识列数、Fortran换行

固定格式fortran有字符限制,为了方便改一下:

设置→editor.rulers→.json里添加代码:

    "editor.rulers": [
        6,72,80//Fortran77
    ]

第6列~72列可输入字符,73~80列默认注释(可能报错,所以谨慎起见不写东西)

换行还有点麻烦,有个文件路径字符串超字符数了。可以改定义的character长度,但换行不行。

*弄了个短代码试了一下发现也可以字符串中间换行。就是可能输出的时候,换行的地方有空格,这个还没解决。

      PROGRAM SQUARE
          IMPLICIT NONE
          CHARACTER*12 NUM
          INTEGER SQUARE_NUM, NUM_INT

          PRINT *, '请输入一个整数:'
          READ *, NUM
          READ(NUM, *) NUM_INT
          SQUARE_NUM = NUM_INT * NUM_INT


          PRINT *, '您输入的整数
     +的平方是:',
     +     SQUARE_NUM

          IF (SQUARE_NUM .GT. 100) THEN
              PRINT *, '这个平方大于 100。'
          ELSE
              PRINT *, '这个平方不大于 100。'
          END IF

      end program SQUARE

输出:

 请输入一个整数:
66
 您输入的整数                                      的平方是:        4356
 这个平方大于 100。

折腾半天给超字数的都换行了,但还有个疑点:保存后自动对齐。

猜测:应该是插件的功能,但会导致直接删除空格这样没用,因为保存后自动给你对齐了。所以只能超字符的换行。这个应该可以调整,但懒得找了,不如直接换行。等行数超限制再说)

自由格式:

一行超过132个字符时,至多可以有39个续行。

行末为“&”时,则表示下一行与本行接续,下一行行首无标识。

在不同的类型之间进行转换是有限制条件的:

数值型以及逻辑型数据之间允许相互赋值转换;

数值型数据与字符型数据之间则不允许进行直接赋值转换,需要使用专用的字符函数;

逻辑型数据不允许与字符型数据之间进行直接或间接的转换。

整型数据与实型数据的相互转换遵循如下规则:

整形向实型转换时,保持数值的大小不变;

实型向整型转换时,直接将实型的小数部分截去。

f95 允许 999 个续行(1 个初始行和 999 个续行)。对于固定格式,标准 Fortran 允许 19 个续行;对于自由格式,允许 39 个续行。

在固定格式源代码中,行的长度可以超过 72 个字符,但忽略第 73 列以后的任何内容。标准 Fortran 95 仅允许 72 个字符长的行。

固定格式:

一行超过80个字符时,至多可以有19个续行。

下一行行首在第6格写入任意非空格非0字符,行末无标识。


其他感觉有用的资源:

【Learn Microstructure based Modelling (CPFEM via UMAT) - Step by step Practical ABAQUS Guide】https://youtu.be/ZZvm6Iu3rps?si=7GI7ICyzsDGLTWCQ

【ABAQUS晶体塑性有限元UMAT代码使用教程】https://www.bilibili/video/BV1Az4y1H7K4/?share_source=copy_web&vd_source=7ef0f183b24d405f6714334665e8a971

3 碎碎念+随笔

好崩溃,千防万防没防住win自动更新重启,写了好多的笔记全没了。从头又太累……太难过了。

感觉一个寒假完全没进度,急死了又没有办法……

感觉走了好多弯路,叹气。

发布评论

评论列表 (0)

  1. 暂无评论