利用python在abaqus中画Voronoi多面体简单示例

news2024/12/23 9:15:21

利用python在abaqus中画Voronoi多面体简单示例

  • 利用scipy.spatial库得到Voronoi多面体顶点坐标
  • abaqus中绘制多面体
    • CAE操作得到相应rpy文件
      • 0、 将vertices.csv和ridge_vertices.csv导入abaqus
      • 1、 新建一个part
      • 2、创建点
      • 3、画线
      • 4、画面
  • 完整代码

利用scipy.spatial库得到Voronoi多面体顶点坐标

简单例子:

from scipy.spatial import Voronoi
import numpy as np
import csv

aa=np.array([[0,0,0],[10,0,0],[-10,0,0],[0,10,0],[0,-10,0],[0,0,10],[0,0,-10]])
vor = Voronoi(aa)

with open("vertices.csv", "w", encoding="utf-8", newline="") as f:
    csv_writer = csv.writer(f)
    csv_writer.writerows(vor.vertices)

with open("ridge_vertices.csv", "w", encoding="utf-8", newline="") as f:
    csv_writer = csv.writer(f)
    for vorRidge in vor.ridge_vertices:
        if (vorRidge[0]>=0 and vorRidge[1]>=0 and vorRidge[2]>=0):
            csv_writer.writerow(vorRidge)

aa为种子
vor.vertices为Voronoi多面体顶点坐标
vor.ridge_vertices为Voronoi多面体各面上的顶点序号

abaqus中绘制多面体

CAE操作得到相应rpy文件

好习惯先 输入 session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry=COORDINATE)

0、 将vertices.csv和ridge_vertices.csv导入abaqus

import csv
csv_reader1 = csv.reader(open("ridge_vertices.csv"))
ridgeList=[]
for row in csv_reader1:
    ridgeList0=[]
    for floatRow in row:
        ridgeList0=ridgeList0+[float(floatRow),]
    ridgeList=ridgeList+[ridgeList0]

csv_reader2 = csv.reader(open("vertices.csv"))
verticesList=[]
for row in csv_reader2:
    verticesList0=[]
    for floatRow in row:
        verticesList0=verticesList0+[float(floatRow),]
    verticesList=verticesList+[verticesList0]

1、 新建一个part

在脚本文件中输入p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, type=DEFORMABLE_BODY)

或 CAE 新一个part 后删除几何

2、创建点

在这里插入图片描述
从rpy文件读取响应指令

p = mdb.models['Model-1'].parts['Part-1']
p.DatumPointByCoordinate(coords=(0.0, 0.0, 0.0))

修改后:

# create points
p = mdb.models['Model-1'].parts['Part-1']
for vertices in verticesList:
    p.DatumPointByCoordinate(coords=(vertices[0], vertices[1], vertices[2]))

3、画线

在这里插入图片描述
从rpy文件读取响应指令

p = mdb.models['Model-1'].parts['Part-1']
d = p.datums
p.WirePolyLine(points=((d[0], d[1])), mergeType=IMPRINT, meshable=ON)

修改后:

# create line 
p = mdb.models['Model-1'].parts['Part-1']
d = p.datums
for ridge in ridgeList:
    for i in range(len(ridge)):
        p.WirePolyLine(points=((d[int(ridge[i])+1], d[int(ridge[i-1])+1])), mergeType=IMPRINT, meshable=ON)

4、画面

在这里插入图片描述
从rpy文件读取响应指令

p = mdb.models['Model-1'].parts['Part-1']
e = p.edges
p.CoverEdges(edgeList=(e.findAt(coordinates=(5.0, 5.0, 2.5)), e.findAt(
    coordinates=(-2.5, 5.0, 5.0)), e.findAt(coordinates=(2.5, 5.0, -5.0)), 
    e.findAt(coordinates=(-5.0, 5.0, -2.5))), tryAnalytical=False)

修改后:

# create plane 
p = mdb.models['Model-1'].parts['Part-1']
e = p.edges
for ridge in ridgeList:
    xyzLine=[]
    lineList=[]
    for i in range(len(ridge)):
        xLine=(verticesList[int(ridge[i])][0]+verticesList[int(ridge[i-1])][0])/2.0
        yLine=(verticesList[int(ridge[i])][1]+verticesList[int(ridge[i-1])][1])/2.0
        zLine=(verticesList[int(ridge[i])][2]+verticesList[int(ridge[i-1])][2])/2.0
        xyzLine=xyzLine+[[xLine,yLine,zLine],]
        lineList=lineList+[e.findAt(coordinates=[xLine,yLine,zLine]),]
    p.CoverEdges(edgeList=lineList, tryAnalytical=False)

