(推荐)Abaqus中C++子程序开发入门

news/2024/2/27 21:53:33

ABAQUS是支持C++子程序开发的,相比于传统的Fortran,C++作为高级语言的优势不言而喻,再搭配优秀的C++程序库,使得我们的编程效率大大提高,尤其是对于熟悉C++编程的开发者,不失为一种更好的选择。

1 软件配置

1.1 环境准备

我使用的开发软件搭配是Abaqus 2022 + Visual Studio 2019 + OneAPI 2022。虽然我们使用C++进行子程序开发,但是使用Intel的OneAPI中的Fortran模块是必须的,否则在编译链接C++源程序时,会发生如下错误:

LINK: fatal error LNK1104: cannot open file “LIBIFCOREMD.LIB”

“LIBIFCOREMD.LIB” 这个库是Intel的Fortran库,所以必须要使用到OneAPI中的Fortran模块。
要特别注意Visual StudioOneAPI版本搭配的问题,否则在安装OneAPI的时候会无报错闪退。我曾经尝试Visual Studio 2019 + OneAPI 2021,结果OneAPI安装时总是在continue后无情退出,当卸载VS后,就可以正常安装了,所以一定要注意相关软件版本的搭配,避开这些bug的折磨。

1.2 软件安装

软件的安装顺序需要保证VS2019的安装在OneAPI之前,因为其安装需要依赖VS2019。
(1)Abaqus 2022安装网上有很多教程,正常安装就行;
(2)VS2019安装社区版,组件只需要勾选C++桌面开发选项;
在这里插入图片描述

(3)OneAPI只需要安装HPCKit中的Fortran模块。(节省磁盘空间。。)
在这里插入图片描述

1.3 软件关联

找到abq2022.bat编辑打开。
在这里插入图片描述
添加如下语句:

call "C:\Program Files (x86)\Intel\oneAPI\compiler\2022.2.1\env\vars.bat" intel64 vs2019

1.4 关联测试

这里给出一段测试代码,将其放在Abaqus Command命令执行目录下,如果能正常编译,说明关联没有问题。

#include <cmath>
#include <aba_for_c.h>extern "C" void FOR_NAME(dload,DLOAD) (double & F,                  // VALUE TO BE RETURNED: Magnitude of the distributed loadconst int    & KSTEP,        // Step numberconst int    & KINC,         // Increment numberconst double(& TIME)[2],     // (1) step time; (2) total timeconst int    & NOEL,         // Element numberconst int    & NPT,          // Load integration point numberconst int    & LAYER,        // Layer numberconst int    & KSPT,         // Section point number within the current layerconst double(& COORDS)[3],   // Array containing the coordinates of the load integration pointconst int    & JLTYPE,       // Load type for which this call to DLOAD is madeconst char  (&SNAME)[80]     // Surface name
) {F = 100;
}

在这里插入图片描述
编译后生成目标文件。
在这里插入图片描述

1.5 计算库配置

为了后续发挥出C++编程的优势,我们配置好第三方科学计算库,方便直接调用。这里我使用Armadillo(C++ library for linear algebra & scientific computing)。
将下载好的Armadillo文件夹里/examples/lib_win64路径下的 libopenblas.lib复制C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\lib\x64到路径下,而libopenblas.dll复制到C:\Windows\System32
当然还需要告诉VS2019 Armadillo的头文件的位置。直接将下载的Armadillo中include文件夹下的两个文件,复制到此路径C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include下,这样VS就可以找到相关头文件了。
在VS中测试下使用效果:

#include <armadillo>
#include <iostream>using namespace std;
using namespace arma;int main() {// construct a matrix according to given size and form of element initialisationmat A(2, 3, fill::zeros);// .n_rows and .n_cols are read onlycout << "A.n_rows: " << A.n_rows << endl;cout << "A.n_cols: " << A.n_cols << endl;system("pause");return 0;
}

在这里插入图片描述
为了后续能够使用Abaqus方式编译,我们需要将此文件C:\SIMULIA\EstProducts\2022\win_b64\SMA\site\win86_64.env中的link_sl变量末尾添加文件名:libopenblas.lib

2 子程序开发练习

2.1 开发基础

Abaqus的C++子程序开发在帮助文档中很少提及,但是文档在About User Subroutines and Utilities还是进行了简单介绍。只要C++代码外形按照格式开始编写,里面的内容就可以自由发挥啦。关于外形格式我们可以参照Fortran进行编写。
在这里插入图片描述

2.2 DLOAD

