source.cpp 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. #include "source.hpp"
  2. Pump::Pump(){
  3. amplitude_init=1.e-4;
  4. left_init=0.45;
  5. right_init=0.55;
  6. bottom_init=0.45;
  7. top_init=0.55;
  8. delta_left_init=0.05;
  9. delta_right_init=0.05;
  10. delta_top_init=0.05;
  11. delta_bottom_init=0.05;
  12. amplitude_final=1.e-4;
  13. left_final=0.45;
  14. right_final=0.55;
  15. bottom_final=0.45;
  16. top_final=0.55;
  17. delta_left_final=0.05;
  18. delta_right_final=0.05;
  19. delta_top_final=0.05;
  20. delta_bottom_final=0.05;
  21. }
  22. void
  23. Pump::save(fstream& file){
  24. file.write((char*)&amplitude_init,sizeof(double));
  25. file.write((char*)&left_init,sizeof(double));
  26. file.write((char*)&right_init,sizeof(double));
  27. file.write((char*)&bottom_init,sizeof(double));
  28. file.write((char*)&top_init,sizeof(double));
  29. file.write((char*)&delta_left_init,sizeof(double));
  30. file.write((char*)&delta_right_init,sizeof(double));
  31. file.write((char*)&delta_bottom_init,sizeof(double));
  32. file.write((char*)&delta_top_init,sizeof(double));
  33. file.write((char*)&amplitude_final,sizeof(double));
  34. file.write((char*)&left_final,sizeof(double));
  35. file.write((char*)&right_final,sizeof(double));
  36. file.write((char*)&bottom_final,sizeof(double));
  37. file.write((char*)&top_final,sizeof(double));
  38. file.write((char*)&delta_left_final,sizeof(double));
  39. file.write((char*)&delta_right_final,sizeof(double));
  40. file.write((char*)&delta_bottom_final,sizeof(double));
  41. file.write((char*)&delta_top_final,sizeof(double));
  42. }
  43. void
  44. Pump::load(fstream& file){
  45. file.read((char*)&amplitude_init,sizeof(double));
  46. file.read((char*)&left_init,sizeof(double));
  47. file.read((char*)&right_init,sizeof(double));
  48. file.read((char*)&bottom_init,sizeof(double));
  49. file.read((char*)&top_init,sizeof(double));
  50. file.read((char*)&delta_left_init,sizeof(double));
  51. file.read((char*)&delta_right_init,sizeof(double));
  52. file.read((char*)&delta_bottom_init,sizeof(double));
  53. file.read((char*)&delta_top_init,sizeof(double));
  54. file.read((char*)&amplitude_final,sizeof(double));
  55. file.read((char*)&left_final,sizeof(double));
  56. file.read((char*)&right_final,sizeof(double));
  57. file.read((char*)&bottom_final,sizeof(double));
  58. file.read((char*)&top_final,sizeof(double));
  59. file.read((char*)&delta_left_final,sizeof(double));
  60. file.read((char*)&delta_right_final,sizeof(double));
  61. file.read((char*)&delta_bottom_final,sizeof(double));
  62. file.read((char*)&delta_top_final,sizeof(double));
  63. }
  64. double
  65. Pump::get_amplitude(double t){
  66. return (1-t)*amplitude_init+t*amplitude_final;
  67. }
  68. double
  69. Pump::get_left(double t){
  70. return (1-t)*left_init+t*left_final;
  71. }
  72. double
  73. Pump::get_right(double t){
  74. return (1-t)*right_init+t*right_final;
  75. }
  76. double
  77. Pump::get_top(double t){
  78. return (1-t)*top_init+t*top_final;
  79. }
  80. double
  81. Pump::get_bottom(double t){
  82. return (1-t)*bottom_init+t*bottom_final;
  83. }
  84. double
  85. Pump::get_left_delta(double t){
  86. return (1-t)*delta_left_init+t*delta_left_final;
  87. }
  88. double
  89. Pump::get_right_delta(double t){
  90. return (1-t)*delta_right_init+t*delta_right_final;
  91. }
  92. double
  93. Pump::get_top_delta(double t){
  94. return (1-t)*delta_top_init+t*delta_top_final;
  95. }
  96. double
  97. Pump::get_bottom_delta(double t){
  98. return (1-t)*delta_bottom_init+t*delta_bottom_final;
  99. }
  100. Cloud::Cloud(){
  101. amplitude_init=1.e-4;
  102. left_init=0.45;
  103. right_init=0.55;
  104. delta_left_init=0.05;
  105. delta_right_init=0.05;
  106. amplitude_final=1.e-4;
  107. left_final=0.45;
  108. right_final=0.55;
  109. delta_left_final=0.05;
  110. delta_right_final=0.05;
  111. }
  112. void
  113. Cloud::save(fstream& file){
  114. file.write((char*)&amplitude_init,sizeof(double));
  115. file.write((char*)&left_init,sizeof(double));
  116. file.write((char*)&right_init,sizeof(double));
  117. file.write((char*)&delta_left_init,sizeof(double));
  118. file.write((char*)&delta_right_init,sizeof(double));
  119. file.write((char*)&amplitude_final,sizeof(double));
  120. file.write((char*)&left_final,sizeof(double));
  121. file.write((char*)&right_final,sizeof(double));
  122. file.write((char*)&delta_left_final,sizeof(double));
  123. file.write((char*)&delta_right_final,sizeof(double));
  124. }
  125. void
  126. Cloud::load(fstream& file){
  127. file.read((char*)&amplitude_init,sizeof(double));
  128. file.read((char*)&left_init,sizeof(double));
  129. file.read((char*)&right_init,sizeof(double));
  130. file.read((char*)&delta_left_init,sizeof(double));
  131. file.read((char*)&delta_right_init,sizeof(double));
  132. file.read((char*)&amplitude_final,sizeof(double));
  133. file.read((char*)&left_final,sizeof(double));
  134. file.read((char*)&right_final,sizeof(double));
  135. file.read((char*)&delta_left_final,sizeof(double));
  136. file.read((char*)&delta_right_final,sizeof(double));
  137. }
  138. double
  139. Cloud::get_amplitude(double t){
  140. return (1-t)*amplitude_init+t*amplitude_final;
  141. }
  142. double
  143. Cloud::get_amplitude_max(){
  144. return max(amplitude_init,amplitude_final);
  145. }
  146. double
  147. Cloud::get_left(double t){
  148. return (1-t)*left_init+t*left_final;
  149. }
  150. double
  151. Cloud::get_right(double t){
  152. return (1-t)*right_init+t*right_final;
  153. }
  154. double
  155. Cloud::get_left_delta(double t){
  156. return (1-t)*delta_left_init+t*delta_left_final;
  157. }
  158. double
  159. Cloud::get_right_delta(double t){
  160. return (1-t)*delta_right_init+t*delta_right_final;
  161. }
  162. Source::~Source(){
  163. for(auto it=pumps.begin();it!=pumps.end();++it){
  164. delete *it;
  165. }
  166. for(auto it=clouds.begin();it!=clouds.end();++it){
  167. delete *it;
  168. }
  169. }
  170. Pump*
  171. Source::addPump(){
  172. Pump* pump=new Pump;
  173. pumps.push_back(pump);
  174. return pump;
  175. }
  176. void
  177. Source::removePump(Pump* pump){
  178. for(auto it=pumps.begin();it!=pumps.end();++it){
  179. if(*it==pump){
  180. delete *it;
  181. pumps.erase(it);
  182. return;
  183. }
  184. }
  185. }
  186. Cloud*
  187. Source::addCloud(){
  188. Cloud* cloud=new Cloud;
  189. clouds.push_back(cloud);
  190. return cloud;
  191. }
  192. void
  193. Source::removeCloud(Cloud* cloud){
  194. for(auto it=clouds.begin();it!=clouds.end();++it){
  195. if(*it==cloud){
  196. delete *it;
  197. clouds.erase(it);
  198. return;
  199. }
  200. }
  201. }
  202. void
  203. Source::save(fstream& file){
  204. size_t n=pumps.size();
  205. file.write((char*)&n,sizeof(double));
  206. for(auto it=pumps.begin();it!=pumps.end();++it){
  207. (*it)->save(file);
  208. }
  209. n=clouds.size();
  210. file.write((char*)&n,sizeof(double));
  211. for(auto it=clouds.begin();it!=clouds.end();++it){
  212. (*it)->save(file);
  213. }
  214. }
  215. void
  216. Source::load(fstream& file){
  217. size_t n;
  218. file.read((char*)&n,sizeof(size_t));
  219. for(size_t i=0;i<n;++i){
  220. Pump* pump=addPump();
  221. pump->load(file);
  222. }
  223. file.read((char*)&n,sizeof(size_t));
  224. for(size_t i=0;i<n;++i){
  225. Cloud* cloud=addCloud();
  226. cloud->load(file);
  227. }
  228. }