/*
  Здесь содержатся установки начального поля для того, чтобы
  исследовать устойчивость метода на СУ. 
  Для сравнения с Власенко: test-2b
*/

#include "grid-init.h"
#include <math.h>

void
set_initial_field(Grid1D& grid)
{
  double phi_L = 0.9;
  double rho_L = 1; // [kg/m^3]
  double Ug_L = 1000; // [m/s]
  double Ul_L = 1000; // [m/s]
  
  // вспомогательные переменные
  double A = (2-phi_L)*u3def*Ul_L*Ul_L + rho_L*R0*T;
  double B = 4*u3def*Ul_L*Ul_L*( rho_L*phi_L*Ug_L*Ug_L + (1-phi_L)*(u3def*Ul_L*Ul_L + rho_L*R0*T) );

  double Ug_R = R0*T/Ug_L;
  double Ul_R = (A - sqrt(A*A-B))/(2*u3def*Ul_L);
  double phi_R = 1 - (1-phi_L)*Ul_L/Ul_R;
  double rho_R = rho_L * (phi_L*Ug_L)/(phi_R*Ug_R);
  
  ConservVars lv = primitive2conserv((PrimitiveVars){phi_L,rho_L,Ug_L,Ul_L});
  ConservVars rv = primitive2conserv((PrimitiveVars){phi_R,rho_R,Ug_R,Ul_R});
  
  grid.lbc.vars = lv;
  grid.rbc.vars = rv;
  
  for (unsigned int i=0; i<grid.N; i++)
    if (i<grid.N/2)
      grid.cells[i].vars = lv;
    else
      grid.cells[i].vars = rv;
}