# PslDyna **Repository Path**: aksoam/psldyna ## Basic Information - **Project Name**: PslDyna - **Description**: Plate-shell & Solid Linear Dynamic analysis procedure ( Fortran ) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-16 - **Last Updated**: 2025-08-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PsLDyna : plane-shell & solid dynamics analysis program >编写时,项目包管理使用msys2 ucrt64 四节点板壳单元线性动力学分析程序pdyna以及八节点六面体单元C3D8I线性动力学分析程序sdyna的fortran源代码 命令行参数如下: ```shell pdyna.exe ./inputs.txt output_file_name # or sdyna.exe ./inputs.txt output_file_name ``` inputs.txt文件中应包含如下内容: ```shell file path of node_data.txt file path of element_data.txt file path of dbc.txt file path of fbc.txt file path of amp.txt file path of config.txt ``` ## 编译 ### 依赖 + blas + lapack ### gdb调试 ```shell gfortran.exe \ -o psl -llapack -lblas -g -O0 -fcheck=all -fbacktrace -Wall gdb ./psl.exe ``` 进入gdb后: ```shell run ./inputs.txt output_file_name ``` ### cmake编译 在msys2终端下,执行 ```shell mkdir build && cd build cmake -G "Unix Makefiles" .. && make ``` 运行程序 ```shell ./excutable_file.exe ./inputs.txt output_file_name # inputs.txt incude: # ./one_elem/node.txt # ./one_elem/element.txt # ./one_elem/dbc.txt # ./one_elem/fbc.txt # ./one_elem/amp.txt # ./one_elem/conf.txt ``` ## 输入文件说明 ### 命令行参数文件 程序的第一个命令行参数是一个**txt文件,其中包含配置文件+输入参数文件的路径** ```txt inputs.txt incude: ./one_elem/node.txt ./one_elem/element.txt ./one_elem/dbc.txt ./one_elem/fbc.txt ./one_elem/amp.txt ./one_elem/conf.txt ``` 这六个文件顺序和位置不能改变,对于不同的分析类型,有些文件可能不需要,那就在该行写上**##** ### 配置文件 配置文件,用于配置程序运行参数。 #### 静力分析(LS:linear static)类型 静力分析需要以下数据文件: ```txt ./one_elem/node.txt ./one_elem/element.txt ./one_elem/dbc.txt ./one_elem/fbc.txt ./one_elem/conf.txt ``` 用于sdyna.exe的config文件格式如下: ```txt LS,单元类型[c3d8/c3d8i] 时间增量, 总时间 弹性模量, 泊松比 ``` 用于pdyna.exe的config文件格式如下: ```txt LS 时间增量, 总时间 弹性模量, 泊松比, 单元厚度 ``` #### 固有频率分析(NF:natural frequency)类型 模态分析需要以下数据文件: ```txt ./one_elem/node.txt ./one_elem/element.txt ./one_elem/dbc.txt ./one_elem/conf.txt ``` > 需要注意的是: **固有频率分析只支持0位移约束** 用于sdyna.exe的config.txt文件格式如下: ```txt NF,单元类型[c3d8/c3d8i] 提取的模态数 弹性模量, 泊松比, 密度 ``` 用于pdyna.exe的config.txt文件格式如下: ```txt NF 提取的模态数 弹性模量, 泊松比, 单元厚度, 密度 ``` #### 动态分析(DY:dynamic)类型 程序采用**广义-$\alpha$法**对动力学方程$M\ddot{u}+C\dot{u}+Ku=F$进行直接积分从而求解瞬态分析。 本程序使用瑞利阻尼$C=\alpha M+\beta K$ 边界条件支持: + 节点固定位移约束 + 节点非0位移/速度/加速度约束,但是对于速度和加速度约束,必须先求出 + 节点力加载 幅值曲线目前支持(非)周期性幅值曲线,可以使用amp_gen.exe生成周期性幅值曲线的时间点数据文件。非周期幅值曲线没有给出程序工具,需用其他工具如excel,python,matlab。 使用tools\Periodic_Curve_Visualization.py脚本可以进行可视化幅值曲线 动态分析类型需要的输入文件有: ```txt ./.../node.txt ./.../element.txt ./.../dbc.txt ./.../fbc.txt ./.../amp.txt ./.../conf.txt ``` 用于sdyna.exe的config.txt文件格式如下: ```txt DY,单元类型[c3d8/c3d8i] 总时间, 时间步 弹性模量, 泊松比, 密度 瑞利阻尼alpha, 瑞利阻尼beta ``` 用于pdyna.exe的config.txt文件格式如下: <待完善> ### 输入参数文件 > 文件中的nlabel, elabel,不会用于计算,随便写一个数就行,知识方便直接从abaqus inp文件复制数据 node.txt格式: 节点数 nlabel, 节点坐标x, 节点坐标y, 节点坐标z .... element.txt格式: 单元数 elabel, 节点编号1 ,节点编号2 ,节点编号3 ,节点编号4,... .... dbc.txt格式: 节点编号,节点自由度(1~6) ,位移值 .... fbc.txt格式: 节点编号, 节点自由度(1~6) , 幅值曲线ID,力值x .... amp.txt格式: [time points number] [curve number] 曲线1时间点1,A(t)赋值,dA/dt(t)赋值,d²A/dt²(t)赋值 曲线1时间点2,A(t)赋值,dA/dt(t)赋值,d²A/dt²(t)赋值 ..... 曲线2时间点2,A(t)赋值,dA/dt(t)赋值,d²A/dt²(t)赋值 .... 曲线3时间点2,A(t)赋值,dA/dt(t)赋值,d²A/dt²(t)赋值 .... .... ## 结果文件 结果文件同时输出自定义的结果文件和tecplot数据文件; 前者可以用view.py进行可视化;后者需要tecplot软件 ## 时间信息 ```txt write time info: xxxx.xx.xx xx:xx:xx ``` ## 节点坐标 (nodes.dat) ```txt # NodeID, Node Coordinates(X,Y,Z) 1 0.0 0.0 0.0 2 1.2 0.0 0.0 ... ``` ### 单元连接 (elements.dat) ```txt # ElemID , Element Connectivity 1 1 2 5 4 0.01 ... ``` ### 节点结果数据 (按时间步存储) ```txt # NodeIDNode, Displacements( Ux, Uy, Uz,URx, URy, URz, UMAG) ## Time=0.0 1 0.001 -0.002 0.0 0.001 -0.002 0.0 1.0 ... ## Time=0.1 ... # NodeID, Node Reactions(Rx, Ry, Rz, RMx, RMy, RMz) ## Time=0.0 1 0.001 -0.002 0.0 0.001 -0.002 0.0 2.0 ... ## Time=0.1 ... ``` ## 编程注意事项 fortran数组是列优先的,使用reshape(array,shape)时,会将数组从列方向开始reshape,和python刚好相反. 在使用write(*,) array时候,fortran会将数组按**列优先**输出. 所以直接使用write(*,*) array 会导致输出结果的显示错误. 可以如下方式解决: ```cpp write(*,*) transpose(array) ``` 或者 ```cpp do i=1,size(array,1) write(*,*) array(i,:) end do ```