上面其实我们已经给出了Dload子程序的C++形式,我们可以将其与帮助文档给出的Fortran格式,做个对比,可以看到函数参数是一致的。所以对于任意Fortran格式的子程序,完全可以改写为C++格式。

      SUBROUTINE DLOAD(F,KSTEP,KINC,TIME,NOEL,NPT,LAYER,KSPT,1 COORDS,JLTYP,SNAME)
CINCLUDE 'ABA_PARAM.INC'
CDIMENSION TIME(2), COORDS (3)CHARACTER*80 SNAMEuser coding to define FRETURNEND

下面我们通过上述子程序对一个平板表面施加一个压力F=100(Distribution选择User-defined),和直接在abaqus给定的压力做一个对比,验证子程序是否能够正确运行。
在这里插入图片描述
上述选项选择编译好的main-std.obj,提交分析。
在这里插入图片描述
Job-1是使用子程序计算的结果,Job-2是未使用子程序,二者结果比较在合理误差范围内。

后续将会尝试使用UEL子程序进行一个简单问题的求解,在此之前推荐阅读《有限元方法基础教程》的第十章——等参数公式描述。

点个赞呗👍


http://www.ppmy.cn/news/687791.html

相关文章

中国大学mooc南京航空航天大学民航运输概论章节作业及测试

【作业】第一章 民航运输管理概论 第一章单元作业 小提示:本节包含奇怪的同名章节内容 1、 问题:民航运输系统的各子系统都具有什么作用&#xff1f;并且通过怎样的相互作用来共同完成民航运输任务&#xff1f; 评分规则: 【 包括航空公司、机场和空管局以及民航管理局各子系…

民航业悄悄进行票价革命

自从今年各航空公司“大大方方”地将明折明扣机票摆上桌面以来&#xff0c;机票代理处刘先生身上的工作压力增加了数倍。“原来卖国内机票只有一类Y舱(普通经济舱&#xff0c;不打折的正常舱位)机票&#xff0c;要哪天出就哪天出&#xff0c;现在可复杂多了。”他随手举起一张某…

国际机票术语

1 、航段&#xff1a;一个城市到达另外一个城市的飞行线路&#xff08;包括经停&#xff09; Eg: 北京-新加坡 视为一个航段&#xff1b;北京-新加坡-曼谷-北京 是 3 个航段 2、航程&#xff1a;是指飞机在起飞后&#xff0c;中途不停、不加油所飞行的距离&#xff01;其中包括…

用JAVA程序实现航空里程累计

南航航空公司里程累计计算表 服务等级 订座舱位&#xff08;代号&#xff09; 舱位累积比例 头等舱 F,A 150% 公务舱 C,D 130% 经济舱 Y,T,K 100% 其他舱位 M,G 0 package choice.sample; import java.io.IOException; import java.util.Scanner; public class …

中航信E-Build基础API使用实例

转载请注明出处:http://lucien-zzy.iteye.com/admin/blogs/2007894 包含三个类一个配置文件: 1.静态时间格式类 2.接口测试类 3.配置文件加载类 4.配置文件 5.所需jar包 1.静态时间格式类 public class RequestStatic implements java.io.Serializable {private st…

收益管理简介

收益管理起源于民用航空业,是美国的航空公司在上个世纪80 年代为解决激烈的市场竞争问题而提出的一种新的管理方法。随着科学技术的发展,特别是信息技术的飞速发展,再加上行业管制的逐渐放开,收益管理的理论与方法得到了更加广泛的应用。至今,收益管理已在航空、酒店、旅游服务…

中国国航往返飞机票怎么改签

中国国航往返飞机票怎么改签 发布时间&#xff1a;2013-03-26 浏览次数&#xff1a;72 返回列表 免责声明&#xff1a; 以上供应信息为供应商在本站发布&#xff0c;该信息的真实性、准确性和合法性由商家负责&#xff0c;豫贸网对此不承担任何责任&#xff01;…

浅谈去哪儿算法,搜索结果打乱,_m_参数,headers,pre关键参数等

前言 本文仅供学习参考&#xff0c;如有侵权&#xff0c;请私信删除由于版权问题&#xff0c;本文所展示的代码并非完整代码&#xff0c;也不提供相关工具&#xff0c;关键参数只提供思路。 登录 登录的请求如下&#xff1a;https://user.qunar.com/mobile/doLogin.jsp 请求…

第7章 航空公司客户价值分析

