123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #include "source.hpp"
- Pump::Pump(){
- amplitude_init=1.e-4;
- left_init=0.45;
- right_init=0.55;
- bottom_init=0.45;
- top_init=0.55;
- delta_left_init=0.05;
- delta_right_init=0.05;
- delta_top_init=0.05;
- delta_bottom_init=0.05;
- amplitude_final=1.e-4;
- left_final=0.45;
- right_final=0.55;
- bottom_final=0.45;
- top_final=0.55;
- delta_left_final=0.05;
- delta_right_final=0.05;
- delta_top_final=0.05;
- delta_bottom_final=0.05;
- }
- void
- Pump::save(fstream& file){
- file.write((char*)&litude_init,sizeof(double));
- file.write((char*)&left_init,sizeof(double));
- file.write((char*)&right_init,sizeof(double));
- file.write((char*)&bottom_init,sizeof(double));
- file.write((char*)&top_init,sizeof(double));
- file.write((char*)&delta_left_init,sizeof(double));
- file.write((char*)&delta_right_init,sizeof(double));
- file.write((char*)&delta_bottom_init,sizeof(double));
- file.write((char*)&delta_top_init,sizeof(double));
- file.write((char*)&litude_final,sizeof(double));
- file.write((char*)&left_final,sizeof(double));
- file.write((char*)&right_final,sizeof(double));
- file.write((char*)&bottom_final,sizeof(double));
- file.write((char*)&top_final,sizeof(double));
- file.write((char*)&delta_left_final,sizeof(double));
- file.write((char*)&delta_right_final,sizeof(double));
- file.write((char*)&delta_bottom_final,sizeof(double));
- file.write((char*)&delta_top_final,sizeof(double));
- }
- void
- Pump::load(fstream& file){
- file.read((char*)&litude_init,sizeof(double));
- file.read((char*)&left_init,sizeof(double));
- file.read((char*)&right_init,sizeof(double));
- file.read((char*)&bottom_init,sizeof(double));
- file.read((char*)&top_init,sizeof(double));
- file.read((char*)&delta_left_init,sizeof(double));
- file.read((char*)&delta_right_init,sizeof(double));
- file.read((char*)&delta_bottom_init,sizeof(double));
- file.read((char*)&delta_top_init,sizeof(double));
- file.read((char*)&litude_final,sizeof(double));
- file.read((char*)&left_final,sizeof(double));
- file.read((char*)&right_final,sizeof(double));
- file.read((char*)&bottom_final,sizeof(double));
- file.read((char*)&top_final,sizeof(double));
- file.read((char*)&delta_left_final,sizeof(double));
- file.read((char*)&delta_right_final,sizeof(double));
- file.read((char*)&delta_bottom_final,sizeof(double));
- file.read((char*)&delta_top_final,sizeof(double));
- }
- double
- Pump::get_amplitude(double t){
- return (1-t)*amplitude_init+t*amplitude_final;
- }
- double
- Pump::get_left(double t){
- return (1-t)*left_init+t*left_final;
- }
- double
- Pump::get_right(double t){
- return (1-t)*right_init+t*right_final;
- }
- double
- Pump::get_top(double t){
- return (1-t)*top_init+t*top_final;
- }
- double
- Pump::get_bottom(double t){
- return (1-t)*bottom_init+t*bottom_final;
- }
- double
- Pump::get_left_delta(double t){
- return (1-t)*delta_left_init+t*delta_left_final;
- }
- double
- Pump::get_right_delta(double t){
- return (1-t)*delta_right_init+t*delta_right_final;
- }
- double
- Pump::get_top_delta(double t){
- return (1-t)*delta_top_init+t*delta_top_final;
- }
- double
- Pump::get_bottom_delta(double t){
- return (1-t)*delta_bottom_init+t*delta_bottom_final;
- }
- double
- Pump::value(double x,double z,double t){
- double amplitude=interpol(amplitude_init,amplitude_final,t);
- double delta_left=interpol(delta_left_init,delta_left_final,t);
- double left=interpol(left_init,left_final,t);
- double delta_right=interpol(delta_right_init,delta_right_final,t);
- double right=interpol(right_init,right_final,t);
- double delta_top=interpol(delta_top_init,delta_top_final,t);
- double top=interpol(top_init,top_final,t);
- double delta_bottom=interpol(delta_bottom_init,delta_bottom_final,t);
- double bottom=interpol(bottom_init,bottom_final,t);
- double fx=bump(x,delta_left,left,delta_right,right);
- double fz=bump(z,delta_bottom,bottom,delta_top,top);
- return amplitude*fx*fz;
- }
- Cloud::Cloud(){
- amplitude_init=1.e-4;
- left_init=0.45;
- right_init=0.55;
- delta_left_init=0.05;
- delta_right_init=0.05;
- amplitude_final=1.e-4;
- left_final=0.45;
- right_final=0.55;
- delta_left_final=0.05;
- delta_right_final=0.05;
- }
- void
- Cloud::save(fstream& file){
- file.write((char*)&litude_init,sizeof(double));
- file.write((char*)&left_init,sizeof(double));
- file.write((char*)&right_init,sizeof(double));
- file.write((char*)&delta_left_init,sizeof(double));
- file.write((char*)&delta_right_init,sizeof(double));
- file.write((char*)&litude_final,sizeof(double));
- file.write((char*)&left_final,sizeof(double));
- file.write((char*)&right_final,sizeof(double));
- file.write((char*)&delta_left_final,sizeof(double));
- file.write((char*)&delta_right_final,sizeof(double));
- }
- void
- Cloud::load(fstream& file){
- file.read((char*)&litude_init,sizeof(double));
- file.read((char*)&left_init,sizeof(double));
- file.read((char*)&right_init,sizeof(double));
- file.read((char*)&delta_left_init,sizeof(double));
- file.read((char*)&delta_right_init,sizeof(double));
- file.read((char*)&litude_final,sizeof(double));
- file.read((char*)&left_final,sizeof(double));
- file.read((char*)&right_final,sizeof(double));
- file.read((char*)&delta_left_final,sizeof(double));
- file.read((char*)&delta_right_final,sizeof(double));
- }
- double
- Cloud::get_amplitude(double t){
- return (1-t)*amplitude_init+t*amplitude_final;
- }
- double
- Cloud::get_amplitude_max(){
- return max(amplitude_init,amplitude_final);
- }
- double
- Cloud::get_left(double t){
- return (1-t)*left_init+t*left_final;
- }
- double
- Cloud::get_right(double t){
- return (1-t)*right_init+t*right_final;
- }
- double
- Cloud::get_left_delta(double t){
- return (1-t)*delta_left_init+t*delta_left_final;
- }
- double
- Cloud::get_right_delta(double t){
- return (1-t)*delta_right_init+t*delta_right_final;
- }
- Source::~Source(){
- for(auto it=pumps.begin();it!=pumps.end();++it){
- delete *it;
- }
- for(auto it=clouds.begin();it!=clouds.end();++it){
- delete *it;
- }
- }
- Pump*
- Source::addPump(){
- Pump* pump=new Pump;
- pumps.push_back(pump);
- return pump;
- }
- void
- Source::removePump(Pump* pump){
- for(auto it=pumps.begin();it!=pumps.end();++it){
- if(*it==pump){
- delete *it;
- pumps.erase(it);
- return;
- }
- }
- }
- Cloud*
- Source::addCloud(){
- Cloud* cloud=new Cloud;
- clouds.push_back(cloud);
- return cloud;
- }
- void
- Source::removeCloud(Cloud* cloud){
- for(auto it=clouds.begin();it!=clouds.end();++it){
- if(*it==cloud){
- delete *it;
- clouds.erase(it);
- return;
- }
- }
- }
- void
- Source::save(fstream& file){
- size_t n=pumps.size();
- file.write((char*)&n,sizeof(double));
- for(auto it=pumps.begin();it!=pumps.end();++it){
- (*it)->save(file);
- }
- n=clouds.size();
- file.write((char*)&n,sizeof(double));
- for(auto it=clouds.begin();it!=clouds.end();++it){
- (*it)->save(file);
- }
- }
- void
- Source::load(fstream& file){
- size_t n;
- file.read((char*)&n,sizeof(size_t));
- for(size_t i=0;i<n;++i){
- Pump* pump=addPump();
- pump->load(file);
- }
- file.read((char*)&n,sizeof(size_t));
- for(size_t i=0;i<n;++i){
- Cloud* cloud=addCloud();
- cloud->load(file);
- }
- }
|