Daser292 / portfolio

my own projects
0 stars 0 forks source link

kurs #1

Open Daser292 opened 1 year ago

Daser292 commented 1 year ago

include

include

include

include

using namespace std;

double W(double x, double h){ double k=abs(x/h); double f; if (k<1){ f=(2.0/3.0)(1.0/h)(1-1.5kk+0.75kkk); } else if ((k>1) and (k<2)){ f=(2.0/3.0)(1.0/h)0.25((2-k)(2-k)(2-k)); } else{ f=0; } return f; }

double gradW(double x,double h){ int o=0; if(x<0){ o=1; x=-x; } double q=x/h; double n1=6(hh); double wx=0; if(q<1){ wx = (-12 q + 9 (qq)) / n1; } else if(q<2){ wx = -3 ((2-q)*(2-q)) / n1; } if (o!=1){ return wx; } else{ return -wx; } }

double sreda(double h,int i,int j, double mass_skorost[], double mass_koordin[],double mass_plotnost[]){ double alfa=1.0,betta=0.5,eps=0.01,M; M= (h(mass_skorost[i]-mass_skorost[j])(mass_koordin[i]-mass_koordin[j])) /(((mass_koordin[i]-mass_koordin[j])(mass_koordin[i]-mass_koordin[j]))+(epshh)); if (M<0){ return ((-alfa)10M+bettaMM)/(0.5(mass_plotnost[i]+mass_plotnost[j])); } else{ return 0; } }

double energy1(int i,double mass_massa[],double mass_skorost[],double mass_plotnost[],double mass_davlenie[],double mass_koordin[],double mass_energy[],double h,double t,int N,int k,double t_now){ double e=0; int j; for(j=0;j<N+4k+1;j++){ if(abs(mass_koordin[i]-mass_koordin[j])<(h2+0.1)){ e=e+((mass_davlenie[i])/(mass_plotnost[i]mass_plotnost[i]) +(0.5)sreda(h,i,j,mass_skorost,mass_koordin,mass_plotnost))mass_massa[j](mass_skorost[i]-mass_skorost[j])gradW(mass_koordin[i]-mass_koordin[j],h); } } return et+mass_energy[i]; }

double skorost1(int i,double mass_massa[],double mass_skorost[],double mass_plotnost[],double mass_davlenie[],double mass_koordin[],double h,double t,int N,int k){ double v=0; int j; for(j=0;j<N+4k+1;j++){ if(abs(mass_koordin[i]-mass_koordin[j])<(h2+0.1)){ v=v-mass_massa[j]( mass_davlenie[i] /(mass_plotnost[i] mass_plotnost[i]) +mass_davlenie[j]/(mass_plotnost[j]mass_plotnost[j]) +sreda(h,i,j, mass_skorost, mass_koordin,mass_plotnost))gradW(mass_koordin[i]-mass_koordin[j],h); } } return v*t+mass_skorost[i]; }

double energy(int i,double mass_massa[],double mass_skorost[],double mass_plotnost[],double mass_davlenie[],double mass_koordin[],double mass_energy[],double h,double t,int N,int k,double t_now){ double e=0; int j; for(j=0;j<N+4k+1;j++){ if(abs(mass_koordin[i]-mass_koordin[j])<(h2+0.1)){ e=e+((mass_davlenie[i])/(mass_plotnost[i]mass_plotnost[i]))mass_massa[j](mass_skorost[i]-mass_skorost[j])gradW(mass_koordin[i]-mass_koordin[j],h); } } return e*t+mass_energy[i]; }

double skorost(int i,double mass_massa[],double mass_skorost[],double mass_plotnost[],double mass_davlenie[],double mass_koordin[],double h,double t,int N,int k){ double v=0; int j; for(j=0;j<N+4k+1;j++){ if(abs(mass_koordin[i]-mass_koordin[j])<(h2+0.1)){ v=v-mass_massa[j](mass_davlenie[i]/(mass_plotnost[i]mass_plotnost[i])+(mass_davlenie[j])/(mass_plotnost[j]mass_plotnost[j]))gradW(mass_koordin[i]-mass_koordin[j],h); } } return v*t+mass_skorost[i]; }

