首页 > 编程语言 >【参数化建模】利用Python在Abaqus里面绘制复杂曲线——以“爱心曲线”为例

【参数化建模】利用Python在Abaqus里面绘制复杂曲线——以“爱心曲线”为例

时间:2024-07-26 19:55:29浏览次数:15  
标签:__ Abaqus Python self 曲线 list start size

【参数化建模】利用Python在Abaqus里面绘制复杂曲线——以“爱心曲线”为例

说在前面

Python在Abaqus里面可以批量处理很多事情,包括复杂曲线的绘制,这里以心形线为例。

心形线函数

这里我们选取一款比较经典的心形线:

\left\{ \begin{array}{c} y=\sqrt{1-\left( \left| x \right|-1 \right) ^2}\\ y=-3\sqrt{1-\sqrt{\frac{\left| x \right|}{2}}}\\ \end{array} \right.

Abaqus代码

# -- coding: utf-8 --
import numpy as np
from datetime import datetime


class TempTry:
    def __init__(self):
        super().__init__()
        self.current_time = datetime.now().strftime('%a %b %d %H:%M:%S %Y')
        self.fileName_Abaqus = 'draw.py'
        self.numx = 2
        self.d = 30
        self.size = 10
        self.start_mov_x = 2 * self.size
        self.start_mov_y = 3 * self.size
        self.Delta_x = 4 * self.size

    def model_abaqus(self):
        str0 = f'''
# -*- coding: mbcs -*-
#
# Abaqus/CAE Release 2020 replay file
# Internal Version: 2019_09_14-01.49.31 163176
# Run by Know634 on {self.current_time}
#

# from driverUtils import executeOnCaeGraphicsStartup
# executeOnCaeGraphicsStartup()
#: Executing "onCaeGraphicsStartup()" in the site directory ...
'''
        with open(self.fileName_Abaqus, 'w', encoding='gbk') as f:
            f.write(str0)

        str1 = f'''
from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=200.21875, 
    height=108.900466918945)
session.viewports['Viewport: 1'].makeCurrent()
session.viewports['Viewport: 1'].maximize()
from caeModules import *
from driverUtils import executeOnCaeStartup
executeOnCaeStartup()
session.viewports['Viewport: 1'].partDisplay.geometryOptions.setValues(
    referenceRepresentation=ON)
'''
        with open(self.fileName_Abaqus, 'a', encoding='gbk') as f:
            f.write(str1)

        str2 = f'''
s = mdb.models['Model-1'].ConstrainedSketch(name='__profile__', 
    sheetSize=200.0)
g, v, d, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=STANDALONE)
'''
        with open(self.fileName_Abaqus, 'a', encoding='gbk') as f:
            f.write(str2)

        def upper(value):
            res = self.size * np.sqrt(1 - (np.abs(value) / self.size - 1) ** 2)
            return res

        def lower(value):
            res = self.size * -3 * np.sqrt(1 - np.sqrt(np.abs(value) / (2 * self.size)))
            return res

        def genCell(num=1000, start=(0.0, 0.0)):
            x_list = np.linspace(-2 * self.size, 2 * self.size, num, endpoint=True)
            y_upper = np.array([upper(x) + start[1] for x in x_list])
            y_lower = np.array([lower(x) + start[1] for x in x_list[::-1]])
            upper_list = [f"({x_list[i] + start[0]}, {y_upper[i]})" for i in range(num)]
            lower_list = [f"({-x_list[i] + start[0]}, {y_lower[i]})" for i in range(num)]
            points = ", ".join(upper_list + lower_list)
            content = f'''
s.Spline(points=({points}))
'''
            return content

        for x in range(self.numx):
            with open(self.fileName_Abaqus, 'a', encoding='gbk') as f:
                f.write(genCell(start=(self.start_mov_x + x * self.Delta_x, self.start_mov_y)))

        str3 = f'''
p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, 
    type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']
p.BaseShellExtrude(sketch=s, depth={self.d})
s.unsetPrimaryObject()
p = mdb.models['Model-1'].parts['Part-1']
session.viewports['Viewport: 1'].setValues(displayedObject=p)
del mdb.models['Model-1'].sketches['__profile__']
'''
        with open(self.fileName_Abaqus, 'a', encoding='gbk') as f:
            f.write(str3)


if __name__ == '__main__':
    TempTry().model_abaqus()

标签:__,Abaqus,Python,self,曲线,list,start,size
From: https://blog.csdn.net/know634/article/details/140723746

相关文章

  • 【python基础02】 序列,元组,列表,字典,位运算
    python运算符位运算符&:按位与|:按位或^:按位异或~:按位取反<<:左移位>>:右移位x=0b11000110y=0b10100101print(bin(x&y))#0b0010print(bin(x|y))print(bin(x^y))print(bin(~x))#第一位是表示正负print(bin(x>>2))#去除右边两位print(bin(x<<2))#......
  • Linux下学习Python包管理器Poetry教程 零基础入门到精通
    Poetry[官网-Poetry]https://python-poetry.org/安装pipinstallpoetry简单使用初始化poetry项目cd~&&mkdirdemopoetryinit管理虚拟环境poetry预设了很多自己的虚拟环境配置,这些配置可以通过poetryconfig进行修改当用户在执行poetryadd等指令......
  • python 输入输出
    输入输出**注**所有内容均是在pycharm中通过python3.7的解释器进行运行的格式:变量=input('提示词')#输入提示词在控制台显示,要输入的内容在提示词后面输入print(变量)#输出print('输出内容')#在''内部的内容原封不动......
  • python——代码识别接口请求返回的图片中的内容
    【场景】测试使用图片验证码登录接口返回的是图片的base64编码,我们需要1、将base64编码转为图片2、去识别图片中的验证码,然后再拿验证码去做后续的图片验证码登录测试【参考链接】https://blog.51cto.com/u_16213316/10678659https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=......
  • 【MATLAB源码-第159期】基于matlab的胡桃夹子优化算法(NOA)机器人栅格路径规划,输出做短
    操作环境:MATLAB2022a1、算法描述胡桃夹子优化算法(NutcrackerOptimizationAlgorithm,NOA)是一个灵感来源于胡桃夹子的故事的元启发式优化算法。这个故事中,胡桃夹子是一个能够将坚果壳轻易地破开以获取内部果仁的工具。在优化算法的语境下,这个过程被比喻为寻找问题解决方案......
  • python中的无损字典更新
    是否有一个库函数可以实现像这样的非破坏性字典更新defupdate(d,key,val):d=d.copy()d[key]=valreturnd在Python中,没有直接用于非破坏性字典更新的内置库函数。但是,你可以使用多种方法来实现相同的结果。1.使用dict.copy()和更新......
  • 上传到 Microsoft 应用商店的 Python 应用在上传 MSIX 或 .exe 文件之前是否需要获得
    我刚刚完成了桌面应用程序的开发工作,我想开始在Microsoft应用商店上销售该应用程序。我不确定许可部分。我想实现一种解决方案,当一个人下载应用程序时,他通过商店付费,如果他在下载时没有安装它,他获得的安装文件将被锁定,只能安装在同一台计算机上。如果他尝试在另一台计算机上使......
  • 网页抓取 雅虎财经 Python
    我正在尝试从损益表、资产负债表和现金流量报告中收集数据框中给定股票代码的雅虎财务数据。(下面提供了URL)我从使用yfinance的资产负债表中使用了此函数没有像雅虎财经那样的“总债务”但它只适用于股票代码“AAPL”而没有其他内容。我想要一个更强大的网络抓取......
  • Python Selenium 操作链可以工作,但会停止我在 Firefox 中的程序
    我有时使用ActionsChains时遇到任何问题,今天它不起作用,你知道为什么吗?scrolling_bar=driver.find_element(By.CSS_SELECTOR,"#scrolling_bar")start=scrolling_bar.locationActionChains(driver)\.drag_and_drop_by_offset(scrolling_bar,start......
  • 在 Python 中将 Kivy 文件选择器添加到 PopUp
    我一直在尝试通过应用程序的按钮释放创建文件选择器弹出窗口。我分别管理了FileChooser和Popups,但无法将两者一起解决,这里有人可以帮助解决问题吗?我正在尝试用Python而不是Kivy.lang来实现PopUp,因为这是我在弹出窗口方面的经验。我也无法让KivyDoc示例正常工作。我......