gismo-3维IGA

news2024/11/16 1:21:51

文章目录

  • 前言
  • 一、简单示例
  • 二、gismo-3维IGA
    • 3维程序中的几何模型
  • 三、xml文件的理解
    • 1、xml文件示例
    • 2、gismo中二维示例文件-一个曲面(简单)
  • 四、三维程序中xml文件的理解
    • 三维几何模型
    • 边界信息
  • 五、三维程序运行
    • 细化四次
    • 细化5次
  • 总结 #pic_center


前言

只是为方便学习,不做其他用途!

一、简单示例

参考网页 Tutorial 02: Geometry

#include <gismo.h>

using namespace gismo;

int main(int, char**)
{
    gsInfo.precision(3);
    gsKnotVector<>   kv(-1, 0, 3, 3, 1);
    gsBSplineBasis<> bsp(kv);
    gsInfo << bsp.detail() << "\n";

    bsp.uniformRefine();
    gsInfo << bsp.detail() << "\n";

    return 0;
}

在这里插入图片描述

二、gismo-3维IGA

运行代码需要配置好gismo环境
还需要将 terrific.xml 放在项目文件下,和cpp文件放在同一文件路径下

在这里插入图片描述

/// This is an example of using the linear elasticity solver on a 3D multi-patch geometry.
/// The problems is part of the EU project "Terrific".
///
/// Authors: O. Weeger (2012-1015, TU Kaiserslautern),
///          A.Shamanskiy (2016 - ...., TU Kaiserslautern)
#include <gismo.h>
#include <gsElasticity/gsElasticityAssembler.h>
#include <gsElasticity/gsWriteParaviewMultiPhysics.h>
#include <gsElasticity/gsGeoUtils.h>

using namespace gismo;

int main(int argc, char* argv[])
{
    gsInfo << "Testing the linear elasticity solver in 3D-线弹性求解器的三维测试.\n";

    //=============================================================//
                       // Input //
    //=============================================================//

    //std::string filename("terrific.xml");//初始数据文件
    std::string filename("test.xml");//初始数据文件
    real_t youngsModulus = 74e9;//杨氏模量
    real_t poissonsRatio = 0.33;//泊松比
    index_t numUniRef = 0;//节点插入数
    index_t numDegElev = 0;//升阶次数
    index_t numPlotPoints = 10000;//preview软件画图的点数量


    // minimalistic user interface for terminal 终端最简用户界面
    gsCmdLine cmd("Testing the linear elasticity solver in 3D.");// 定义一个gsCmdLine类 命名为cmd
    cmd.addInt("r", "refine", "Number of uniform refinement application", numUniRef);
    cmd.addInt("d", "degelev", "Number of degree elevation application", numDegElev);
    cmd.addInt("p", "points", "Number of points to plot to Paraview", numPlotPoints);
    try { cmd.getValues(argc, argv); } //  不太用看  不知道这个命令代表啥
    catch (int rv) { return rv; }

    //=====================================================================//
        // Scanning geometry and creating bases:扫描几何和创建基函数  //
    //=====================================================================//

    // scanning geometry 扫描几何
    gsMultiPatch<> geometry; //  定义一个多片
    gsReadFile<>(filename, geometry);// 将plateWithHole.xml文件中的数据赋值给 geometry
    // creating basis 生成基函数
    gsMultiBasis<> basis(geometry);
    for (index_t i = 0; i < numDegElev; ++i) // 升阶次数
        basis.degreeElevate();
    for (index_t i = 0; i < numUniRef; ++i) // k细化(节点插入)次数
        basis.uniformRefine();
    gsInfo << basis ;

    //=====================================================================//
        // Setting loads and boundary conditions  设置载荷和边界条件 //
    //=====================================================================//

    // source function, rhs  源函数?-解析解?
    gsConstantFunction<> f(0., 0., 0., 3);
    // surface load, neumann BC 黎曼边界对应载荷边界条件  荷载BC   力的边界条件
    gsConstantFunction<> g(20e6, -14e6, 0, 3);

    // boundary conditions 边界条件  黎曼边界对应载荷边界条件    dirichlete对应位移边界条件
    gsBoundaryConditions<> bcInfo;
    // Dirichlet BC are imposed separately for every component (coordinate) 对每个分量(坐标)分别施加 Dirichlet BC
    for (index_t d = 0; d < 3; d++)
    {
        bcInfo.addCondition(0, boundary::back, condition_type::dirichlet, 0, d);
       /* bcInfo.addCondition(1, boundary::back, condition_type::dirichlet, 0, d);
        bcInfo.addCondition(2, boundary::south, condition_type::dirichlet, 0, d);*/
    }
    // Neumann BC are imposed as one function 将 Neumann BC 作为一个函数
    bcInfo.addCondition(0, boundary::front, condition_type::neumann, &g);
    //bcInfo.addCondition(14, boundary::north, condition_type::neumann, &g);

    //=====================================================================//
              // Assembling & solving //
    //=====================================================================//

    // creating assembler   创建刚度矩阵?
    gsElasticityAssembler<real_t> assembler(geometry, basis, bcInfo, f);
    assembler.options().setReal("YoungsModulus", youngsModulus);
    assembler.options().setReal("PoissonsRatio", poissonsRatio);
    assembler.options().setInt("DirichletValues", dirichlet::l2Projection);
    gsInfo << "Assembling...\n";
    gsStopwatch clock;
    clock.restart();
    assembler.assemble();
    gsInfo << "Assembled a system with "
        << assembler.numDofs() << " dofs in " << clock.stop() << "s.\n";

    gsInfo << "Solving...\n";
    clock.restart();

#ifdef GISMO_WITH_PARDISO
    gsSparseSolver<>::PardisoLDLT solver(assembler.matrix());
    gsVector<> solVector = solver.solve(assembler.rhs());
    gsInfo << "Solved the system with PardisoLDLT solver in " << clock.stop() << "s.\n";
#else
    gsSparseSolver<>::SimplicialLDLT solver(assembler.matrix());
    gsVector<> solVector = solver.solve(assembler.rhs());
    gsInfo << "Solved the system with EigenLDLT solver in " << clock.stop() << "s.\n";
#endif

    //=====================================================================//
                  // Output //
    //=====================================================================//

    // constructing solution as an IGA function
    gsMultiPatch<> solution;
    assembler.constructSolution(solVector, assembler.allFixedDofs(), solution);
    // constructing stresses
    gsPiecewiseFunction<> stresses;
    assembler.constructCauchyStresses(solution, stresses, stress_components::von_mises);

    if (numPlotPoints > 0)
    {
        // constructing an IGA field (geometry + solution)
        gsField<> solutionField(assembler.patches(), solution);
        gsField<> stressField(assembler.patches(), stresses, true);
        // creating a container to plot all fields to one Paraview file
        std::map<std::string, const gsField<>*> fields;
        fields["Deformation"] = &solutionField;
        fields["von Mises"] = &stressField;
        gsWriteParaviewMultiPhysics(fields, "test_le", numPlotPoints);
        gsInfo << "Open \"test_le.pvd\" in Paraview for visualization.\n";
    }

    return 0;
}

3维程序中的几何模型

在这里插入图片描述
在这里插入图片描述

三、xml文件的理解

1、xml文件示例

网址https://gismo.github.io/Tutorial02.html

在这里插入图片描述
在这里插入图片描述

2、gismo中二维示例文件-一个曲面(简单)

可以参考之前的博客gismo中用等几何解决线弹性问题的程序示例来理解xml文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注: 一个平面没有 interfaces这一项
对 interfaces这一项 目前还没有理解

四、三维程序中xml文件的理解

三维几何模型

在这里插入图片描述

在这里插入图片描述

边界信息

给的示例文件中有15个体组装在一起

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、三维程序运行

细化四次

运行时间:14分钟

在这里插入图片描述

细化5次

运行时间:4.58h
组总刚:1.6h
解方程组:2.98h

在这里插入图片描述

总结 #pic_center

空格         空格

二维数
1
1
1

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

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

相关文章