double plotnost(double mass_massa[], double mass_plotnost[], double mass_skorost[],double mass_koordin[], int j, double t,double h,int N, int k){ double p=0; int i=0; for(i=0;i<N+4k+1;i++){ if(abs(mass_koordin[i]-mass_koordin[j])<(h2+0.1)){ p=p+mass_massa[i](mass_skorost[j]-mass_skorost[i])gradW(mass_koordin[j]-mass_koordin[i],h);

    }
}
return p*t+mass_plotnost[j];

}

double davlenie(double mass_plotnost[],double mass_energy[],int j){ return (0.4)mass_plotnost[j]mass_energy[j]; }

double koordin(double mass_koordin[], double mass_skorost[], double t, int j){ return mass_koordin[j]+mass_skorost[j]*t; }

int main(){ ofstream P; ofstream X; ofstream E; ofstream V; ofstream D; int N,k,i,j,vvd,srd,taro,pole,t_pola,thr_plus,de_pick; double h,P_L,P_R,V_R,V_L,D_R,D_L,E_R,E_L; double t=0,t_step=0.001,t_max; cout<<"vvedite kol-vo chastiz: "; cin>>N; cout<<"vvedite kol-vo chastiz vzaimodeistvia: "; cin>>k; cout<<"sreda? : "; cin>>srd; cout<<"+3 chaz na razruv?: "; cin>>thr_plus; cout<<"D or E first (0 or 1)?: "; cin>>de_pick; if(de_pick==1){ taro=0; cout<<"vvedite P_L: "; cin>>P_L; cout<<"vvedite V_L: "; cin>>V_L; cout<<"vvedite E_L: "; cin>>E_L; cout<<"vvedite P_R: "; cin>>P_R; cout<<"vvedite V_R: "; cin>>V_R; cout<<"vvedite E_R: "; cin>>E_R; cout<<"vvedite vremya pascheta: "; cin>>t_max; } else{ cout<<"Taro?: "; cin>>taro; if(taro==0){ cout<<"vvedite P_L: "; cin>>P_L; cout<<"vvedite V_L: "; cin>>V_L; cout<<"vvedite D_L: "; cin>>D_L; cout<<"vvedite P_R: "; cin>>P_R; cout<<"vvedite V_R: "; cin>>V_R; cout<<"vvedite D_R: "; cin>>D_R; cout<<"vvedite vremya pascheta: "; cin>>t_max; } else if(taro==1){ P_L=1; V_L=0; D_L=1; P_R=0.125; V_R=0; D_R=0.1; cout<<"vvedite vremya pascheta (0: 0.2): "; cin>>t_max; if(t_max==0){ t_max=0.2; } } else if(taro==2){ P_L=1; V_L=0.75; D_L=1; P_R=0.125; V_R=0; D_R=0.1; cout<<"vvedite vremya pascheta (0: 0.2): "; cin>>t_max; if(t_max==0){ t_max=0.2; } } else if(taro==3){ P_L=1; V_L=-2; D_L=0.4; P_R=1; V_R=2; D_R=0.4; cout<<"vvedite vremya pascheta (0: 0.15): "; cin>>t_max; if(t_max==0){ t_max=0.15; } } else if(taro==4){ P_L=1; V_L=0; D_L=1000; P_R=1; V_R=0; D_R=0.01; cout<<"vvedite vremya pascheta (0: 0.012): "; cin>>t_max; if(t_max==0){ t_max=0.012; } } else if(taro==5){ P_L=5.99924; V_L=19.5975; D_L=460.894; P_R=5.992242; V_R=-6.1963; D_R=46.0550; cout<<"vvedite vremya pascheta (0: 0.035): "; cin>>t_max; if(t_max==0){ t_max=0.035; } } } cout<<"pole?: "; cin>>pole; if(pole==1){ cout<<"vvedite kol-vo tochek polya: "; cin>>t_pola; } h=double(k)(1/double(N)); double mass_davlenie[N+k4+1],mass_energy[N+k4+1],mass_skorost[N+k4+1]; double mass_davlenie_next[N+k4+1],mass_energy_next[N+k4+1],mass_koordin_next[N+k4+1],mass_skorost_next[N+k4+1],mass_plotnost_next[N+k4+1]; double mass_plotnost[N+k4+1],mass_massa[N+k4+1],mass_koordin[N+4k+1]; for(i=0;i<N+k4+1;i++){ mass_davlenie[i]=0; mass_energy[i]=0; mass_skorost[i]=0; mass_davlenie_next[i]=0; mass_energy_next[i]=0; mass_koordin_next[i]=0; mass_skorost_next[i]=0; mass_plotnost_next[i]=0; mass_plotnost[i]=0; mass_massa[i]=0; mass_koordin[i]=0; } for(i=0;i<N+(k4)+1;i++){ if(de_pick==0){ if(thr_plus==1){ if(i<N/2+2k-1){ mass_plotnost[i]=P_L; mass_davlenie[i]=D_L; mass_skorost[i]=V_L; } else if (i==N/2+2k-1){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=0.75P_L+0.25P_R; } if(D_L==D_R){ mass_davlenie[i]=D_L; } else{ mass_davlenie[i]=0.75D_L+0.25D_R; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=0.75V_L+0.25V_R; } } else if (i==N/2+2k){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=(P_L+P_R)/2; } if(D_L==D_R){ mass_davlenie[i]=D_L; } else{ mass_davlenie[i]=(D_L+D_R)/2; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=(V_L+V_R)/2; } } else if (i==N/2+2k+1){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=0.25P_L+P_R0.75; } if(D_L==D_R){ mass_davlenie[i]=D_L; } else{ mass_davlenie[i]=0.25D_L+D_R0.75; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=0.25V_L+V_R0.75; } } else{ mass_plotnost[i]=P_R; mass_davlenie[i]=D_R; mass_skorost[i]=V_R; } } else{ if(i<N/2+2k){ mass_plotnost[i]=P_L; mass_davlenie[i]=D_L; mass_skorost[i]=V_L; } else{ mass_plotnost[i]=P_R; mass_davlenie[i]=D_R; mass_skorost[i]=V_R; } } mass_energy[i]=mass_davlenie[i]/((0.4)mass_plotnost[i]); mass_massa[i]=mass_plotnost[i](1/double(N)); mass_koordin[i]=(double(i-2k))/N; } else{ if(thr_plus==1){ if(i<N/2+2k-1){ mass_plotnost[i]=P_L; mass_energy[i]=E_L; mass_skorost[i]=V_L; } else if (i==N/2+2k-1){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=0.75P_L+0.25P_R; } if(E_L==E_R){ mass_energy[i]=E_L; } else{ mass_energy[i]=0.75E_L+0.25E_R; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=0.75V_L+0.25V_R; } } else if (i==N/2+2k){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=(P_L+P_R)/2; } if(E_L==E_R){ mass_energy[i]=E_L; } else{ mass_energy[i]=(E_L+E_R)/2; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=(V_L+V_R)/2; } } else if (i==N/2+2k+1){ if(P_L==P_R){ mass_plotnost[i]=P_L; } else{ mass_plotnost[i]=0.25P_L+P_R0.75; } if(E_L==E_R){ mass_energy[i]=E_L; } else{ mass_energy[i]=0.25E_L+E_R0.75; } if(V_L==V_R){ mass_skorost[i]=V_L; } else{ mass_skorost[i]=0.25V_L+V_R0.75; } } else{ mass_plotnost[i]=P_R; mass_energy[i]=E_R; mass_skorost[i]=V_R; } } else{ if(i<N/2+2k){ mass_plotnost[i]=P_L; mass_energy[i]=E_L; mass_skorost[i]=V_L; } else{ mass_plotnost[i]=P_R; mass_energy[i]=E_R; mass_skorost[i]=V_R; } } mass_davlenie[i]=mass_energy[i]((0.4)mass_plotnost[i]); mass_massa[i]=mass_plotnost[i](1/double(N)); mass_koordin[i]=(double(i-2k))/N; } } int step = 0; for(t=0;t<t_max;t=t+t_step){ step++; for(i=2k;i<N+2k+1;i++){ if(srd==1){ mass_plotnost_next[i]=plotnost(mass_massa, mass_plotnost, mass_skorost, mass_koordin, i, t_step, h, N,k); mass_koordin_next[i]=koordin(mass_koordin, mass_skorost, t_step, i); mass_energy_next[i]=energy1(i, mass_massa, mass_skorost, mass_plotnost, mass_davlenie, mass_koordin, mass_energy, h, t_step, N,k,t); mass_skorost_next[i]=skorost1(i, mass_massa, mass_skorost, mass_plotnost, mass_davlenie, mass_koordin, h, t_step, N,k); mass_davlenie[i]=davlenie(mass_plotnost_next, mass_energy_next, i); } else{ mass_plotnost_next[i]=plotnost(mass_massa, mass_plotnost, mass_skorost, mass_koordin, i, t_step, h, N,k); mass_koordin_next[i]=koordin(mass_koordin, mass_skorost, t_step, i); mass_energy_next[i]=energy(i, mass_massa, mass_skorost, mass_plotnost, mass_davlenie, mass_koordin, mass_energy, h, t_step, N,k,t); mass_skorost_next[i]=skorost(i, mass_massa, mass_skorost, mass_plotnost, mass_davlenie, mass_koordin, h, t_step, N,k); mass_davlenie[i]=davlenie(mass_plotnost_next, mass_energy_next, i); } } for(i=0;i<2k;i++){ mass_koordin_next[i]=koordin(mass_koordin, mass_skorost, t_step, i); mass_koordin[i]=mass_koordin_next[i]; } for(i=N+2k+1;i<N+4k+1;i++){ mass_koordin_next[i]=koordin(mass_koordin, mass_skorost, t_step, i); mass_koordin[i]=mass_koordin_next[i]; } for(i=2k;i<N+2k+1;i++){ mass_plotnost[i]=mass_plotnost_next[i]; mass_koordin[i]=mass_koordin_next[i]; mass_energy[i]=mass_energy_next[i]; mass_skorost[i]=mass_skorost_next[i]; } for(i=0;i<N+4k+1;i++){ mass_plotnost_next[i]=0; mass_koordin_next[i]=0; mass_energy_next[i]=0; mass_skorost_next[i]=0; } if(pole==1){ for(i=0;i<t_pola;i++){ mass_koordin_next[i]=double(i)/double(t_pola); for(j=0;j<N+4k+1;j++){ if(abs(mass_koordin_next[i]-mass_koordin[j])<(h2+0.1)){ mass_plotnost_next[i] += mass_massa[j] W(mass_koordin_next[i]-mass_koordin[j],h); mass_skorost_next[i] += mass_massa[j] (mass_skorost[j] / mass_plotnost[j]) W(mass_koordin_next[i]-mass_koordin[j],h); mass_energy_next[i] += (mass_massa[j]/mass_plotnost[j]) mass_energy[j] W(mass_koordin_next[i]-mass_koordin[j],h); } mass_davlenie_next[i] = davlenie(mass_plotnost_next, mass_energy_next, i); } } } if(pole==1){ P.open("./out/P" + to_string(step) +".txt", fstream::out); P<<to_string(t_pola)<<'\n'; for(j=0;j<t_pola;j++) P << to_string(mass_plotnost_next[j]) << '\n'; P.close(); X.open("./out/X" + to_string(step) +".txt", fstream::out); for(j=0;j<t_pola;j++) X << to_string(mass_koordin_next[j]) << '\n'; X.close(); E.open("./out/E" + to_string(step) +".txt", fstream::out); for(j=0;j<t_pola;j++) E << to_string(mass_energy_next[j]) << '\n'; E.close(); D.open("./out/D" + to_string(step) +".txt", fstream::out); for(j=0;j<t_pola;j++) D << to_string(mass_davlenie_next[j]) << '\n'; D.close(); V.open("./out/V" + to_string(step) +".txt", fstream::out); for(j=0;j<t_pola;j++) V << to_string(mass_skorost_next[j]) << '\n'; V.close(); } else{ P.open("./out/P" + to_string(step) +".txt", fstream::out); P<<to_string(N+4k)<<'\n'; for(int j = 0; j < (N + (k4)); j++) P << to_string(mass_plotnost[j]) << '\n'; P.close(); X.open("./out/X" + to_string(step) +".txt", fstream::out); for(int j = 0; j < (N + (k4)); j++) X << to_string(mass_koordin[j]) << '\n'; X.close(); E.open("./out/E" + to_string(step) +".txt", fstream::out); for(int j = 0; j < (N + (k4)); j++) E << to_string(mass_energy[j]) << '\n'; E.close(); D.open("./out/D" + to_string(step) +".txt", fstream::out); for(int j = 0; j < (N + (k4)); j++) D << to_string(mass_davlenie[j]) << '\n'; D.close(); V.open("./out/V" + to_string(step) +".txt", fstream::out); for(int j = 0; j < (N + (k4)); j++) V << to_string(mass_skorost[j]) << '\n'; V.close(); } } }