c语言编写五节点双四面体拼接 求结点位移应力应变

时间: 2023-07-13 11:08:06 浏览: 43
这个问题涉及到了有限元分析,需要进行以下步骤: 1. 建立模型:根据五节点双四面体的几何形状,建立有限元模型。 2. 确定材料参数:根据实际情况确定材料的弹性模量和泊松比等参数。 3. 施加荷载:根据实际情况施加荷载,例如力、压力、温度等。 4. 求解位移:利用有限元方法求解节点位移。 5. 求解应力:根据节点位移和材料参数计算每个节点的应力。 6. 求解应变:根据节点位移和材料参数计算每个节点的应变。 需要使用有限元分析软件进行计算,例如ANSYS、ABAQUS等。在计算过程中需要注意模型的网格划分质量以及材料参数的准确性。
相关问题

c++编写五节点双四面体拼接 求结点位移应力应变

实现五节点双四面体拼接需要先构建五节点双四面体网格,然后根据所需的边界条件和加载情况,使用有限元方法求解结点位移、应力和应变。以下是一个简单的C++代码示例,用于计算五节点双四面体网格的位移、应力和应变: ```cpp #include <iostream> #include <vector> #include <cmath> using namespace std; // 五节点双四面体网格结构体 struct Tetrahedron { int nodes[5]; // 五个节点的编号 }; // 三维向量结构体 struct Vector3D { double x, y, z; Vector3D operator+(const Vector3D& v) const { return { x + v.x, y + v.y, z + v.z }; } Vector3D operator-(const Vector3D& v) const { return { x - v.x, y - v.y, z - v.z }; } Vector3D operator*(double s) const { return { x * s, y * s, z * s }; } Vector3D operator/(double s) const { return { x / s, y / s, z / s }; } double dot(const Vector3D& v) const { return x * v.x + y * v.y + z * v.z; } Vector3D cross(const Vector3D& v) const { return { y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x }; } double norm() const { return sqrt(x * x + y * y + z * z); } Vector3D normalized() const { double n = norm(); if (n == 0) { return { 0, 0, 0 }; } else { return { x / n, y / n, z / n }; } } }; // 计算刚度矩阵 void calculateStiffnessMatrix(const vector<Vector3D>& nodes, const Tetrahedron& tet, double E, double nu, vector<vector<double>>& K) { Vector3D p0 = nodes[tet.nodes[0]]; Vector3D p1 = nodes[tet.nodes[1]]; Vector3D p2 = nodes[tet.nodes[2]]; Vector3D p3 = nodes[tet.nodes[3]]; Vector3D p4 = nodes[tet.nodes[4]]; Vector3D v1 = p1 - p0; Vector3D v2 = p2 - p0; Vector3D v3 = p3 - p0; Vector3D v4 = p4 - p0; double det = 6 * v1.dot(v2.cross(v3)) + 4 * v4.dot(v2.cross(v3)); double C11 = 6 * v2.dot(v3) / det; double C22 = 6 * v1.dot(v3) / det; double C33 = 6 * v1.dot(v2) / det; double C12 = (4 * v4.dot(v3.cross(v2)) - 2 * v1.dot(v3.cross(v4)) - 2 * v2.dot(v4.cross(v3))) / det; double C23 = (4 * v4.dot(v1.cross(v2)) - 2 * v2.dot(v1.cross(v4)) - 2 * v3.dot(v4.cross(v1))) / det; double C31 = (4 * v4.dot(v2.cross(v1)) - 2 * v3.dot(v1.cross(v4)) - 2 * v1.dot(v4.cross(v2))) / det; double D = E / (1 - nu * nu); double c1 = D * (1 - nu); double c2 = D * nu; double C44 = D / 2; K[tet.nodes[0]][tet.nodes[0]] += (C11 + C12 + C23) * c1; K[tet.nodes[0]][tet.nodes[1]] += C12 * c1; K[tet.nodes[0]][tet.nodes[2]] += C23 * c1; K[tet.nodes[0]][tet.nodes[3]] += C31 * c1; K[tet.nodes[0]][tet.nodes[4]] += -C11 * c2 - C44; K[tet.nodes[1]][tet.nodes[1]] += (C22 + C12 + C31) * c1; K[tet.nodes[1]][tet.nodes[2]] += C23 * c1; K[tet.nodes[1]][tet.nodes[3]] += C12 * c1; K[tet.nodes[1]][tet.nodes[4]] += -C22 * c2 - C44; K[tet.nodes[2]][tet.nodes[2]] += (C33 + C23 + C12) * c1; K[tet.nodes[2]][tet.nodes[3]] += C23 * c1; K[tet.nodes[2]][tet.nodes[4]] += -C33 * c2 - C44; K[tet.nodes[3]][tet.nodes[3]] += (C11 + C12 + C31) * c1; K[tet.nodes[3]][tet.nodes[4]] += -C12 * c2 - C23 * c2 - C31 * c2 - C44; K[tet.nodes[4]][tet.nodes[4]] += C11 * c2 + C22 * c2 + C33 * c2 + 2 * C44; } // 计算位移、应力和应变 void calculateDisplacementStressStrain(const vector<Vector3D>& nodes, const vector<Tetrahedron>& tets, const vector<double>& loads, double E, double nu, vector<Vector3D>& displacements, vector<Vector3D>& stresses, vector<Vector3D>& strains) { int nNodes = nodes.size(); int nTets = tets.size(); // 初始化位移向量 displacements.resize(nNodes); for (int i = 0; i < nNodes; i++) { displacements[i] = { 0, 0, 0 }; } // 初始化刚度矩阵和载荷向量 vector<vector<double>> K(nNodes, vector<double>(nNodes, 0)); vector<double> f(nNodes, 0); // 计算刚度矩阵和载荷向量 for (int i = 0; i < nTets; i++) { calculateStiffnessMatrix(nodes, tets[i], E, nu, K); for (int j = 0; j < 5; j++) { f[tets[i].nodes[j]] += loads[i] / 4; } } // 处理边界条件 for (int i = 0; i < nNodes; i++) { if (i == 0) { // 固定第一个节点 K[i][i] = 1; f[i] = 0; } else { // 牛顿冷却边界条件 double d = nodes[i].norm(); K[i][i] += 10 / d; f[i] -= 10 / d * nodes[i].normalized().dot(displacements[i]); } } // 解线性方程组 for (int k = 0; k < nNodes; k++) { int pivot = k; for (int i = k + 1; i < nNodes; i++) { if (fabs(K[i][k]) > fabs(K[pivot][k])) { pivot = i; } } swap(K[k], K[pivot]); swap(f[k], f[pivot]); for (int i = k + 1; i < nNodes; i++) { double factor = K[i][k] / K[k][k]; for (int j = k + 1; j < nNodes; j++) { K[i][j] -= factor * K[k][j]; } f[i] -= factor * f[k]; } } for (int k = nNodes - 1; k >= 0; k--) { for (int i = k - 1; i >= 0; i--) { double factor = K[i][k] / K[k][k]; for (int j = k - 1; j >= 0; j--) { K[i][j] -= factor * K[k][j]; } f[i] -= factor * f[k]; } f[k] /= K[k][k]; K[k][k] = 1; } // 计算位移向量 for (int i = 0; i < nNodes; i++) { displacements[i].x = f[i]; } // 计算应力和应变 stresses.resize(nTets); strains.resize(nTets); for (int i = 0; i < nTets; i++) { Vector3D p0 = nodes[tets[i].nodes[0]]; Vector3D p1 = nodes[tets[i].nodes[1]]; Vector3D p2 = nodes[tets[i].nodes[2]]; Vector3D p3 = nodes[tets[i].nodes[3]]; Vector3D p4 = nodes[tets[i].nodes[4]]; Vector3D v1 = p1 - p0; Vector3D v2 = p2 - p0; Vector3D v3 = p3 - p0; Vector3D v4 = p4 - p0; double det = 6 * v1.dot(v2.cross(v3)) + 4 * v4.dot(v2.cross(v3)); double C11 = 6 * v2.dot(v3) / det; double C22 = 6 * v1.dot(v3) / det; double C33 = 6 * v1.dot(v2) / det; double C12 = (4 * v4.dot(v3.cross(v2)) - 2 * v1.dot(v3.cross(v4)) - 2 * v2.dot(v4.cross(v3))) / det; double C23 = (4 * v4.dot(v1.cross(v2)) - 2 * v2.dot(v1.cross(v4)) - 2 * v3.dot(v4.cross(v1))) / det; double C31 = (4 * v4.dot(v2.cross(v1)) - 2 * v3.dot(v1.cross(v4)) - 2 * v1.dot(v4.cross(v2))) / det; double D = E / (1 - nu * nu); double c1 = D * (1 - nu); double c2 = D * nu; double C44 = D / 2; Vector3D u0 = displacements[tets[i].nodes[0]]; Vector3D u1 = displacements[tets[i].nodes[1]]; Vector3D u2 = displacements[tets[i].nodes[2]]; Vector3D u3 = displacements[tets[i].nodes[3]]; Vector3D u4 = displacements[tets[i].nodes[4]]; Vector3D du = (u1 + u2 + u3 + u4) / 4 - u0; Vector3D s; s.x = C11 * du.x + C12 * du.y + C23 * du.z; s.y = C12 * du.x + C22 * du.y + C31 * du.z; s.z = C23 * du.x + C31 * du.y + C33 * du.z; stresses[i] = s; Vector3D e; e.x = (C11 * du.x + C12 * du.y + C23 * du.z) / E - nu / E * (s.x + s.y + s.z); e.y = (C12 * du.x + C22 * du.y + C31 * du.z) / E - nu / E * (s.x + s.y + s.z); e.z = (C23 * du.x + C31 * du.y + C33 * du.z) / E - nu / E * (s.x + s.y + s.z); strains[i] = e; } } int main() { // 构建五节点双四面体网格 vector<Vector3D> nodes = { { 0, 0, 0 }, { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, { 0, 0, -1 } }; vector<Tetrahedron> tets = { { 0, 1, 2, 3, 4 }, { 0, 1, 2, 4, 3 }, { 0, 1, 3, 4, 2 }, { 0, 2, 3, 4, 1 } }; // 设置载荷和边界条件 vector<double> loads = { 1, 0, 0, 0 }; vector<Vector3D> displacements; vector<Vector3D> stresses; vector<Vector3D> strains; double E = 100000; double nu = 0.3; // 计算位移、应力和应变 calculateDisplacementStressStrain(nodes, tets, loads, E, nu, displacements, stresses, strains); // 输出结果 for (int i = 0; i < nodes.size(); i++) { cout << "Node " << i << ": (" << nodes[i].x << ", " << nodes[i].y << ", " << nodes[i].z << ") -> (" << displacements[i].x << ", " << displacements[i].y << ", " << displacements[i].z << ")" << endl; } for (int i = 0; i < tets.size(); i++) { cout << "Tetrahedron " << i << ": stress=(" << stresses[i].x << ", " << stresses[i].y << ", " << stresses[i].z << "), strain=(" << strains[i].x << ", " << strains[i].y << ", " << strains[i].z << ")" << endl; } return 0; } ``` 在上述代码中,我们使用了有限元方法来计算五节点双四面体网格的位移、应力和应变。具体来说,我们首先在`calculateStiffnessMatrix`函数中计算了每个五节点双四面体的刚度矩阵,并将其加入到整个系统的刚度矩阵中。然后,我们在`calculateDisplacementStressStrain`函数中处理了边界条件和载荷,并解决了线性方程组以计算结点的位移向量。最后,我们使用计算得到的位移向量来计算每个五节点双四面体的应力和应变。 要运行这个代码,您需要在计算机上安装C++编译器(如GCC或Clang)。如果您使用的是Linux或Mac OS X,您可以在终端中输入以下命令来编译和运行代码: ``` g++ -std=c++11 -o fem fem.cpp && ./fem ``` 如果您使用的是Windows,您可以在命令提示符中输入以下命令: ``` g++ -std=c++11 -o fem fem.cpp fem.exe ``` 请注意,在编译代码之前,您需要将代码文件名替换为您实际使用的文件名。

