Mesh_initial.cpp 1.6 KB

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