首页/文章/ 详情

基于数字高程数据的真实地形建模

2小时前浏览9
   

概述

       

在土木工程、水利工程等涉及到地形的工程数值计算中,如建筑物或构筑物基础的开挖卸荷计算、混凝土坝的抗震计算、海床与海上构筑物仿真计算等等,常常需要对地形进行建模,地形的几何模型与真实场地的贴合程度会影响最终的计算结果。帖子提供了一种基于数字高程数据(Digital Elevation Model,DEM)的真实地形建模方法,该方法建模精度可调,理论上可以无限接近现实世界中的真实地形,用户可以依据自己的算力和计算需求调整建模精度。经验证,最终创建的地形模型可以成功导入ABAQUS、STARCCM、ANSYS等软件,可以进行结构化或非结构化网格划分。

需要的软件和数据

     

需要的软件有

GLOBAL MAPPERCATIA

需要的数据有

数字高程数据

生成目标地形高程点数据

       

这里以北京的数据为例讲解流程。首先将北京的数字高程数据导入GLOBAL MAPPER软件中,帖子采用的是分辨率为12.5m的数字高程数据,用户可以根据自己的需要选择其他分辨率的数据

   

对数据进行裁剪,得到我们需要建模的数据,仅仅为了演示,随便选择一个小区域

   

红色框框内部的栅格就是自己裁剪的目标地形。裁剪之后的效果如下图所示:

   

导出该区域的离散高程点坐标,依据自己的算力选择采样间距,采样间距越小建模精度越高,但是计算时间就会越长

   

生成真实地形的实体模型

       

在CATIA软件中,将高程点坐标数据拟合成离散的三角面片组成的mesh数据

   

将离散的mesh数据合成为整体的surface

   

最终形成的几何模型

   

生网格划分

       

这里以导入ABAQUS软件进行网格划分,导入其他的软件有类似的操作。将几何模型导入ABAQUS

   

地表的栅格是CATIA将点云数据分块划分为mesh所致,在画网格之前先将地表的面片进行合并

   

下面可以画网格,在ABAQUS绘制的六面体网格,Structed算法绘制

   

Sweep算法绘制六面体网格

   

在ABAQUS绘制的四面体网格

   
     
      

来源:有限元先生
Abaqus建筑CATIA水利理论ANSYS
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-29
最近编辑:2小时前
外太空土豆儿
硕士 我们穷极一生,究竟在追寻什么?
获赞 2粉丝 0文章 22课程 0
点赞
收藏
作者推荐

C++基础知识(二)

壹sizeof关键字 在正式介绍数据类型之前先介绍一个关键字,这个关键字可以用来计算数据类型占用的空间大小,下面的代码是使用sizeof关键字计算整型数据类型占用空间的例子#include <iostream>using namespace std;int main(){ int space = 0; space = sizeof(int); cout <<"int类型数据占用的空间大小为:"<< space<<"字节。" << endl; system("pause"); return 0;} 上面程序返回的结果int类型数据占用的空间大小为:4字节。 后面的内容就用sizeof关键字查看数据类型占用的空间大小。贰整型 整型数据类型用于储存整数型数据,整型数据还可以细分,分别为短整型、整型、长整型和长长整型,他们各自占用的空间大小和具体能表示的数字大小为数据类型标识符占用空间数据大小短整型short int2字节-2^15~2^15-1整型int4字节-2^31~2^31-1长整型long int见注见注长长整型long long int8字节-2^64~2^64-1注:对于long int(长整形)数据,Windows为4字节,Linux为4字节(32位),8字节(64位) ,(-2^31 ~ 2^31-1) 。一般讲,一个字节占用8位,一位有0和1两种状态,对于短整型占用两个字节,一共是16位,如若不考虑正负号,可以表示数据的大小为:2^16~2^16-1,考虑到整型数字有正负号,则需要单独拿出来一位用于表示正负号,因此短整型可以表示的数据大小为:-2^15~2^15-1。对于其他类型的整型数据,可以按照同样的规律推算大小。下面的程序则返回了各种整型数据占用的空间大小#include <iostream>#include <string>using namespace std;int main(){ cout <<"短整型数据占用的空间大小为:\t"<< sizeof(short int)<<"字节。" << endl; cout << "整型数据占用的空间大小为:\t" << sizeof(int) << "字节。" << endl; cout << "长整型数据占用的空间大小为:\t" << sizeof(long int) << "字节。" << endl; cout << "长长整型数据占用的空间大小为:\t" << sizeof(long long int) << "字节。" << endl; system("pause"); return 0;} 上面程序返回的的结果为短整型数据占用的空间大小为: 2字节。整型数据占用的空间大小为: 4字节。长整型数据占用的空间大小为: 4字节。长长整型数据占用的空间大小为: 8字节。 叁浮点型数据 浮点型数据用于表示小数,也可以用来表示整数,但是有可能造成空间浪费,,这对于强迫症患者是无法忍受的,更严重会造成数据计算时候数据类型不匹配的问题。浮点型数据也可以进行细分,可分为单精度和双精度,他们占用的空间大小和可表示的有效范围为数据类型标识符占用空间数据大小单精度float4字节7位有效数字双精度double8字节15位有效数字下面的程序则返回了两种浮点数据占用的空间大小#include <iostream>using namespace std;int main(){ cout <<"双精度浮点数据占用的空间大小为:\t"<< sizeof( float)<<"字节。" << endl; cout << "单精度浮点型数据占用的空间大小为:\t" << sizeof(double) << "字节。" << endl; system("pause"); return 0;} 上面程序返回的的结果为双精度浮点数据占用的空间大小为: 4字节。单精度浮点型数据占用的空间大小为: 8字节。 肆字符型数据 字符型数据用来表示单个的字符,话不多说,直接上程序#include <iostream>using namespace std;int main(){ char str = 'a'; cout <<"双精度浮点数据占用的空间大小为:\t"<< sizeof( char)<<"字节。" << endl; cout << "字符型变量str表示的字符为:\t"<<str << endl; system("pause"); return 0;} 上面程序声明了一个名称为str的字符,并且计算了char数据类型的占用空间,输出的内容为双精度浮点数据占用的空间大小为: 1字节。字符型变量str表示的字符为: a char占用了1个字节的空间,就是8位,每个char只能表示一个字符,每个字符又对应了一个数字,即ASCII码,下面的程序查看了字符a对应的ASCII码值#include <iostream>#include <string>using namespace std;int main(){ char str ='a'; cout <<"字符a对应的ASCII值为:\t"<< int(str)<< endl; system("pause"); return 0;} 输出的内容为字符a对应的ASCII值为: 97 所有的特殊字符都有对应的ASCII字符,详细的对应关系可以查看相应的书籍。壹字符串型数据 声明字符数据有两种方法,分别是采用char和string,下面先介绍采用char声明字符串。#include <iostream>using namespace std;int main(){ char str[] = "I am a tigger!"; cout <<str<< endl; system("pause"); return 0;} 采用char声明字符串的本质是创建了char类型的不定长数组。数组是后面的内容,下面采用string声明字符串。#include <iostream>#include <string>using namespace std;int main(){ string str = "I am a tigger!"; cout << "string 类型数据占用的空间大小为:\t" << sizeof(string) << endl; cout << str << endl; system("pause"); return 0;} 当采用string声明字符串的时候,必须包含string标准库文件,上面程序的第二行就是包含语句。上述程序的输出结果为string 类型数据占用的空间大小为: 28I am a tigger! 以上是本次帖子的所有内容,后续会进行输入输出方面的程序介绍,终于可以和屏幕进行交互了! 来源:有限元先生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