Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.35 KB | None | 0 0
  1.  type ksp::kadr_el_m1(type dt){
  2.       T+=dt;
  3.       type O=0;
  4.  
  5.       auto met=&telo::simp4;
  6.       //  yoshida6 yoshida4 simp4
  7.       // if (oo) met=&telo::raw_rk4_38;
  8.       // if (oo) met=&telo::raw_rk4;
  9.       //#pragma omp parallel for
  10.       //for (int ii=0;ii<part.size();ii++)
  11.       for(auto&r:part)
  12.       {
  13.          //  auto& r=part[ii];
  14.          while (r.lT<T){
  15.             constexpr type _ss=0.005;
  16.             float3 aa,kk;
  17.             forceange(r.rx,aa,kk);
  18.             // kk=kk*1.2;
  19.             type mt=dt;
  20.             /**
  21.  
  22. |F(S+V*t+g*t*t/2)/F(S)-1|  <= _ss
  23. |F'(S)/F(S)*(V*t+g*t*t/2)| <= _ss
  24.  
  25. Три уравнения по компонентам
  26. |dot(F'x(S),v*t+g*t*t/2)/| <= _ss*F(S)
  27.  
  28. В окно, сделаю более грубо, оценю по максимальному модулу
  29.  
  30. |F'(S)/F(S)*(|V*t|+|g*t*t/2|)| <= _ss
  31.  
  32.  
  33. //*/
  34.  
  35.  
  36.             //   mt=dt;
  37.  
  38.             constexpr int mno=1;
  39.             type _ax=_ss*aa._rad();
  40.             type b=fabs(dot(r.vx,kk))*mno,a=fabs(dot(aa,kk))*0.5*mno,c=-_ax*mno,d=b*b-4*a*c;
  41.             if (d<0){
  42.                log(1,L"d<0 %e",d);
  43.             }else{
  44.                if (a>0){
  45.                   mt=(-b+sqrt(d))*0.5/a;
  46.                   //  tomin(mt,(-b+sqrt(d))/2.0/a);
  47.                }
  48.                else{
  49.                   //tomin(mt,(-b-sqrt(d))/2.0/a);
  50.                   log(3,L"a<0 %e",a);
  51.                }
  52.             }
  53.             //if (mt>0)
  54.             for (int i=0;i<mno;i++)
  55.                (r.*met)(fabs(mt/mno));
  56.             //                  (r.*met)(fabs(mt));
  57.             // (r.*met)(mt/2.0);
  58.             //#pragma omp atomic
  59.             O+=mno;
  60.             r.rx.t=r.lT+mt;
  61.             r.stor(r.rx);
  62.  
  63.  
  64.             ///  V*t+g*t*t/2 <= _a
  65.  
  66.             //tomin(mt,fabs);
  67.  
  68.  
  69.          }
  70.  
  71.          if (r.lT>T){
  72.             if (r.story.size()>=2)
  73.             {
  74.                pos x1=r.story[r.story.size()-2];
  75.                pos x2=r.rx;
  76.                type t=(T-x1.t)/(x2.t-x1.t);
  77.                if (t>=1)
  78.                {
  79.                   r.dx=r.rx;
  80.  
  81.                }
  82.                else if (t>=0)
  83.                {
  84.                   r.dx=x1*(1-t)+x2*t;
  85.                }else{
  86.                   log(2,L"err в линейном интерполировании %.4f",t);
  87.                }
  88.  
  89.             }
  90.  
  91.          }
  92.       }
  93.       return O;
  94.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement