home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1992 June
/
SIMTEL_0692.cdr
/
msdos
/
microcrn
/
issue_40.arc
/
DAIMS.ARC
/
EKMAN.CPP
< prev
next >
Wrap
Text File
|
1988-02-10
|
2KB
|
77 lines
#include <math.h>
#include "matrix.hxx"
#include "Cheb_vector.hxx"
#include "ekpanel.hxx"
#include "ekman.hxx"
/*
-*++ ekman_layer::ekman_layer(): constructor
**
** (*++ history:
** 16 Jan 88 Bruce & Creation date
** ++*)
**
** (*++ detailed:
** ++*)
*/
ekman_layer::ekman_layer(int initial_modes) :
ekman_physical_vector(initial_modes), ekman_pumping_vector(initial_modes)
{
dc_value = 1;
ac_value = 0;
ac_waves = 0 ;
nmodes = initial_modes;
xldomain = -1;
xrdomain = 1;
double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
for (int i = 0; i < nmodes; i++){
double X = cos(M_PI * (double(i) + 0.5) / nmodes);
ekman_physical_vector[i] =
dc_value + ac_value * sin (wn * X);
}
// cout << "init: ekman_physical_vector = " << ekman_physical_vector << "\n";
// cout.flush();
// cout << "init: ekman_physical_vector.Chebyshev() = " <<
// ekman_physical_vector.Chebyshev() << "\n";
// cout.flush();
ekman_pumping_vector = ekman_physical_vector.Chebyshev();
// cout << "init: ekman_pumping_vector = " << ekman_pumping_vector << "\n";
// cout.flush();
}
/*
-*++ ekman_layer::update():
**
** (*++ history:
** 13 Jan 88 Bruce Eckel Creation date
** 14 Jan 88 Tom Keffer Non-linear X values
** ++*)
**
** (*++ detailed:
** ++*)
*/
void ekman_layer::update(ekpanel & ekman_control_panel) {
if (ekman_control_panel.changed()) {
dc_value = ekman_control_panel.dc_value();
ac_value = ekman_control_panel.ac_value();
ac_waves = ekman_control_panel.ac_waves();
nmodes = ekman_control_panel.resolution();
xldomain = ekman_control_panel.xldomain();
xrdomain = ekman_control_panel.xrdomain();
double wn = 2.0 * M_PI * ac_waves / (xrdomain - xldomain);
if (ekman_control_panel.new_resolution())
ekman_physical_vector = *new phys_vector(nmodes);
for (int i = 0; i < nmodes; i++){
double X = cos(M_PI * (double(i) + 0.5) / nmodes);
ekman_physical_vector[i] =
dc_value + ac_value * sin (wn * X);
}
ekman_pumping_vector = ekman_physical_vector.Chebyshev();
ekman_control_panel.reset();
}
}