C#读写FDX-B ISO11784/85协议动物标签源码

一个FDX-B ISO11784/85协议动物标签内包括了以下信息&#xff1a; 11位的前导码&#xff1b;38位的SN序号&#xff1b;10位国家代码&#xff1b;1位data block标识&#xff1b;14位保留位&#xff1b;1位Animal动物标识&#xff1b;以上64位数据的crc16ccitt校验码&#xff0c…

短视频矩阵源码系统打包.源码

Masayl是一款基于区块链技术的去中心化应用程序开发平台&#xff0c;可帮助开发者快速、便捷地创建去中心化应用程序。Masayl拥有丰富的API和SDK&#xff0c;为开发者们提供了支持。此外&#xff0c;Masayl还采用了高效的智能合约技术&#xff0c;确保应用程序的稳定、安全和高…

项目集管理—项目集治理

一、概述 项目集治理是实现和执行项目集决策&#xff0c;为支持项目集而制定实践&#xff0c;并维持项目集监督的绩效领域。 本章包括&#xff1a; 项目集治理实践项目集治理角色项目集治理设计与实施 项目集治理包括为了满足组织战略和运营目标的要求&#xff0c;对项目集实…

【虹科案例】虹科数字化仪在激光雷达大气研究中的应用

01 莱布尼茨研究所使用激光雷达进行大气研究 图 1&#xff1a;在 Khlungsborn 的 IAP 办公室测试各种激光器 大气研究使用脉冲激光束通过测量大气中 100 公里高度的多普勒频移和反向散射光来测量沿光束的温度和风速。返回的光信号非常微弱&#xff0c;会被阳光阻挡&#xff0c…

90后的心声:都别卷了,上年纪了真的卷不动.....

内卷&#xff0c;是现在热度非常高的一个词汇&#xff0c;随着热度不断攀升&#xff0c;隐隐到了“万物皆可卷”的程度。 内卷的来源 内卷最早的“出处”是几张名校学霸的图片。 大学生们刷爆朋友圈的几张“内卷”图片是这样的&#xff1a;有的人骑在自行车上看书&#xff0c…

如何处理亿级图片排重(精准排重,相似排重)

图片相似度对比 1、需求 假如有一个图片池&#xff0c;存有1亿图片。给一张目标图片&#xff0c;在图片池中做匹配。 判断一张图片是否在图片池中出现过。&#xff08;完全一样&#xff09;判断有没有相似的出现过。比如两张图相似度90&#xff0c;两张图片是在描述一件事情。 …

系统架构师之高内聚低耦合

一、概念&#xff1a; 标记耦合&#xff08;Stamp Coupling&#xff09;和数据耦合&#xff08;Data Coupling&#xff09;是软件设计中两种不同的耦合类型&#xff0c;它们之间的区别如下&#xff1a; 标记耦合&#xff1a;标记耦合是指模块之间通过参数传递标记或标识符来进…

对安装Linux的服务器进行缓存清除

安装Linux的服务器缓存过高导致服务器运行速度慢 第一步&#xff0c;查看当前服务器中Linux系统的状态。 命令&#xff1a;free -h 第二步&#xff1a;备份内存缓冲区中的数据到磁盘中。 命令&#xff1a;sync 在大多数情况下&#xff0c;不需要手动使用sync命令&#xff0…

跨境电商如何进行仓储物流管理?

跨境电商如何进行仓储物流管理&#xff1f; 01跨境电商仓储物流管理痛点在哪&#xff1f; 供应链不稳定&#xff1a;因为要涉及多个国家的生产和供应环节&#xff0c;跨境物流的过程中还需要遵守目的地国家和货物品类的规定&#xff0c;这会增加仓储和物流成本&#xff0c;并…

创新需求:台灯加装语音识别芯片,打造智能化生活方式

为了满足人们对于智能化生活的需求&#xff0c;现在有一种创新的需求——为台灯加装语音识别芯片&#xff0c;从而实现远程控制、语音操控等更为智能的功能。 科技行业的快速发展&#xff0c;使得语音识别芯片也越来越普及。它们可以使电子产品具有智能化、人性化的交互方式。…