c++编写五节点双四面体拼接 有限元求结点位移应力应变

双四面体拼接是指使用四面体元素对一个三维模型进行离散化,将其分解为多个四面体单元,然后将这些单元拼接起来组成整个模型。在有限元分析中,可以通过计算每个节点的位移来求解模型的应力应变情况。 以下是C++代码的一个示例,用于实现五节点双四面体拼接: ```c++ #include <iostream> #include <fstream> #include <cmath> using namespace std; const int MAX_NODE_NUM = 5000; const int MAX_ELEMENT_NUM = 10000; double node[MAX_NODE_NUM][3]; // 节点坐标 double stress[MAX_ELEMENT_NUM][6]; // 单元应力 double strain[MAX_ELEMENT_NUM][6]; // 单元应变 double displacement[MAX_NODE_NUM][3]; // 节点位移 int element[MAX_ELEMENT_NUM][5]; // 单元节点编号(五节点) int node_num, element_num; // 节点数和单元数 // 计算单元体积 double volume(int i) { double v234[3], v235[3], v245[3], v345[3]; int n2 = element[i][1], n3 = element[i][2], n4 = element[i][3], n5 = element[i][4]; for (int j = 0; j < 3; ++j) { v234[j] = node[n2][j] - node[n4][j]; v235[j] = node[n2][j] - node[n5][j]; v245[j] = node[n4][j] - node[n5][j]; v345[j] = node[n3][j] - node[n5][j]; } double t1[3], t2[3], t3[3]; cross_product(v234, v235, t1); cross_product(v235, v245, t2); cross_product(v245, v345, t3); return dot_product(t3, v234) / 6.0; } // 计算两个向量的叉积 void cross_product(double a[], double b[], double c[]) { c[0] = a[1] * b[2] - a[2] * b[1]; c[1] = a[2] * b[0] - a[0] * b[2]; c[2] = a[0] * b[1] - a[1] * b[0]; } // 计算两个向量的点积 double dot_product(double a[], double b[]) { return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; } // 计算单元应力应变 void compute_stress_and_strain(int i) { double v234[3], v235[3], v245[3], v345[3]; int n2 = element[i][1], n3 = element[i][2], n4 = element[i][3], n5 = element[i][4]; for (int j = 0; j < 3; ++j) { v234[j] = node[n2][j] - node[n4][j]; v235[j] = node[n2][j] - node[n5][j]; v245[j] = node[n4][j] - node[n5][j]; v345[j] = node[n3][j] - node[n5][j]; } double t1[3], t2[3], t3[3]; cross_product(v234, v235, t1); cross_product(v235, v245, t2); cross_product(v245, v345, t3); double vol = dot_product(t3, v234) / 6.0; double b[6][3]; for (int j = 0; j < 3; ++j) { b[0][j] = t1[j] / vol / 2; b[1][j] = t2[j] / vol / 2; b[2][j] = t3[j] / vol / 2; b[3][j] = (t1[j] + t2[j]) / vol / 2; b[4][j] = (t2[j] + t3[j]) / vol / 2; b[5][j] = (t3[j] + t1[j]) / vol / 2; } double d[6][6] = {{1, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}; double E = 2.0e11; double nu = 0.3; double lambda = E * nu / ((1 + nu) * (1 - 2 * nu)); double mu = E / (2 * (1 + nu)); d[3][3] = d[4][4] = d[5][5] = lambda + 2 * mu; d[3][4] = d[4][3] = d[4][5] = d[5][4] = d[5][3] = d[3][5] = lambda; d[0][0] = d[1][1] = d[2][2] = mu; double u[6]; for (int j = 0; j < 6; ++j) { u[j] = displacement[element[i][j]][0]; u[j + 1] = displacement[element[i][j]][1]; u[j + 2] = displacement[element[i][j]][2]; } double strain[6]; for (int j = 0; j < 6; ++j) { strain[j] = dot_product(b[j], u); } double stress[6]; for (int j = 0; j < 6; ++j) { stress[j] = 0.0; for (int k = 0; k < 6; ++k) { stress[j] += d[j][k] * strain[k]; } } } // 主程序 int main() { ifstream fin("input.txt"); fin >> node_num; for (int i = 1; i <= node_num; ++i) { fin >> node[i][0] >> node[i][1] >> node[i][2]; } fin >> element_num; for (int i = 1; i <= element_num; ++i) { fin >> element[i][0] >> element[i][1] >> element[i][2] >> element[i][3] >> element[i][4]; } fin.close(); // 计算位移 // ... // 计算应力应变 for (int i = 1; i <= element_num; ++i) { compute_stress_and_strain(i); } // 输出结果 // ... return 0; } ``` 在实际使用中,还需要对位移和应力应变进行输出和可视化等处理。

