geometry.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "geometry.hpp"
  2. double inf = numeric_limits<double>::infinity();
  3. Geometry::Geometry(){
  4. lX=0;
  5. nX=0;
  6. dX=0;
  7. hsoil=nullptr;
  8. dhsoil=nullptr;
  9. hbot=nullptr;
  10. dhbot=nullptr;
  11. nZ=nullptr;
  12. dZ=nullptr;
  13. Z=nullptr;
  14. }
  15. Geometry::~Geometry(){
  16. if(hsoil!=nullptr){
  17. delete[] hsoil;
  18. delete[] dhsoil;
  19. delete[] hbot;
  20. delete[] dhbot;
  21. delete[] dZ;
  22. delete[] nZ;
  23. for(size_t i=0;i<nX;++i){
  24. delete[] Z[i];
  25. }
  26. delete[] Z;
  27. }
  28. }
  29. void
  30. Geometry::initZ(double dZ_avg,bool init){
  31. if(init){
  32. nZ=new size_t[nX];
  33. dZ=new double[nX];
  34. Z=new double*[nX];
  35. }
  36. for(size_t k=0;k<nX;++k){
  37. double d=hsoil[k]-hbot[k];
  38. size_t n=d/dZ_avg;
  39. double dz=d/n;
  40. dZ[k]=dz;
  41. nZ[k]=n+1;
  42. if(init) Z[k]=new double[n+1];
  43. for(size_t j=0;j<n+1;++j){
  44. Z[k][j]=hbot[k]+j*dz;
  45. }
  46. }
  47. }
  48. void
  49. Geometry::save(fstream& file) {
  50. file.write((char*)&lX,sizeof(double));
  51. file.write((char*)&nX,sizeof(size_t));
  52. file.write((char*)&dX,sizeof(double));
  53. file.write((char*)hsoil,nX*sizeof(double));
  54. file.write((char*)dhsoil,nX*sizeof(double));
  55. file.write((char*)hbot,nX*sizeof(double));
  56. file.write((char*)dhbot,nX*sizeof(double));
  57. file.write((char*)nZ,nX*sizeof(size_t));
  58. file.write((char*)dZ,nX*sizeof(double));
  59. for(size_t i=0;i<nX;++i){
  60. file.write((char*)Z[i],nZ[i]*sizeof(double));
  61. }
  62. }
  63. void
  64. Geometry::load(fstream& file,bool init) {
  65. file.read((char*)&lX,sizeof(double));
  66. file.read((char*)&nX,sizeof(size_t));
  67. file.read((char*)&dX,sizeof(double));
  68. if(init){
  69. hsoil=new double[nX];
  70. dhsoil=new double[nX];
  71. hbot=new double[nX];
  72. dhbot=new double[nX];
  73. nZ=new size_t[nX];
  74. dZ=new double[nX];
  75. Z=new double*[nX];
  76. }
  77. file.read((char*)hsoil,nX*sizeof(double));
  78. file.read((char*)dhsoil,nX*sizeof(double));
  79. file.read((char*)hbot,nX*sizeof(double));
  80. file.read((char*)dhbot,nX*sizeof(double));
  81. file.read((char*)nZ,nX*sizeof(size_t));
  82. file.read((char*)dZ,nX*sizeof(double));
  83. for(size_t i=0;i<nX;++i){
  84. if(init) Z[i]=new double[nZ[i]];
  85. file.read((char*)Z[i],nZ[i]*sizeof(double));
  86. }
  87. }