7.1 背景与挖掘目标 #mermaid-svg-01TNP0O2mvwP3gPX .label{font-family:trebuchet ms, verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-01TNP0O2mvwP3gPX .label text{fill:#333}#mermaid-svg-01TNP0O2mvwP3gPX .node rect,#merma…

SQL Server数据库技术期末大作业 机票预定信息系统

题目 设计机票预定信息系统&#xff0c;并完成以下系统功能基本要求&#xff1a; 能够实现多种关联查询 航班基本信息的录入&#xff1a;航班的编号、飞机名称、机舱等级等&#xff1b; 机票信息&#xff1a;票价、折扣、当前预售状态及经受业务员等&#xff1b; 客户基本信息…

吐槽一下国泰航空

最近订的机票比较多。 那么对我这种人来说&#xff0c;已经不再追求极端便宜价格&#xff0c;但也不做不到可以无视价格&#xff0c;所以&#xff0c;对我而言&#xff0c;在预算允许内&#xff0c;寻找最好的航空公司&#xff0c;行程时间&#xff0c;和舱位是目前订票的主要考…

以中国南方航空为竞品结构化分析并设计航空购票网页

结构化分析 第一章 系统概述 项目简介 系统目标 此项目是基于web的独立开发的机票预订系统&#xff0c;可以提供中国南方航空公司的机票预订服务&#xff0c;用户可以根据自己的行程预订机票。系统分为前台订票系统以及后台管理系统。其中&#xff0c;前台订票系统包括用户…

《MySQL数据操作与查询》- 综合项目 - 航空售票系统

Mysql & SqlServer综合项目需求 1、系统整体功能 系统需支持以下功能&#xff1a; 维护客户信息、航班信息和票务信息 支持客户按多种条件组合查询航班信息和票务信息 支持客户根据票务信息订购机票 支持民航管理部门和航空公司查询、统计航班信息以及票务信息 2、系…

云计算与大数据期末考试题库

单选题 1. 以下哪一项不属于Hadoop可以运行的模式___C___。 A. 单机&#xff08;本地&#xff09;模式 B. 伪分布式模式 C. 互联模式 D. 分布式模式 2、Hadoop作者 Martin Fowler Kent Beck Doug cutting√ 3、HDFS默认Block Size的大小是 32MB 64MB√ 128MB 4、…

【转载】华为荣耀V9的手机录屏功能如何开启

手机录屏有时候对我们的帮助很大&#xff0c;例如可以录制相应的APP使用教程、微信小程序使用流量讲解视频等&#xff0c;针对于软件开发人员等来说&#xff0c;手机录屏功能针对功能演示视频非常的有帮助。在华为荣耀V9手机中&#xff0c;进行手机录屏有多种方式&#xff0c;其…

华为荣耀V9无法连接android studio

新买的荣耀v9&#xff0c;无法连接studio&#xff0c;去设备管理器&#xff0c;看到其他设备那里&#xff0c;显示黄色叹号&#xff0c;右击更新驱动&#xff0c;选中择自动搜索&#xff0c;安装完就可以了。

华为锁屏无线不连接服务器,华为荣耀V9锁屏后wifi断开是什么问题-华为荣耀V9锁屏后wifi断开的解决方法 - 河东软件园...

平时大家在使用智能手机的时候&#xff0c;只要看到手机中有应用西药进行更新&#xff0c;肯定会在第一时间找到WiFi来进行应用的更新&#xff0c;然而很多用户在使用华为荣耀V9手机的时候就会经常出现这样一个问题&#xff0c;就是在使用WiFi进行应用更新的时候&#xff0c;只…

unity3d:YooAsset零冗余构建Assetbundle代码分析

BuildAssetInfo构建asset信息 1.每个收集器下asset会构建出BuildAssetInfo&#xff0c;这种asset是没有冗余&#xff0c;只有依赖列表 2.每个依赖asset会构建出BuildAssetInfo&#xff0c;会记录将要打入的bundle列表 依赖的Asset列表 这个asset依赖的其他asset列表&#xf…

c++11 标准模板(STL)(std::basic_ostream)(三)

定义于头文件 <ostream> template< class CharT, class Traits std::char_traits<CharT> > class basic_ostream : virtual public std::basic_ios<CharT, Traits> 类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式…

Python多线程爬取7160网站美女图片

直接上代码 #codingUTF-8 from urllib.request import urlopen from pyquery import PyQuery as pq import re import pymongo import threading clientpymongo.MongoClient(hostlocalhost,port27017) tableclient.taobao.mutitry47160 lockthreading.Lock() i 1def save_to_…
最新文章