Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. //
  2. //  main.cpp
  3. //  Kolejna_proba
  4. //
  5. //  Created by Syn Kury on 13/10/2019.
  6. //  Copyright © 2019 Syn Kury. All rights reserved.
  7. //
  8.  
  9. #include <iostream>
  10. #include<cmath>
  11.  
  12.    //************************************
  13. bool czyZgodne(double tab1[], double tab2[], const int n)
  14. {
  15.    for(int i=2;i<n-1;i+=2)
  16.     {
  17.         if(tab1[i]-tab2[i]<0.000000000000001 and tab1[4]-tab2[4]) return true;
  18.         else return false;
  19.     }
  20.     return false;
  21. }
  22.  
  23.    //************************************
  24.  
  25. int main(int argc, const char * argv[]) {
  26.    
  27.     double ro = 1.0;
  28.     double ni = 23.13 * 1e-6;
  29.     double g = 10;
  30.     double dd = 0.1;
  31.     const int n = 41; //ilość węzłów
  32.     double h = dd / n;
  33.     double dt = 0.0001;
  34.    
  35.     double u[n]{};  //wektor prędkości w kroku f
  36.     double u1[n]{}; //wektor prędkości w kroku f+1
  37.    
  38.     double p[n]{};  //wektor ciśnienia w kroku f
  39.     double p1[n]{}; //wektor ciśnienia w kroku f+1
  40.    
  41.     double D[n]{};
  42.     double S[n]{};
  43.    
  44.     int iteracja=1;
  45.    
  46.     //************************************
  47.     // zadanie warunków brzegowych
  48.    
  49.     u[0]=10;
  50.     u[n-1]=10;
  51.    
  52.     u1[0]=10;
  53.     u1[n-1]=10;
  54.    
  55.     //************************************
  56.     // zadanie prędkości początkowych
  57.    
  58.    
  59.     for(int i=2;i<n-1;i+=2)
  60.     {
  61.         u[i]=0;
  62.     }
  63.    
  64.     //************************************
  65.     // rozpoczęcie algorytmu iteracyjnego
  66.    
  67.     do
  68.        {
  69.     //************************************
  70.     // obliczenie prędkości w węzłach k=2,4...,n-2
  71.    
  72.     for(int i=2;i<n-1;i+=2)
  73.     {
  74.         u1[i]=u[i]+ni*dt*(u[i-2]-2*u[i]+u[i+2])/(4*h*h)-dt*((u[i]+u[i+2])*(u[i]+u[i+2])-(u[i-2]+u[i])*(u[i-2]+u[i]))/(8*h)-dt/ro*(p[i+1]-p[i-1])/(2*h)+dt*g;
  75.     }
  76.      
  77.     //************************************
  78.     // obliczenie wektora D oraz S w węzłach k=3,5,...n-3
  79.     for(int i=3;i<n-4;i+=2)
  80.     {
  81.         D[i]=u[i+1]-u[i-1];
  82.         S[i]= (-((u[i+1]+u[i+3])*(u[i+1]+u[i+3]))+2*(u[i-1]+u[i+1])*(u[i-1]+u[i+1])-((u[i-3]+u[i-1])*(u[i-3]+u[i-1])))/(8*h);
  83.        
  84.     }
  85.    
  86.     D[1]=D[3];
  87.     S[1]=S[3];
  88.     D[n-2]=D[n-4];
  89.     S[n-2]=D[n-4];
  90.    
  91.     //************************************
  92.     // obliczenie wektora p w węzłach k=3,5,...n-3
  93.    
  94.     for(int i=3;i<n-4;i+=2)
  95.     {
  96.         p1[i]=0.5*(p[i+2]+p[i-2])-h*ro/dt*D[i]-ni*ro/(4*h)*(D[i-2]-2*D[i]+D[i+2]);
  97.     }
  98.    
  99.     p1[1]=p[3];
  100.     p[n-2]=p[n-4];
  101.    
  102.      
  103.     //************************************
  104.     // korekcja prędkości
  105.    
  106.     for(int i=2;i<n-1;i+=2)
  107.     {
  108.         u1[i]=u[i]+ni*dt*(u[i-2]-2*u[i]+u[i+2])/(4*h*h)-dt*((u[i]+u[i+2])*(u[i]+u[i+2])-(u[i-2]+u[i])*(u[i-2]+u[i]))/(8*h)-dt/ro*(p1[i+1]-p1[i-1])/(2*h)+dt*g;
  109.     }
  110.    
  111.     //************************************
  112.     // sprawdzenie warunku zaczymania algorytmu
  113.    
  114.     if(czyZgodne(u1, u, n))
  115.     {
  116.         break;      //wyjście z pętli
  117.     }
  118.     else
  119.     {
  120.         for(int i=0;i<n;i++)
  121.         {
  122.             u[i]=u1[i];     //przypisanie wartości z kolejnego kroku (f+1) do tablicy (f)
  123.         }
  124.     }
  125.         iteracja++;
  126.            
  127.     } while (iteracja!=1000000);
  128.    
  129.     //************************************
  130.     // wyświetlenie wyników
  131.    
  132.     std::cout<<iteracja<<std::endl;
  133.    
  134.     for(int i=0;i<n;i+=2)
  135.     {
  136.         std::cout<<(u1[i])<<std::endl;
  137.     }
  138.    
  139.    
  140.     return 0;
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement