数值分析学习记录

Dynamic and Static Analysis of Hydrolic Structure

0%

在Angular中添加组件的方法有很多。这里记录以下Hydro-SIM前端开发中,如何添加组件。
Hydro-SIM目前使用Nx Console托管,所以添加Componet组件时应该遵循以下步骤:

  1. 在想要添加组件的目录上右键,选择 Nx Generate (UI),打开UI页面
  2. 在弹出的页面中选择 @nx/angular - component
  3. 打开Nx Console对话框,在其中填写组件的相关信息
  4. 点击Generate按钮,等待生成完成

生成组件后会修改app.module.ts文件, 但是目前和管理组件的方式有冲突,所以要手动在app.module.ts中删除对组件的引用。同时要在生成的.ts文件中添加对组件的导出。

1
2
3
4
5
6
@NgModule({
declarations: [WaterLevelTimeChartComponent],
exports: [WaterLevelTimeChartComponent]
})

export class WaterLevelTimeChartModule{}

由于需要在网页上展示网格或者BIM模型,考虑到性能的问题,使用了Kitware的VTK.js库,但是由于VTK.js的文档不是很完善,所以在使用的过程中遇到了很多问题,这里记录一下。

  1. 集成到Angular中

Angular中使用了TypeScript,这也是选用Angular的原因。TypeScript提供了类型检查,可以在编译时发现错误,而不是在运行时。但是VTK.js是用JavaScript写的,所以需要将VTK.js转换成TypeScript。Kitware官方提供了**@kitware\vtk.js**。所以需要安装这个包。

1
npm install @kitware/vtk.js
  1. 对于未定义的部分,需要增加声明文件
1
declare module 'vtk.js/Sources/Rendering/OpenGL/RenderWindow';

将其放在src\typings\vtk.d.ts中。

  1. 在之前的版本中,上述可以方式可以解决问题。但是在最新的版本中,添加声明文件,但是还是会报错。所以干脆自己在**@kitware\vtk.js**中添加声明文件,然后重新编译。具体的做法为:

    1. 拉取vtk.js的源码
    1
    git clone https://github.com/Kitware/vtk-js
    1. 添加必要的类型定义

    2. 编译

    1
    npm run build
    1. 在vtk-js编译后的目录中运行npm link
    1
    npm link
    1. 在项目中运行npm link @kitware/vtk.js
    1
    npm link @kitware/vtk.js
    1. 在项目中运行npm install
    1
    npm install

这个时候项目中使用的代码为修改过后的代码,如果缺少类型定义就按照上述方法添加。

另外,在使用vtk.js显示时,总是会感觉分辨率低。经过和官方的源代码对比后发现,官方的源代码中将canvs的width和height设置为了150%,而我在使用时没有设置,所以导致了分辨率低的问题。

大程序在编译的时候可能会出现错误

1
2
3
4
严重性	代码	说明	项目	文件	行	禁止显示状态
错误 error #6563: A component with POINTER attribute may NOT be to the right of an array component. [DUDX]
错误 error #6563: A component with POINTER attribute may NOT be to the right of an array component. [DUDX]
错误 error #6563: A component with POINTER attribute may NOT be to the right of an array component. [DUDX]

这是因为在新版本的Inter Fortran编译器中,不允许将指针作为数组的下标。
错误的代码为:

1
2
3
do  i=1, N        
FJAC(:,i)=-Value_observ(:)%dudx(i)
enddo

其中FJAC是一个二维数组,Value_observ是一个结构体数组,dudx是一个指针数组。因此需要将其改为

1
2
3
4
5
do  i=1, N   
do j = 1, mvalue
FJAC(j,i)=-Value_observ(j)%dudx(i)
enddo
enddo

共有三处需要修改。

因为经常需要在不同的电脑上同步文件,所以就想到了用WebDav来同步文件,这样就不用担心文件丢失了。办公室电脑上装了一个硬盘存储器,利用Windows自带的IIS服务将其发布为WebDav服务,然后在家里的电脑上挂载这个硬盘存储器,这样就可以在家里和办公室同步文件了。
具体的配置步骤为:

  1. 在办公室电脑上安装IIS服务

  2. 添加一个网站,指定想要共享的物理路径。

    添加网站后,双击网站,点击“WebDAV创作规则”,添加一个规则,将所有用户的权限都设置为“读取、写入”

    此时点击浏览网站,应该可以打开WebDav的目录了。

  3. 使用FRP将其发布到公网上
    frp的配置为:

    1
    2
    3
    4
    5
    6
    [[proxies]]
    name = "webdav"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 80
    remotePort = 80

    这样就可以通过公网IP访问到WebDav服务了。

    但是这样的话,访问的时候需要输入用户名和密码,而且输入用户名和密码总是无法登录。经查阅资料发现,应该关闭Windows身份认证,启用基本身份认证。

  4. 为公网的服务器添加域名,运行

    1
    lnmp vhost add

    为其添加域名和https支持。

Ansys 混凝土本构模型

Ansys中混凝土通常使用Solid65单元,可以使用的本构模型有:

等强硬化模型(Mulitilinear Isotropic Hardening)
随动硬化模型(Multilinear Kinematic Hardening)
DP模型(Drucker-Prager)

在等强硬化模型中,初始弹模应等于第一点的斜率。

