Skip to content

DonShmily/qREST_Library

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

qREST库说明

Version1.0.20240807

项目地址

本次共封装出两个库文件:edp_library,用于计算工程需求参量(层间位移角)和gmp_library,用于计算地震动参数(反应谱、Fourier谱)。库使用Cpp编写,接口为C。生成动态库的编译器环境为MSVC 14.40。

文件目录

  • bin目录:dll动态库目录,存放编译完成的动态库文件。其中gmp_libraryedp_library为编译生成的dll库文件,其他为用到的第三方库。
  • include目录:动态库头文件目录,存放动态库接口说明的.h头文件。
  • resource目录:资源文件,存放计算输入和输出文件。
  • example目录:测试动态库的源码文件,使用Cpp编写了几个简单的函数,测试动态库的可行性与计算准确性。经测试,提供的动态库计算没有问题。
  • image目录:readme配套的图片资源文件。

接口说明

gmp_library计算模块

gmp_library提供了地震动参数计算模块,包含1个结构体和5个函数:

  • struct ResponseSpectrum:储存反应谱计算结果的结构体,包含5个成员变量: SaSvSd分别储存加速度谱、速度谱和位移谱的计算结果; result_size表示三种谱对应数组的长度(当前版本固定为500); dt表示反应谱的横轴刻度大小(当前版本固定为0.01)。

  • GetResponseSpectrum:计算反应谱的函数。函数接收4个参数: acceleration:输入加速度的一维数组; size:输入加速度数组的长度; frequency:输入加速度的采样频率; damping_ratio:计算反应谱选取的阻尼比。 返回struct ResponseSpectrum结构体表示计算结果。

  • GetPseudoResponseSpectrum:计算拟反应谱的函数。函数接收4个参数: acceleration:输入加速度的一维数组; size:输入加速度数组的长度; frequency:输入加速度的采样频率; damping_ratio:计算反应谱选取的阻尼比。 返回struct ResponseSpectrum结构体表示计算结果。

  • FourierSpectrum:计算Fourier幅值谱的函数。函数接收两个参数: acceleration:输入加速度的一维数组; size:输入加速度数组的长度。 返回一个double数组储存Fourier变换后的幅值谱结果,数组长度和输入数组相同。

  • FreeResponseSpectrum:释放反应谱结果的内存。函数接收一个参数: memory:反应谱结果。 无返回值。

  • FreeArray:释放一维数组的内存。函数接收一个参数: memory:一维数组(指针) 无返回值。

edp_library计算模块