完整代码

# -*- coding: mbcs -*-
#
# Abaqus/CAE Release 2020 replay file
# Internal Version: 2019_09_14-01.49.31 163176
# Run by lichen on Tue Dec 19 10:55:39 2023
#

# from driverUtils import executeOnCaeGraphicsStartup
# executeOnCaeGraphicsStartup()
#: Executing "onCaeGraphicsStartup()" in the site directory ...
from abaqus import *
from abaqusConstants import *
session.Viewport(name='Viewport: 1', origin=(0.0, 0.0), width=209.183197021484, 
    height=206.733337402344)
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)
cliCommand("""session.journalOptions.setValues(replayGeometry=COORDINATE,recoverGeometry=COORDINATE)""")

import csv
csv_reader1 = csv.reader(open("ridge_vertices.csv"))
ridgeList=[]
for row in csv_reader1:
    ridgeList0=[]
    for floatRow in row:
        ridgeList0=ridgeList0+[float(floatRow),]
    ridgeList=ridgeList+[ridgeList0]

csv_reader2 = csv.reader(open("vertices.csv"))
verticesList=[]
for row in csv_reader2:
    verticesList0=[]
    for floatRow in row:
        verticesList0=verticesList0+[float(floatRow),]
    verticesList=verticesList+[verticesList0]


p = mdb.models['Model-1'].Part(name='Part-1', dimensionality=THREE_D, 
    type=DEFORMABLE_BODY)
p = mdb.models['Model-1'].parts['Part-1']

# create points
p = mdb.models['Model-1'].parts['Part-1']
for vertices in verticesList:
    p.DatumPointByCoordinate(coords=(vertices[0], vertices[1], vertices[2]))
    
# create line 
p = mdb.models['Model-1'].parts['Part-1']
d = p.datums
for ridge in ridgeList:
    for i in range(len(ridge)):
        p.WirePolyLine(points=((d[int(ridge[i])+1], d[int(ridge[i-1])+1])), mergeType=IMPRINT, meshable=ON)
    
# create plane 
p = mdb.models['Model-1'].parts['Part-1']
e = p.edges
for ridge in ridgeList:
    xyzLine=[]
    lineList=[]
    for i in range(len(ridge)):
        xLine=(verticesList[int(ridge[i])][0]+verticesList[int(ridge[i-1])][0])/2.0
        yLine=(verticesList[int(ridge[i])][1]+verticesList[int(ridge[i-1])][1])/2.0
        zLine=(verticesList[int(ridge[i])][2]+verticesList[int(ridge[i-1])][2])/2.0
        xyzLine=xyzLine+[[xLine,yLine,zLine],]
        lineList=lineList+[e.findAt(coordinates=[xLine,yLine,zLine]),]
    p.CoverEdges(edgeList=lineList, tryAnalytical=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1321997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【03】GeoScene创建海图或者电子航道图数据

1 配置Nautical属性 1.1 管理长名称 长名称(LNAM)是一个必要的对象标识符,是生产机构(AGEN)、要素识别号码(FIDN)和要素识别子项(FIDS)组件的串联。这三个子组件用于数…

azkaban编译时报错的解决方案

大数据单机学习环境搭建(11)Azkaban单机部署,关于Azkaban和gradle下载,本文编译不限于单机solo模式。 一.大多数报错处理 1.1首先操作 1)安装 git yum install git -y 2)替换 azkaban 目录下的 build.gradle 文件的 2处 repositories 信息。改为 阿里…

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 (多指标,多图)