相关推荐

最新推荐

recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

机器学习怎么将excel转为csv文件

机器学习是一种利用计算机算法和统计数据的方法来训练计算机来进行自动学习的科学,无法直接将excel文件转为csv文件。但是可以使用Python编程语言来读取Excel文件内容并将其保存为CSV文件。您可以使用Pandas库来读取Excel文件,并使用to_csv()函数将其保存为CSV格式。以下是代码示例: ```python import pandas as pd # 读取 Excel 文件 excel_data = pd.read_excel('example.xlsx') # 将数据保存为 CSV 文件 excel_data.to_csv('example.csv', index=
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这
recommend-type

写出一个拉格朗日多项式插值程序,并调用该函数做图

好的,以下是一个使用拉格朗日多项式进行插值的 Python 代码: ``` import numpy as np import matplotlib.pyplot as plt def lagrangeInterpolation(x, y, x_interp): """ 使用拉格朗日多项式进行插值 x: 已知点的 x 坐标数组 y: 已知点的 y 坐标数组 x_interp: 插值点的 x 坐标数组 """ n = len(x) m = len(x_interp) L = np.zeros([n, m]) fo
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。
recommend-type

关系数据表示学习

关系数据卢多维奇·多斯桑托斯引用此版本:卢多维奇·多斯桑托斯。关系数据的表示学习机器学习[cs.LG]。皮埃尔和玛丽·居里大学-巴黎第六大学,2017年。英语。NNT:2017PA066480。电话:01803188HAL ID:电话:01803188https://theses.hal.science/tel-01803188提交日期:2018年HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaireUNIVERSITY PIERRE和 MARIE CURIE计算机科学、电信和电子学博士学院(巴黎)巴黎6号计算机科学实验室D八角形T HESIS关系数据表示学习作者:Ludovic DOS SAntos主管:Patrick GALLINARI联合主管:本杰明·P·伊沃瓦斯基为满足计算机科学博士学位的要求而提交的论文评审团成员:先生蒂埃里·A·退休记者先生尤尼斯·B·恩