【Java系列】MyBatis-Plus常见面试题

问题列表 Q1&#xff1a;MyBatis-Plus是什么&#xff1f;它有什么优点&#xff1f; MyBatis-Plus是MyBatis框架的一个扩展库&#xff0c;它提供了一系列方便的API和工具&#xff0c;可以简化常见的数据库操作。MyBatis-Plus的优点包括&#xff1a; 提高开发效率&#xff1a;My…

第1章:SpringMVC简介

一、SpringMVC 1.Java语言学习流程 2.SpringMVC的主要内容 二、SpringMVC简介 1.什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型&#xff0c;视图&#xff0c;控制器划分M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用…

用Python构建大数据推荐系统:一个世界500强企业的成功案例

推荐系统是大数据时代的利器&#xff0c;它能够为企业提升用户体验、增加用户粘性、促进销售转化、提高营销效率等。但是&#xff0c;搭建一个成功的推荐系统并不容易&#xff0c;它需要综合考虑多方面的因素&#xff0c;并根据业务场景、用户需求、数据变化等不断地进行迭代和…

Nginx:Tomcat部署及优化(一)

Nginx&#xff1a;Rewrite 一、Tomcat介绍1.1 Tomcat 简介1.2 Tomcat 核心的组件1.2.1 什么是 servlet1.2.2 什么是 JSP 1.3 Tomcat 功能组件结构1.3.1 Container 结构分析 1.4 Tomcat 请求过程 二、Tomcat 服务部署三、Tomcat 虚拟主机配置四、Tomcat多实例部署 一、Tomcat介绍…

带你学透SQL语言的核心——DML操作

0️⃣写在前面 DML&#xff08;Data Manipulation Language&#xff09;是SQL语言的核心部分&#xff0c;其主要用于对数据库的数据进行增删改查。在学习数据时&#xff0c;学习DML操作是必不可少的一部分。 文章目录 0️⃣写在前面1️⃣添加数据2️⃣修改数据3️⃣删除数据4️…

chatgpt赋能python:Python教程:如何取出一个三位整数123的各个位并输出?

Python教程&#xff1a;如何取出一个三位整数123的各个位并输出&#xff1f; 如果您正在学习Python编程语言&#xff0c;那么您一定会遇到需要处理数字的情况。Python是一种非常方便的语言&#xff0c;可以帮助您轻松地提取一个三位整数的各个位数&#xff0c;并将其输出。在本…

Hopfield神经网络与受限波尔兹曼机

神经网络可分为两大类&#xff1a; 一类是多层神经网络、卷积神经网络&#xff1a;可用于模式识别另一类是相互连接型网络&#xff1a;可通过联想记忆去除输入数据中的噪声。 深度学习目录&#xff1a; 自适应线性单元 (Widrow and Hoff, 1960)神经认知机 (Fukushima, 1980)…

海睿思分享 | 企业如何加强采购风险控制

企业运营的主要流程&#xff0c;不会因为企业人员规模或者业务规模大小的差异&#xff0c;而出现巨大的差异。千万亿市值的上市公司、不足百人的新兴公司&#xff0c;面对的经营风险本质上不会有明显的区别。今天我们一起分享企业经营管理中常见的风险应对策略。 对于企业而言…

专业分析┃微电子专业介绍及发展前瞻

不知道提到微电子&#xff0c;你最先想到的是什么&#xff1f;芯片&#xff1f;卡脖子&#xff1f;摩尔定律&#xff1f; 因为近两年芯片被限制的原因&#xff0c;大家经常可以从各路媒体上看到“芯片”一词。微电子作为一个学科&#xff0c;简单的说&#xff0c;就是研究如何…

C++,Qt部分面试和笔试题

面试这么多次&#xff0c;C这块基础太差了&#xff0c;乘着还有印象总结下相关的面试问答和笔试题&#xff0c;后续会不断更新内容 目录 问答题1.计算机网络七层体系结构2.C中关键字static和const的使用3.QList和QVector for循环输出速度比较4.构造函数能否为虚函数5.谈谈你对面…