ShonCloud网站开发需求
旺旺:wangxixjtu 时间:2017年2月15日
整体要求
代码精炼易懂,无冗余,对第三方代码依赖少。尽可能模块化设计,便于以后升级。
用户登录后的控制台界面是关键,要求是简约大方,有科技感。需要做前端的朋友提出一个大概的方案,双方沟通好后再开始制作。
网站是全英文的,但要提供多种语言接口,以后方便添加其他语言。
网站功能介绍
该网站是我们自主开发的一个C++数值并行计算软件shonDy的web界面,方便用户建模和管理算例,免去了安装、升级等烦恼,数值计算软件的运行是在服务器端。关于shonDy的介绍,可以访问http://www.shondynamics.com
这个web系统的主要功能是,用户通过网页界面的操作,例如新建项目,项目内添加模块或者节点,表单提交数据,文件上传等造作,最终在服务器端生成一个json文件。一个项目对应一个json文件和若干stl文件。用户登录后可以查看自己的每个项目。
需要的页面
主页,有个这种风格http://getbootstrap.com/的模板就行,内容可以留空,给用户留个注册和登录的链接。颜色与shonDy的logo搭配就行。
用户注册页面,需要收集用户的信息包括
Title
选项Mr. Ms. Dr. Prof.
First Name
Last Name
Phone
Company/University
Description of your application field
文本框
其中邮件用于用户验证,无需手机验证。所有输入信息都需要前后端的校核,避免无效信息或安全问题。用户密码需要confirm。最后还要一个选框I agree to the Terms & Conditions.
3. 管理员系统
这个主要是对用户,及用户的项目进行管理。例如调整用户权限等。
4. 用户控制台Dashboard
这个是重点。用户登录后,左上方是logo预留,中间是卡片式切换Solver,一切换下面的整个项目列表全变成另外一套了。目前我们只有一个Solver,就是shonDy。这个切换只是为了将来OpenFOAM预留入口。右上方就是用户信息区,最好支持头像显示。下方是目前的已有项目及状态的列表,以及新建项目按钮。项目信息列表里也有一些按钮,包括一个没有画出来的下载按钮,就是把这个算例文件夹zip打包下载到浏览器端。
用户点击某个项目,或成功新建项目后,进入该项目的建模区域。用户新建项目,会弹出一个对话框,要求输入项目名称,并且有三种新建模式,一是新建空项目,二是加载一个项目模板(或者说别人的公开项目,这个功能可以等到二期再开展,目前留空即可),三是上传一个zip文件生产项目,这个zip文件包括json和stl文件。
建模区域分为三个frame,为了减少用户页面的切换和页面弹出。左边frame显示该项目名称,所有模块(名称与部分信息),以及添加模块,及子模块的按钮,当然模块也可删除。中间一栏,显示及编辑模块内的数据。最右边是一个3D显示区,可采用开源paraview web版,显示用户上传的stl文件,及计算生成的vtk文件。
模块信息:
固定模块解释
一级模块Control Data – 固定,必需,且唯一的模块
Parameter name
类型
默认值
单位
frame左
frame中
startTime
double
0
s
显示在模块里
都要显示可编辑
endTime
double
0.2
s
显示在模块里
deltaTime
double
0.0005
s
显示在模块里
writeInterval
double
0.1
s
particleRadius
double
0.01
m
显示在模块里
freeSurfacePressure
double
0
Pa
center
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
width
double
0
m
gravity
Vector3D,即(x,y,z)格式
(0, 0, -9.8)
m2/s
2DPlaneOffset
double
0
m
dimension
Vector3D,即(x,y,z)格式
(1, 0, 1)
这个table是要能扩展和修改的,因为我们还有些参数还在考虑是否需要让用户输入。所以需要成很精妙的函数或结构,也就是中frame里的表单是读前端里的某个结构体(也即是上面的表格),然后生成表单,结构体类似于上面的表格,可以增加新的参数,及修改或删除已有的参数。简单说,就是要做成灵活的。
其他可添加模块解释
一级模块Material Regions
这个模块在json文件中叫做particleRegions。该模块下面有4个以上的添加按钮,这里只列出4个,后期也要方便增加。所有添加按钮都可以多次添加。已添加的模块或子模块,也可以删除。
二级模块添加按钮名称
备注
solidWall
二级模块的添加按钮都在左侧一级模块下面。点击添加某按钮后,中frame填表,提交后,就出现一个用户给定名称的二级模块,该模块可删除,可在中frame里编辑。
isothermalFluid
thermalSolid
solidificationFluid
二级模块solidificationFluid
Parameter name
类型
默认值
单位
frame左
frame中
regionName
String
用户必须输入
无
内容显示在模块里
type
String
solidificationFluid固定值,只显示,不可输入和更改
内容显示在模块里
thermoProperties
Struct,可以理解为三级模块
仅名称显示在模块里,可以点击后在中frame修改
点击后其内容显示在中frame,可编辑
geometryDefinitionFiles
仅一个按钮
仅名称显示在模块里,可以点击后在中frame修改
点击后,显示浏览上传按钮,仅限提交stl文件。默认一个文件,用户可添加多个stl文件,文件名全称,作为一个string array进入json文件,文件本身存入服务器。
initialConditions
Struct,可以理解为三级模块
0.01
仅名称显示在模块里,可以点击后在中frame修改
点击后其内容显示在中frame,可编辑
三级模块thermoProperties
Parameter name
类型
默认值
单位
frame左
frame中
rho
double
1000
kg/m3
都不显示
都可显示编辑
speedOfSound
double
1500
m/s
surfaceTensionCoefficient
double
0
N/m
kinematicViscosity
double
0
m2/s
thermalConductivity
double
0
W/mK
heatCapacity
double
100
J/K
thermalExpansionCoefficient
double
0
1/K
referenceTemperature
double
300
K
volumeHeatSource
double
0
W/m3
latentHeat
double
100000
J/kg
liquidusTemperature
double
300
K
solidusTemperature
double
300
K
这个和前面的要求一样,就是要做成灵活的。
下面是这个thermalProperties对不同材料选择的支持,也就是不同的材料,不是所有的物性都需要让用户输入和生成到其json里。
Parameter name
solidWall
isothermalFluid
thermalSolid
solidificationFluid
rho
√
√
√
√
speedOfSound
√
√
√
√
surfaceTensionCoefficient
√
√
kinematicViscosity
√
√
thermalConductivity
√
√
heatCapacity
√
√
thermalExpansionCoefficient
√
referenceTemperature
√
volumeHeatSource
√
√
latentHeat
√
liquidusTemperature
√
solidusTemperature
√
三级模块initialCondition
Parameter name
类型
默认值
单位
frame左
frame中
temperature
double
300
K
不显示
显示,可修改
这个和前面的要求一样,就是要做成灵活的。
一级模块 inlets
初始只有个添加按钮,添加后可以显示添加的模块
Parameter name
类型
默认值
单位
frame左
frame中
inletName
String
0
内容显示在模块里
都要显示可编辑
fluidType
String
Optional: solidificationFluid或者isothermalFluid
内容显示在模块里
geomType
String
circle
geomNormalVector
Vector3D,即(x,y,z)格式,xyz都是double
(1, 0, 0)
geomCenterPoint
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
geomRadius
double
0.1
m
velocity
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m/s
temperature
double
300
K
thermoProperties
Struct,可以理解为三级模块。
仅名称显示在模块里,可以点击后在中frame修改
一级模块 outlets
初始只有个添加按钮,添加后可以显示添加的模块
Parameter name
类型
默认值
单位
frame左
frame中
inletName
String
0
内容显示在模块里
都要显示可编辑
geomType
String
circle
geomNormalVector
Vector3D,即(x,y,z)格式,xyz都是double
(1, 0, 0)
geomCenterPoint
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
geomRadius
double
0.1
m
一级模块pointInVolumeProbes
初始也就是个添加按钮,添加后显示若干
Parameter name
类型
默认值
单位
frame左
frame中
ID
String+int
PS1, 自动生成,不可更改
内容显示在模块里
都要显示可编辑
position
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
一级模块lineProbes
初始也就是个添加按钮,添加后显示若干
Parameter name
类型
默认值
单位
frame左
frame中
ID
String+int
PS1, 自动生成,不可更改
内容显示在模块里
都要显示可编辑
startPoint
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
endPoint
Vector3D,即(x,y,z)格式,xyz都是double
(0, 0, 0)
m
参考效果,具体由前端设计,然后商议确定
还有几个模块例如rigidBody等,在这里没有列出,为了不给你们太大压力,其他模块留到二期项目里开发。但是一定要切记,不能作死了,要足够灵活,代码精炼高效。
数据库设计
用户的数据库在普通的基础上,增加以下
userType
免费用户,付费用户,企业用户
numCores
最大可使用的核数
maxCoreHours
最大的cpu计算时长乘核数
项目数据库,主要是项目创建时间,计算启动时间,粒子数(正整数),项目状态,计算结束时间,用户等,这个还需要设计。
后台计算
每个项目创建成功后,服务器端用户的文件夹下,会有一个json文件,以及若干stl文件,存储在striSurface文件夹下。然后可以通过前端控制,后台调用脚本文件启动或终止并行计算。