home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_40.arc / DAIMS.ARC / EKMAN.CPP < prev    next >
Text File  |  1988-02-10  |  2KB  |  77 lines

  1. #include <math.h> 
  2. #include "matrix.hxx"
  3. #include "Cheb_vector.hxx"
  4. #include "ekpanel.hxx"
  5. #include "ekman.hxx"
  6.  
  7. /* 
  8. -*++ ekman_layer::ekman_layer(): constructor
  9. ** 
  10. ** (*++ history: 
  11. **     16 Jan 88    Bruce &    Creation date
  12. ** ++*)
  13. ** 
  14. ** (*++ detailed: 
  15. ** ++*)
  16. */
  17.  
  18. ekman_layer::ekman_layer(int initial_modes) :
  19. ekman_physical_vector(initial_modes), ekman_pumping_vector(initial_modes)
  20. {
  21.     dc_value = 1;
  22.     ac_value = 0;
  23.     ac_waves = 0 ;
  24.     nmodes = initial_modes;
  25.     xldomain = -1;
  26.     xrdomain = 1;
  27.     double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
  28.     for (int i = 0; i < nmodes; i++){
  29.     double X = cos(M_PI * (double(i) + 0.5) / nmodes);
  30.     ekman_physical_vector[i] = 
  31.         dc_value + ac_value * sin (wn * X);
  32.     }
  33. //    cout << "init: ekman_physical_vector = " << ekman_physical_vector << "\n";
  34. //    cout.flush();
  35. //    cout << "init: ekman_physical_vector.Chebyshev() = " <<
  36. //    ekman_physical_vector.Chebyshev() << "\n";
  37. //    cout.flush();
  38.     ekman_pumping_vector = ekman_physical_vector.Chebyshev();
  39. //    cout << "init: ekman_pumping_vector = " << ekman_pumping_vector << "\n";
  40. //    cout.flush();
  41. }
  42.  
  43.  
  44. /* 
  45. -*++ ekman_layer::update(): 
  46. ** 
  47. ** (*++ history: 
  48. **     13 Jan 88    Bruce Eckel    Creation date
  49. **     14 Jan 88    Tom Keffer    Non-linear X values
  50. ** ++*)
  51. ** 
  52. ** (*++ detailed: 
  53. ** ++*)
  54. */
  55.  
  56. void ekman_layer::update(ekpanel & ekman_control_panel) {
  57.     if (ekman_control_panel.changed()) {
  58.     dc_value = ekman_control_panel.dc_value();
  59.     ac_value = ekman_control_panel.ac_value();
  60.     ac_waves = ekman_control_panel.ac_waves();
  61.     nmodes = ekman_control_panel.resolution();
  62.     xldomain = ekman_control_panel.xldomain();
  63.     xrdomain = ekman_control_panel.xrdomain();
  64.  
  65.     double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
  66.     if (ekman_control_panel.new_resolution()) 
  67.         ekman_physical_vector = *new phys_vector(nmodes);
  68.     for (int i = 0; i < nmodes; i++){
  69.         double X =     cos(M_PI * (double(i) + 0.5) / nmodes);
  70.         ekman_physical_vector[i] = 
  71.         dc_value + ac_value * sin (wn * X);
  72.     }
  73.     ekman_pumping_vector = ekman_physical_vector.Chebyshev();
  74.     ekman_control_panel.reset();
  75.     }
  76. }
  77.