1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- // 函数功能:
- // 根据设置的网格信息进行网格初始化
- // 输入:
- // mesh:结构体,包含内容见函数Intput_Initial函数部分
- // Col_Points:配点的具体信息,第n行为n阶(LG / R / L各点可能不同)
- // 输出:
- // MeshGrid网格信息, 以及对应的网格起点时间、终点时间
- // 方法:
- // 无
- // 编写:
- // 李兆亭,2019 / 12 / 24
- // 注:
- // 凡是变量命名包含1的变量均为归一化变量
- #include <iostream>
- #include <armadillo>
- #include <time.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include "GPM.h"
- using namespace std;
- using namespace arma;
- int Mesh_initial( int colpointsmax, int interval_num, vec Npoints, mat Col_Points, vec interval_points_ratio,
- mat* MeshGrid, mat* Timestart_Timeend) {
- // 按照给定间隔比例,间隔interval在phase上分配
- // 暂时只考虑单阶段的情况,后面多阶段可以改进
- mat a(interval_num, colpointsmax + 3, fill::ones);
- (*Timestart_Timeend) = -1 * ones(interval_num, 2); // 每一段内的归一化时间后的每一个间隔的开始时间 - 终点时间
- (*MeshGrid) = ones(interval_num, colpointsmax + 3); // 网格初始化
- //[-1,1]归一化后的每个间隔的起止时间
- (*Timestart_Timeend).col(1) = (*Timestart_Timeend).col(1) + cumsum(interval_points_ratio);
- (*Timestart_Timeend).col(0).rows(1, interval_num - 1) = (*Timestart_Timeend).col(1).rows(0, interval_num - 2);
- // MeshGrid的第一列记录每一个间隔内的网格点数目
- (*MeshGrid).cols(0,0) = Npoints;
- // MeshGrid的其他列记录配置点的详细信息
- int len_row = size(Npoints)(0);
- int len_col = size(Col_Points)(1);
- mat Col_Points_block(len_row, len_col, fill::zeros);
- for (int i = 0; i < len_row; i++) {
- Col_Points_block.row(i) = Col_Points.row(Npoints(i) - 1);
- }
- (*MeshGrid).cols(1, colpointsmax + 1) = Col_Points_block.cols(0, colpointsmax);
- return 1;
- }
|