edp_library提供了工程需求参量计算模块,包含3个结构体和5个函数:

  • struct Idr:层间位移角计算结果,储存了所有楼层的层间位移角时程,是较大的矩阵数据。包含了三个成员变量: idr:二维数组(指针),储存所有楼层的层间位移角时程,每个子指针存放一个楼层的层间位移时程,数组大小为double[story_count][time_step_count]story_count:楼层总数,idr数组的第一维大小; time_step_count:时间节点数,idr数组的第二维大小。

  • struct Building:建筑信息结构体,用于存放测点高度坐标和各楼层的高度坐标,包含4个成员变量: floor_height:楼层高度坐标,长度为floor_count的一维数组; floor_count:楼层高度坐标的尺寸; measure_point_height:测点高度坐标,长度为measure_point_count的一维数组; measure_point_countmeasure_point_height的尺寸。

  • struct MaxIdr:最大层间位移角计算结果,包含三个成员变量: max_idr:所有层最大层间位移角的计算结果,长度为story_count的一维数组; max_idr_time:各层最大层间位移角对应的相对时间(s),长度为story_count的一维数组; story_countmax_idrmax_idr_time的尺寸大小; max_idr_storymax_idr中的最大值对应的楼层坐标,max_idr[max_idr_story表示所有层所有时刻的最大层间位移角值,max_idr_time[max_idr_story]表示最大层间位移角出现的相对时间。

  • FilteringIntegral:滤波积分法计算层间位移角的算法函数。接收4个参数: input_acceleration:输入的加速度二维数组,每个子数组存放一个楼层的层间位移时程,数组大小为大小为double[building->measure_point_count][time_step_count]time_step_count:输入加速度的采样数,input_acceleration每个子数组的长度,在函数中该值会被赋给struct Idr.time_step_countfrequency:输入加速度的采样频率; building:计算需要的建筑信息,struct Building类型的结构体。 返回一个struct Idr表示层间位移角时程结果。

  • ModifiedFilteringIntegral:改进的滤波积分法计算层间位移角的算法函数(参数和返回值同FilteringIntegral)。接收4个参数: input_acceleration:输入的加速度二维数组,每个子数组存放一个楼层的层间位移时程,数组大小为大小为double[building->measure_point_count][time_step_count]time_step_count:输入加速度的采样数,input_acceleration每个子数组的长度,在函数中该值会被赋给struct Idr.time_step_countfrequency:输入加速度的采样频率; building:计算需要的建筑信息,struct Building类型的结构体。 返回一个struct Idr表示层间位移角时程结果。

  • GetMaxIdr:根据层间位移角计算结果计算最大层间位移角。接收两个参数: idr_result:层间位移角计算结果,struct Idr结构体; frequency:计算idr_result时输入加速度的采样频率。 返回一个struct MaxIdr,储存最大层间位移角结果。

  • FreeIdr:释放层间位移角计算结果的内存。函数接收一个参数: memory:层间位移角计算结果,struct Idr结构体。 无返回值。

  • FreeMaxIdr:释放最大层间位移角的计算结果。接收一个参数: memory:最大层间位移角结果,struct MaxIdr结构体。 无返回值。

图形绘制

根据上述两个库中的函数,可以实现几种图像的绘制。

加速度时程图形

  • 加速度时程图形:读取信号文件后,可以得到所有测点记录到的加速度数值,结合采样频率或者信号时间戳可以绘制出加速度信号的时程曲线。横轴为横轴为时间,间隔为采样频率的倒数1/frequency。纵轴为输入加速度的大小。

gmp_library图形

  • 反应谱图像:反应谱计算结果(包含拟反应谱)可以绘制给定加速度的反应谱图像。反应谱图像横轴为步长struct ResponseSpectrum.dt、长度struct ResponseSpectrum.result_size的数组。(这里默认为0.01*500),即横轴为0-5s的时间轴,表示反应谱的周期。反应谱图像纵轴为反应谱计算结果,数值由struct ResponseSpectrum.Sa/Sv/Sd提供。三种反应谱应绘制在不同图像中。反应谱绘制结果如下图:

    Sa
    Sv
    Sd

  • Fourier谱图像:Fourier谱计算结果的图像。横轴为频率,刻度为输入加速度的采样频率frequency/加速度采样数time_step_count,长度一般取计算结果数组长度的一半。纵轴为Fourier谱计算结果,由函数返回的数组提供。Fourier谱绘制结果如下图:

    Fourier

edp_library图形

  • 最大层间位移角分布图形:根据GetMaxIdr函数计算得到的最大层间位移角分布绘制的阶梯图。横轴为最大层间位移角结果,一维数组,由GetMaxIdr函数返回值结构体的成员变量struct MaxIdr.max_idr提供,数组长度由GetMaxIdr函数返回值结构体的成员变量struct MaxIdr.story_count提供。纵轴为建筑楼层高度,由结构体struct Building.floor_height提供(从第2项至末项),数组长度为struct Building.floor_count - 1。最大层间位移角图形如下:

    max_idr (阶梯图如不方便绘制,可先绘制折线图)

  • 单个楼层层间位移角时程图形:根据ModifiedFilteringIntegral或者FilteringIntegral可以计算得到所有层层间位移角的时程,结果以二维数组的形式打包在结构体Idr中,Idr.idr[i]可以获取第i层的层间位移角时程。由此所有楼层的层间位移角时程都是可以绘制的,绘制的形式类似于加速度的时程图。纵轴为Idr.idr[i],表示第[i]层的层间位移角大小,数组长度为Idr.time_step_count。横轴为时间,间隔为采样频率的倒数1/frequency。结果如下:

    idr_time

  • 所有楼层层间位移角分布图:类似于最大层间位移角分布图,每一时刻都可以绘制出层间位移角的分布图形,随时刻变化,可以得到层间位移角的动态时程,即可变的层间位移角时程图。横轴数据由Idr.idr[][j]获取,即对Idr.idr数组的每一个子数组取第[j]个元素表示在第[j]个时间点(即j/frequency时刻)所有楼层的层间位移角分布图。纵轴为建筑楼层高度,由结构体struct Building.floor_height提供(从第2项至末项),数组长度为struct Building.floor_count - 1

    idr_of_j

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published