典型的混凝土本构模型定义为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
FC = 116E6
FT = FC/10
ET,1,Solid65
MP,EX,1,63375000
MP,PRXY,1,0.2
KEYOPT,1,1,0
KEYOPT,1,7,1
TB,CONCR,1
TBDATA,,0.5,0.95,FT,FC
TB,MISO,1,,18
TBPT,,0,63.81
TBPT,,0.000004,89.16
TBPT,,0.00007,111.35
TBPT,,0.000232,116
TBPT,,0.000724,104.19
TBPT,,0.002073,62.25
TBPT,,0.003474,30.48
TBPT,,0.004784,16.03
TBPT,,0.005919,10.37
TBPT,,0.006997,7.52
TBPT,,0.008834,4.99
TBPT,,0.01142,3.32
TBPT,,0.13989,2.47
TBPT,,0.016552,1.96
TBPT,,0.02039,1.5
TBPT,,0.024225,1.21
TBPT,,0.028057,1.01
TBPT,,0.030612,0.92

在实际应用中,因为下降段的斜率小于0,会导致错误。

1
TB,MISO table for material 2 at temperature 0 has a tangent slope value less than zero.   

所以可以将下降段去掉,然后重新调整混凝土的破坏准则。

Ansys中混凝土材料的参数表为:
Constant(常数) Meaning(含义)
1 Shear transfer coefficients for an open crack.(开裂时的剪切转移系数)
2 Shear transfer coefficients for a closed crack.(闭合时的剪切转移系数)
3 Uniaxial tensile cracking stress.(单轴拉伸开裂应力)
4 Uniaxial crushing stress (positive).(单轴压缩破坏应力)
5 Biaxial crushing stress (positive).(双轴压缩破坏应力)
6 Ambient hydrostatic stress state for use with constants 7 and 8.(环境静水压应力)
7 Biaxial crushing stress (positive) under the ambient hydrostatic stress state (constant 6).(环境静水压应力下的双轴压缩破坏应力)
8 Uniaxial crushing stress (positive) under the ambient hydrostatic stress state (constant 6).(环境静水压应力下的单轴压缩破坏应力)
9 Stiffness multiplier for cracked tensile condition, used if KEYOPT(7) = 1 (defaults to 0.6).(开裂时的刚度系数)

功能需求

  1. 记录收入和支出:
    • 允许用户输入一笔收入或支出的金额。
    • 对于每笔交易,允许用户选择是收入还是支出。

  2. 分类管理:
    • 提供几个基础的分类(如食物、交通、娱乐等),允许用户为每笔交易选择一个分类。

  3. 显示当前余额:
    • 在每次交易后计算并显示当前的总余额(收入减去支出)。

  4. 简单的交易历史记录:
    • 显示最近的几笔交易记录(例如最近5笔)。

  5. 按金额大小排序交易记录:
    • 允许用户选择查看按金额升序或降序排序的交易记录。

  6. 比较不同分类下的支出:
    • 允许用户查看各个分类(如食物、交通、娱乐等)的总支出,并将它们进行比较。

  7. 数据保存:
    • 将数据存储到一个文件中,每次打开的时候从文件加载内容,更新数据的时候也要将内容存放到文件中
    使用基本Java概念实现:

  8. 数据类型和变量:
    • 使用基本数据类型(如int, double)来存储金额和余额。
    • 使用字符串(String)来表示分类和交易类型(收入/支出)。

  9. 控制结构:
    • 使用if或switch语句来处理不同的用户输入,例如选择收入或支出,选择分类等。
    • 使用循环(如for或while)来显示交易历史记录。

  10. 简单的类和对象:
    • 创建一个类来表示交易,包含金额、类型(收入或支出)、分类等属性。
    • 可以创建一个类来管理整个财务,包括记录交易和计算余额的方法。

  11. 数组:
    • 使用数组来存储交易记录。
    • 提供一个方法来添加新的交易记录到数组中。

  12. 用户输入:
    • 使用Scanner类来获取用户的输入。

大致流程

  1. 启动程序,显示菜单选项(记录交易、查看余额、查看历史记录、退出)。

  2. 根据用户选择执行相应的操作。

  3. 记录交易时,要求用户输入金额、选择类型(收入/支出)和分类。

  4. 计算并显示当前余额。

  5. 如果用户选择查看历史记录,显示最近的几笔交易。

  6. 如果用户选择退出,则结束程序。

校车时刻表

班次 工作日本部发车时间 工作日龙江发车时间 工作日江宁校区发车时间 休息日本部发车时间 休息日龙江发车时间 休息日江宁校区发车时间
1 6:50 6:50 7:00不经龙江 8:00 8:10 8:00不经龙江
2 8:00 8:00 8:00不经龙江 9:00 9:10 9:30
3 8:50 8:50 9:00不经龙江 11:30 11:30
4 10:00 10:00 13:00 13:10 13:00
5 11:00 11:00 15:00 15:00
6 12:00 11:50 18:00 17:00
7 13:00 13:00 13:00 20:00 20:10 19:00
8 14:00 14:00不经龙江 22:00 21:00
9 14:50 15:00 22:10
10 16:00 16:00
11 17:00 17:00
12 17:40 17:30
13 18:00 18:00
14 19:00 19:00
15 20:00 20:00
16 21:00 21:00
17 22:00 22:10
班次 工作日本部发车时间 工作日龙江发车时间 工作日常州校区发车时间 休息日本部发车时间 休息日龙江发车时间 休息日江宁校区发车时间
1 5:50 6:15 8:00 8:00 8:40 12:30
2 7:00 8:00 10:00 13:00 12:10 16:00
3 11:50 12:10 13:00 20:00 20:30 18:00
4 13:00 13:45 16:00
5 15:30 16:00 17:00
6 20:00 20:30 18:30
7 21:20