classdef NurbsTools < handle
properties(Access = private)
basis_function_
nurbs_data_
end
methods
% Constructor
function this = NurbsTools(basis_function)
this.basis_function_ = basis_function;
this.nurbs_data_ = basis_function.topology_data_.domain_patch_data_.nurbs_data_;
end
% Plot parametric mesh formed by uniqued knot vectors
function plotParametricMesh(this)
switch this.nurbs_data_.getGeometryDimension()
case 1
unique_knot = unique(this.nurbs_data_.knot_vectors_{1});
plot(unique_knot, unique_knot*0, 'ko');
xlabel('\xi');
case 2
unique_knot_1 = unique(this.nurbs_data_.knot_vectors_{1});
unique_knot_2 = unique(this.nurbs_data_.knot_vectors_{2});
unique_knot_3 = 0;
this.plotMeshPatch(unique_knot_1, unique_knot_2, unique_knot_3);
xlabel('\xi');
ylabel('\eta');
case 3
unique_knot_1 = unique(this.nurbs_data_.knot_vectors_{1});
unique_knot_2 = unique(this.nurbs_data_.knot_vectors_{2});
unique_knot_3 = unique(this.nurbs_data_.knot_vectors_{3});
% Plot face zeta = 0
this.plotMeshPatch(unique_knot_1, unique_knot_2, 0);
% Plot face zeta = 1
this.plotMeshPatch(unique_knot_1, unique_knot_2, 1);
% Plot face eta = 0
this.plotMeshPatch(unique_knot_1, 0, unique_knot_3);
% Plot face eta = 1
this.plotMeshPatch(unique_knot_1, 1, unique_knot_3);
% Plot face xi = 0
this.plotMeshPatch(0, unique_knot_2, unique_knot_3);
% Plot face xi = 1
this.plotMeshPatch(1, unique_knot_2, unique_knot_3);
xlabel('\xi');
ylabel('\eta');
zlabel('\zeta');
end
end
% Evaluate nurbs or its derivatives or its hassian matrix at xi
function [position, gradient, hassian] = evaluateNurbs(this, xi, varargin)
if ~isequal(size(xi,2), this.nurbs_data_.getGeometryDimension())
disp('Input parametric coordinates dimension are mismatched!');
return;
end
import BasisFunction.IGA.QueryUnit
query_unit = QueryUnit();
domain_patch = this.basis_function_.topology_data_.domain_patch_data_;
% Current shape funciton have to query point by point
geo_dim = this.nurbs_data_.getGeometryDimension();
position = zeros(size(xi,1), 3);
gradient = cell(1,geo_dim);
hassian = cell(1,geo_dim*(geo_dim+1)/2);
if isempty(varargin)
% default option
varargin = {'position', 'gradient', 'hassian'};
end
if any(strcmp(varargin, 'hassian'))
for i = 1:size(xi,1)
query_unit.query_protocol_ = {domain_patch, xi(i,:), 2};
this.basis_function_.query(query_unit);
non_zero_id = query_unit.non_zero_id_;
R = query_unit.evaluate_basis_{1};
position(i,:) = R * this.nurbs_data_.control_points_(non_zero_id,1:3);
for dim_i = 1:geo_dim
temp = query_unit.evaluate_basis_{2}(dim_i,:);
gradient{dim_i}(i,:) = temp * this.nurbs_data_.control_points_(non_zero_id,1:3);
end
end
%TODO computation of the Hassian matrix
hassian = [];
elseif any(strcmp(varargin, 'gradient'))
for i = 1:size(xi,1)
query_unit.query_protocol_ = {domain_patch, xi(i,:), 1};
this.basis_function_.query(query_unit);
non_zero_id = query_unit.non_zero_id_;
R = query_unit.evaluate_basis_{1};
position(i,:) = R * this.nurbs_data_.control_points_(non_zero_id,1:3);
for dim_i = 1:geo_dim
temp = query_unit.evaluate_basis_{2}(dim_i,:);
gradient{dim_i}(i,:) = temp * this.nurbs_data_.control_points_(non_zero_id,1:3);
end
end
elseif any(strcmp(varargin, 'position'))
for i = 1:size(xi,1)
query_unit.query_protocol_ = {domain_patch, xi(i,:), 0};
this.basis_function_.query(query_unit);
non_zero_id = query_unit.non_zero_id_;
R = query_unit.evaluate_basis_{1};
position(i,:) = R * this.nurbs_data_.control_points_(non_zero_id,1:3);
end
end
end
% Plot nurbs geometry
function plotNurbs(this, varargin)
geo_dim = this.nurbs_data_.getGeometryDimension();
if ~isempty(varargin)
N = varargin{1};
else
N = 11*ones(1, geo_dim);
end
switch geo_dim
case 1
sample_pnt = linspace(0,1,N)';
position = this.evaluateNurbs(sample_pnt, 'position');
plot3(position(:,1), position(:,2), position(:,3), 'r-');
unique_knot = unique(this.nurbs_data_.knot_vectors{1});
position = this.evaluateNurbs(unique_knot, 'position');
plot3(position(:,1), position(:,2), position(:,3), 'k.');
case 2
unique_knot_vector{1} = unique(this.nurbs_data_.knot_vectors_{1});
unique_knot_vector{2} = unique(this.nurbs_data_.knot_vectors_{2});
this.plotSurfaceNurbs(N, unique_knot_vector);
case 3
% Only surface nurbs are plotted for 3d case
unique_knot_1 = unique(this.nurbs_data_.knot_vectors_{1});
unique_knot_2 = unique(this.nurbs_data_.knot_vectors_{2});
unique_knot_3 = unique(this.nurbs_data_.knot_vectors_{3});
% Plot face xi = 0
unique_knot_vector = {0, unique_knot_2, unique_knot_3};
this.plotSurfaceNurbs(N, unique_knot_vector);
% Plot face xi = 1
unique_knot_vector = {1, unique_knot_2, unique_knot_3};
this.plotSurfaceNurbs(N, unique_knot_vector);
% Plot face eta = 0
unique_knot_vector = {unique_knot_1, 0, unique_knot_3};
this.plotSurfaceNurbs(N, unique_knot_vector);
% Plot face eta = 1
unique_knot_vector = {unique_knot_1, 1, unique_knot_3};
this.plotSurfaceNurbs(N, unique_knot_vector);
% Plot face zeta = 0
unique_knot_vector = {unique_knot_1, unique_knot_2, 0};
this.plotSurfaceNurbs(N, unique_knot_vector);
% Plot face zeta = 1
unique_knot_vector = {unique_knot_1, unique_knot_2, 1};
this.plotSurfaceNurbs(N, unique_knot_vect
没有合适的资源?快使用搜索试试~ 我知道了~
Matlab中的非线性固体力学求解器_MATLAB_下载.zip
共195个文件
m:193个
querylocalmapping:1个
gitignore:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 133 浏览量
2023-04-10
23:40:42
上传
评论
收藏 193KB ZIP 举报
温馨提示
Matlab中的非线性固体力学求解器_MATLAB_下载.zip
资源推荐
资源详情
资源评论
收起资源包目录
Matlab中的非线性固体力学求解器_MATLAB_下载.zip (195个子文件)
.gitignore 73B
NurbsTools.m 37KB
NurbsGenerator.m 36KB
XML_Writer.m 23KB
bspdegelev.m 20KB
Operation.m 16KB
Domain.m 14KB
Solver.m 12KB
vtkwrite.m 11KB
FEM_UnitCube_2_2_2.m 11KB
Domain.m 10KB
PointList.m 9KB
Differential.m 9KB
Mapping.m 9KB
IntegrationRule.m 9KB
DemoIGA_LinearElasticity2D.m 8KB
DemoIGA_Cantilever_Beam.m 7KB
Demo_Test.m 7KB
XML_QuadSquare.m 7KB
DemoIGA_LinearElasticity2DWeakBC.m 7KB
Assembler.m 7KB
Nurbs_ShapeFunc.m 7KB
Constraint.m 6KB
bspkntins.m 6KB
DemoIGA_Domain.m 6KB
DemoIGA_LinearElasticity2Dquaterhole.m 5KB
DemoIGA_BasisFunction.m 5KB
DemoIGA_Uniaxial_Tension_Beam.m 5KB
IntegrationRule.m 5KB
rectanGeomMesh.m 5KB
Interpolation.m 5KB
Variable.m 5KB
DemoIGA_MultiPatch.m 5KB
NitscheInterfaceExpression.m 5KB
ElasticityNonlinearExpression3D.m 5KB
nrbmak.m 5KB
MappingUnit.m 4KB
MappingUnit.m 4KB
ElasticityNonlinearExpression2D.m 4KB
FEM_UnitCube_1_1_1.m 4KB
Test_of_XML_Writer.m 4KB
evaluate_RKPM_function_1d.m 4KB
Patch.m 4KB
FEM_XML.m 4KB
GeometryBuilder.m 4KB
DemoIGA_NonLinearElasticity3D.m 4KB
IGA_CylinderSurface.m 4KB
HyperElasticityMooney.m 4KB
DomainBase.m 3KB
DemoIGA_ThermoElasticity2D.m 3KB
ElasticityBilinearExpression.m 3KB
DemoIGA_NonLinearElasticity2D.m 3KB
DofManager.m 3KB
XML_Writer.m 3KB
ElasticityNitscheLhsExpression.m 3KB
SaintVenantKirchhoff.m 3KB
BasisFunction.m 3KB
DemoIGA_LaplaceWeakBC.m 3KB
MaterialBank.m 3KB
IGA_XML.m 3KB
nrbkntins.m 3KB
ElasticityBilinearExpression3D.m 3KB
DemoIGA_LinearElasticity3D.m 3KB
DemoIGA_Laplace3D.m 3KB
Nurbs.m 3KB
DemoIGA_TrimmedDomain.m 3KB
ElasticityTractionExpression3D.m 3KB
DemoIGA_Laplace2D.m 3KB
NitscheLhsExpression.m 3KB
ElasticityNitscheRhsExpression.m 3KB
ElasticityLinearExpression.m 3KB
FEM_Domain.m 3KB
ElasticityTractionExpression.m 3KB
DemoIGA_Differential.m 3KB
DemoIGA_LaplaceNitsche.m 3KB
Assembler.m 3KB
TensorProduct.m 3KB
NitscheRhsExpression.m 3KB
nrbdegelev.m 2KB
BilinearExpression.m 2KB
MassExpression.m 2KB
Element.m 2KB
DemoFEM_XMLfile.m 2KB
NurbsTopology.m 2KB
IGA_Rectangle.m 2KB
BilinearExpression.m 2KB
DemoIGA_Constraint.m 2KB
MeshTopology.m 2KB
Assembler.m 2KB
LinearExpression.m 2KB
findspan.m 2KB
BoundaryElement.m 2KB
DemoFEM_Laplace.m 2KB
MappingNurbsType2GaussQuadrature.m 2KB
DemoIGA_NewNurbsClass.m 2KB
DersBasisFuns.m 2KB
DemoIGA_InverseMapping.m 2KB
IGA_Tool_Box.m 2KB
Constraint.m 2KB
DomainBase.m 2KB
共 195 条
- 1
- 2
资源评论
快撑死的鱼
- 粉丝: 1w+
- 资源: 9154
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_2024-05-25-02-59-34-91_2846feb41f9b5cb675f80f9baa9a118c.jpg
- STM32F103C8 定时器捕获 频率计
- 二叉树是一种常见的数据结构,它由节点组成,每个节点最多有两个子节点,通常称为左子节点和右子节点 二叉树的创建和遍历是基础的计算
- 基于vant, vue, axios, vuex的移动端项目开发仿小米商场移动端项目软件源代码.zip
- STM32F103C8T6 FFT 频率计 TIM3内部时钟
- 状态模式(State Pattern)是一种行为设计模式
- scalascala实验
- 红外海洋船只检测数据集VOC+YOLO格式8402张7类别.7z
- 附件1-学生教师信息管理系统 附件2-学生教师信息管理系统
- vue2扩展组件-悬浮拖拽组件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功