回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 (多指标,多图) 目录 回归预测 | MATLAB实现GA-LSSVM基于遗传算法优化最小二乘向量机的多输入单输出数据回归预测模型 (多指标&#…

【HCIP学习记录】OSPF之DD报文

1.OSPF报文格式 24字节 字段长度含义Version1字节版本,OSPF的版本号。对于OSPFv2来说,其值为2。Type1字节类型,OSPF报文的类型,有下面几种类型: 1:Hello报文;● 2:DD报文&#xff1…

使用Kaptcha实现的验证码功能

目录 一.需求 二.验证码功能实现步骤 验证码 引入kaptcha依赖 完成application.yml配置文件 浏览器显示验证码 前端页面 登录页面 验证成功页面 后端 此验证码功能是以SpringBoot框架下基于kaptcha插件来实现的。 一.需求 1.页面生成验证码 2.输入验证码&#xff…

vue中echarts柱状图点击x轴数据复制

参考自:Vue 3 使用 vue-echarts 的柱状图 barItem 和 x, y 轴点击事件实现_echarts x轴点击事件-CSDN博客 例如柱状图如下: 步骤: 一、数据处理的时候需要在 xAxis 对象中添加:triggerEvent: true 这个键值对,以增加…

ES索引误删的名场面

慌了3秒,果断发个邮件; 01 最近,在版本发布时; ES线上未备份的索引,被当场「误删」了; 对于新手来说,妥妥的社死名场面; 对于老手来说,慌它3秒表示一下态度&#xff1…

Python3,100行代码,写一段新年祝福视频,为新年喝彩。

新年祝福 1、引言2、代码示例2.1 思路2.2 介绍2.2.1 画布2.2.2 用法 2.3 实例 3、总结 1、引言 小屌丝:鱼哥, 这2023年马上就结束了, 是不是要表示表示。 小鱼:我也在思考这个事情。 小屌丝:这还需要思考?…

kubernetesr安全篇之云原生安全概述

云原生 4C 安全模型 云原生 4C 安全模型,是指在四个层面上考虑云原生的安全: Cloud(云或基础设施层)Cluster(Kubernetes 集群层)Container(容器层)Code(代码层&#xf…

modelsim使用技巧

Modelsim关闭Add items to the Project后,该如何添加existing file: 在project页面下,右键选择add to project-add existing file 设置modelsim的仿真波形时间单位: 打开Modelsim后,在Wave-Wave Preferences后&#…

从零开始学习Web自动化:用Python和Selenium实现网站登录功能!

Web自动化测试实战项目:使用Selenium和Python完成网站登录功能的自动化测试 本文将介绍如何使用Selenium和Python编写自动化测试脚本,对网站登录功能进行测试。我们将通过模拟用户在网站上输入用户名和密码,并点击登录按钮,来检验…

JavaWeb编程语言—登录校验

一、前言&简介 前言:小编的上一篇文章“JavaWeb编程语言—登录功能实现”,介绍了如何通过Java代码实现通过接收前端传来的账号、密码信息来登录后端服务器,但是没有实现登录校验功能,这代表着用户不需要登录也能直接访问服务器…

设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

原型模式 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。 工作原…

技术分享-Jenkins

持续集成及Jenkins介绍 软件开发生命周期叫SDLC(Software Development Life Cycle),集合了计划、开发、测试、部署过程。 在平常的开发过程中, 需要频繁地(一天多次)将代码集成到主干,这个叫持…

电子烟单片机方案开发,32位单片机PY32F030电子烟解决方案

电子烟是一种低压的微电子雾化设备。可以通过加热液体产生雾状物质,供用户吸入使用的新型电子产品。它是由微控制器(MCU)、超声波雾化发生器、充电管理IC、锂离子电池、发热棒等器件构成,主要用于替代传统香烟和戒烟,与…

一文读懂什么是智能工厂?

引言 在当今快速变革的制造业中,智能工厂如一盏明灯,照亮着未来生产的道路。它们不仅代表着技术的进步,更是制造业向前迈进的里程碑。智能工厂利用先进的技术和创新方法,将传统工厂转化为高度自动化、数字化和智能化的生产中心。…

13英寸MacBook Pro停产后 Touch Bar功能被废弃

新款M3 MacBook Pro的发布标志着苹果13英寸MacBook Pro正式停产。这款13英寸MacBook Pro是最后一款搭载Touch Bar的苹果笔记本,这意味着苹果已经放弃了使用Touch Bar。 Touch Bar是一块OLED触控显示屏,位于MacBook Pro键盘的顶部。尽管苹果对它抱有很高的…

MyBatis的查询方法!!!

准备工作:1.创建一个maven工程,然后将pojo类导入到项目中去。 2.导入依赖到pom.xml文件中 3.在resources中创建log4j.properites和mybatis-config.xml 4.创建UserMapper接口和UserMapper.xml文件 5.创建测试类MyBatisTest 1.创建Maven工程,还…

蓝桥杯嵌入式——串口

CUBE里配置成异步模式,设置波特率,打开中断(先配置LCD再配置串口): 串口发送 main.c #include "string.h" char temp[20]; sprintf(temp,"Hello World\r\n"); HAL_UART_Transmit(&huart1,(…

绝地求生是国际服吗?

绝地求生(PlayerUnknowns Battlegrounds,简称PUBG)是一款多人在线的生存竞技类游戏,由韩国的蓝洞公司开发和发行。该游戏于2017年正式发布,以其创新的游戏模式和激烈的战斗场景迅速走红全球,并成为全球最具…