/Users/huttone/Devel/sedflux-new/sedflux/trunk/ew/sedflux/run_storm.c File Reference

#include <stdio.h>
#include "my_processes.h"
#include <utils/eh_rand.h>
#include "sedflux.h"
#include <time.h>

Go to the source code of this file.

Classes

struct  User_storm_data
struct  weibull_storm_data

Defines

#define SED_STORM_PROC_NAME   "storms"
#define EH_LOG_DOMAIN   SED_STORM_PROC_NAME
Input parameters for ocean storm module
#define STORM_KEY_STORM_LENGTH   "average length of a storm"
 Average length of an ocean storm in days.
#define STORM_KEY_STORM_MAGNITUDE   "wave height of 100 year storm"
 Wave height (in meters) of the 100y ocean storm.
#define STORM_KEY_STORM_VARIANCE   "variance of 100 year storm"
 Variance (in meters) of 100y storm wave height.
#define STORM_KEY_SCALE_PARAMETER   "scale parameter for pdf"
 Scale parameter for ocean storm wave height (Weibull distribution).
#define STORM_KEY_SHAPE_PARAMETER   "shape parameter for pdf"
 Shape parameter for ocean storm wave height (Weibull distribution).
#define STORM_KEY_WAVE_HEIGHT   "wave height"
#define STORM_KEY_SEED   "seed for random number generator"
 Seed for the ocean storm random number generator.
#define STORM_KEY_FRACTION   "fraction of events to model"
 Fraction of days to model.
#define STORM_KEY_NON_EVENTS   "average non-events?"
 Should the calm periods between storms be averaged to forgotten.

Functions

GSList * get_equivalent_storm (GFunc get_storm, gpointer user_data, double n_days, double sig_event_fraction, gboolean average_non_events)
void storm_func_user (double *ans, User_storm_data *user_data)
double * get_wave_from_beaufort_scale_power_law (double beaufort_storm, double *wave)
double get_wind_from_beaufort_scale (double beaufort_storm)
double get_wave_length_from_wind (double wind_speed_in_mps)
double get_wave_period_from_wind (double wind_speed_in_mps)
double get_wave_height_from_wind (double wind_speed_in_mps)
double * get_wave_from_beaufort_scale (double beaufort_storm, double *wave)
double get_height_from_beaufort_scale (double beaufort_storm)
double get_beaufort_scale_from_height (double wave_height)
double get_wave_length_from_height (double wave_height)
double get_wave_period_from_height (double wave_height_in_meters)
gboolean init_storm_data (Sed_process proc, Sed_cube prof, GError **error)
Sed_process_info run_storm (Sed_process proc, Sed_cube prof)
gboolean init_storm (Sed_process p, Eh_symbol_table tab, GError **error)
gboolean destroy_storm (Sed_process p)
double storm (GRand *rand, double storm_length, double average_storm, double variance, double last_storm)
void set_ocean_storm_wave (Sed_ocean_storm s, gpointer user_data)
Sed_ocean_storm average_storms (GSList *storms)
void free_link_data (gpointer data, gpointer user_data)
gint cmp_storm_size (Sed_ocean_storm a, Sed_ocean_storm b)
gint cmp_storm_time (Sed_ocean_storm a, Sed_ocean_storm b)
void print_ocean_storm_list (GSList *list)
void print_ocean_storm (Sed_ocean_storm this_storm, gpointer user_data)
void storm_func_weibull (double *ans, struct weibull_storm_data *user_data)
double * get_wave_from_beaufort_scale_old (double beaufort_storm, double *wave)


Define Documentation

#define EH_LOG_DOMAIN   SED_STORM_PROC_NAME

Definition at line 22 of file run_storm.c.

#define SED_STORM_PROC_NAME   "storms"

Definition at line 21 of file run_storm.c.

#define STORM_KEY_FRACTION   "fraction of events to model"

Fraction of days to model.

Definition at line 162 of file run_storm.c.

Referenced by init_storm().

#define STORM_KEY_NON_EVENTS   "average non-events?"

Should the calm periods between storms be averaged to forgotten.

Definition at line 164 of file run_storm.c.

Referenced by init_storm().

#define STORM_KEY_SCALE_PARAMETER   "scale parameter for pdf"

Scale parameter for ocean storm wave height (Weibull distribution).

Definition at line 153 of file run_storm.c.

#define STORM_KEY_SEED   "seed for random number generator"

Seed for the ocean storm random number generator.

Definition at line 160 of file run_storm.c.

Referenced by init_storm().

#define STORM_KEY_SHAPE_PARAMETER   "shape parameter for pdf"

Shape parameter for ocean storm wave height (Weibull distribution).

Definition at line 155 of file run_storm.c.

#define STORM_KEY_STORM_LENGTH   "average length of a storm"

Average length of an ocean storm in days.

Definition at line 147 of file run_storm.c.

#define STORM_KEY_STORM_MAGNITUDE   "wave height of 100 year storm"

Wave height (in meters) of the 100y ocean storm.

Definition at line 149 of file run_storm.c.

#define STORM_KEY_STORM_VARIANCE   "variance of 100 year storm"

Variance (in meters) of 100y storm wave height.

Definition at line 151 of file run_storm.c.

#define STORM_KEY_WAVE_HEIGHT   "wave height"

Give wave heights from a file, or normal, uniform, or user defined distribution

Definition at line 158 of file run_storm.c.

Referenced by init_storm().


Function Documentation

Sed_ocean_storm average_storms ( GSList *  storms  ) 

Definition at line 472 of file run_storm.c.

References sed_ocean_storm_duration(), sed_ocean_storm_index(), sed_ocean_storm_new(), sed_ocean_storm_set_duration(), sed_ocean_storm_set_index(), sed_ocean_storm_set_val(), and sed_ocean_storm_val().

Referenced by get_equivalent_storm().

gint cmp_storm_size ( Sed_ocean_storm  a,
Sed_ocean_storm  b 
)

Definition at line 510 of file run_storm.c.

References sed_ocean_storm_val().

Referenced by get_equivalent_storm().

gint cmp_storm_time ( Sed_ocean_storm  a,
Sed_ocean_storm  b 
)

Definition at line 523 of file run_storm.c.

References sed_ocean_storm_index().

Referenced by get_equivalent_storm().

gboolean destroy_storm ( Sed_process  p  ) 

Definition at line 238 of file run_storm.c.

References eh_free, eh_input_val_destroy(), Storm_t::rand, sed_process_user_data(), and Storm_t::wave_height.

void free_link_data ( gpointer  data,
gpointer  user_data 
)

Definition at line 505 of file run_storm.c.

References eh_free.

Referenced by get_equivalent_storm().

double get_beaufort_scale_from_height ( double  wave_height  ) 

Definition at line 727 of file run_storm.c.

References eh_require, and interpolate().

Referenced by run_storm().

GSList * get_equivalent_storm ( GFunc  get_storm,
gpointer  user_data,
double  n_days,
double  sig_event_fraction,
gboolean  average_non_events 
)

Definition at line 324 of file run_storm.c.

References average_storms(), cmp_storm_size(), cmp_storm_time(), free_link_data(), sed_ocean_storm_index(), sed_ocean_storm_new(), sed_ocean_storm_set_duration(), sed_ocean_storm_set_index(), sed_ocean_storm_set_val(), and set_ocean_storm_wave().

Referenced by run_storm().

double get_height_from_beaufort_scale ( double  beaufort_storm  ) 

Get probable wave height from Beaufort storm value.

Get the probable wave height (in meters) from a Beaufort storm value. Fractional storm values are allowed. In such a case, the wind speed will be estimated by linear interpolation.

Parameters:
beaufort_storm A Beaufort storm value.
Returns:
The probable wave height (m).
See also:
get_wave_length_from_height , get_wave_period_from_height .

Definition at line 711 of file run_storm.c.

References eh_require, and interpolate().

Referenced by get_wave_from_beaufort_scale().

double * get_wave_from_beaufort_scale ( double  beaufort_storm,
double *  wave 
)

Get wave characteristics from a beaufort scale value.

Calculate the wave height, period, and length given a Beaufort scale value. The wave heights are taken from Beaufort strom tables. Deep-water wave equations are used to relate wave height to wave length and period.

For a non-NULL wave pointer, care must be taken to assure that there is enough memory to hold the three wave characteristic values. These values are stored as wave height, wave period, and wave length. If wave is NULL, a newly allocated array is used and returned.

Parameters:
beaufort_storm Storm magnitude as expressed as a beaufort value.
wave Array of wave characteristics.
Returns:
A pointer to the wave characteristics.
See also:
get_wave_period_from_height , get_wave_length_from_height , get_height_from_beaufort_storm .

Definition at line 680 of file run_storm.c.

References eh_new, eh_require, get_height_from_beaufort_scale(), get_wave_length_from_height(), and get_wave_period_from_height().

double* get_wave_from_beaufort_scale_old ( double  beaufort_storm,
double *  wave 
)

Get wave characteristics from a beaufort scale value.

Calculate the wave height, period, and velocity given a Beaufort scale value. The wave characteristics are calculated using some ad hoc empirical relations.

wave_height = exp( 0.252 beaufort_value ) - 1.

wave_period = 10^(beaufort_value/4.)

wave_length = 10*wave_height

For a non-NULL wave pointer, care must be taken to assure that there is enough memory to hold the three wave characteristic values. These values are stored as wave height, wave period, and wave length. If wave is NULL, a newly allocated array is used and returned.

Parameters:
beaufort_storm Storm magnitude as expressed as a beaufort value.
wave Array of wave characteristics.
Returns:
A pointer to the wave characteristics.

Definition at line 557 of file run_storm.c.

References eh_new, eh_require, and interpolate().

double * get_wave_from_beaufort_scale_power_law ( double  beaufort_storm,
double *  wave 
)

Get wave characteristics from a beaufort scale value.

Calculate the wave height, period, and length given a Beaufort scale value. The wave characteristics are calculated using power-law relations based on a fully developed sea.

For a non-NULL wave pointer, care must be taken to assure that there is enough memory to hold the three wave characteristic values. These values are stored as wave height, wave period, and wave length. If wave is NULL, a newly allocated array is used and returned.

Parameters:
beaufort_storm Storm magnitude as expressed as a beaufort value.
wave Array of wave characteristics.
Returns:
A pointer to the wave characteristics.
See also:
get_wave_period_from_wind , get_wave_height_from_wind , get_wave_length_from_wind , get_wind_from_beaufort_storm .

Definition at line 612 of file run_storm.c.

References eh_new, eh_require, get_wave_height_from_wind(), get_wave_length_from_wind(), get_wave_period_from_wind(), and get_wind_from_beaufort_scale().

double get_wave_height_from_wind ( double  wind_speed_in_mps  ) 

Get wave height from wind speed.

Parameters:
wind_speed_in_mps Wind speed (m/s)
Returns:
Wave height (m)
See also:
get_wave_length_from_wind , get_wave_period_from_wind , get_wind_from_beaufort_storm .

Definition at line 817 of file run_storm.c.

Referenced by get_wave_from_beaufort_scale_power_law().

double get_wave_length_from_height ( double  wave_height  ) 

Get wave length from wind height.

Assume a wave steepness of 1/7 to calculate the length of a wave from its height. When wave steepness exceeds 1/7, waves become unstable and begin to break.

Parameters:
wave_height Wave height
Returns:
Wave length in the same units as the input wave height.
See also:
get_wave_period_from_height , get_wind_from_beaufort_storm .

Definition at line 757 of file run_storm.c.

Referenced by get_wave_from_beaufort_scale().

double get_wave_length_from_wind ( double  wind_speed_in_mps  ) 

Get wave length from wind speed.

Parameters:
wind_speed_in_mps Wind speed (m/s)
Returns:
Wave length (m)
See also:
get_wave_period_from_wind , get_wave_height_from_wind , get_wind_from_beaufort_storm .

Definition at line 789 of file run_storm.c.

Referenced by get_wave_from_beaufort_scale_power_law().

double get_wave_period_from_height ( double  wave_height_in_meters  ) 

Get wave period from wind height.

Parameters:
wave_height_in_meters Wave height (m)
Returns:
Wave period (s)
See also:
get_wave_length_from_height , get_wind_from_beaufort_storm .

Definition at line 770 of file run_storm.c.

Referenced by get_wave_from_beaufort_scale(), and set_ocean_storm_wave().

double get_wave_period_from_wind ( double  wind_speed_in_mps  ) 

Get wave period from wind speed.

Parameters:
wind_speed_in_mps Wind speed (m/s)
Returns:
Wave period (s)
See also:
get_wave_length_from_wind , get_wave_height_from_wind , get_wind_from_beaufort_storm .

Definition at line 803 of file run_storm.c.

Referenced by get_wave_from_beaufort_scale_power_law().

double get_wind_from_beaufort_scale ( double  beaufort_storm  ) 

Get wind speed from Beaufort storm value.

Get the wind speed (in meters per second) from a Beaufort storm value. Fractional storm values are allowed. In such a case, the wind speed will be estimated by linear interpolation.

Parameters:
beaufort_storm A Beaufort storm value.
Returns:
The wind speed (m/s).
See also:
get_wave_length_from_wind , see get_wave_period_from_wind , get_wave_height_from_wind .

Definition at line 645 of file run_storm.c.

References eh_require, interpolate(), and S_MPS_PER_KNOT.

Referenced by get_wave_from_beaufort_scale_power_law().

gboolean init_storm ( Sed_process  p,
Eh_symbol_table  tab,
GError **  error 
)

Initialize a storm process.

Parameters:
p A pointer to Sed_process
tab A pointer to a Symbol_table.
error A GError to indicate user-input error
Returns:
TRUE if no problems were encountered. FALSE otherwise.

Definition at line 185 of file run_storm.c.

References Storm_t::average_non_events, eh_check_to_s(), eh_return_val_if_fail, eh_set_error_strv(), eh_symbol_table_bool_value(), eh_symbol_table_dbl_value(), eh_symbol_table_input_value(), eh_symbol_table_int_value(), eh_symbol_table_require_labels(), Storm_t::fraction, Storm_t::last_time, Storm_t::rand, Storm_t::rand_seed, sed_process_new_user_data, SEDFLUX_ERROR, SEDFLUX_ERROR_BAD_PARAM, STORM_KEY_FRACTION, STORM_KEY_NON_EVENTS, STORM_KEY_SEED, STORM_KEY_WAVE_HEIGHT, and Storm_t::wave_height.

gboolean init_storm_data ( Sed_process  proc,
Sed_cube  prof,
GError **  error 
)

Definition at line 223 of file run_storm.c.

References Storm_t::last_time, Storm_t::rand, Storm_t::rand_seed, sed_cube_age_in_years(), and sed_process_user_data().

Referenced by run_storm().

void print_ocean_storm ( Sed_ocean_storm  this_storm,
gpointer  user_data 
)

void print_ocean_storm_list ( GSList *  list  ) 

Definition at line 464 of file run_storm.c.

References sed_ocean_storm_fprint().

Sed_process_info run_storm ( Sed_process  proc,
Sed_cube  prof 
)

Definition at line 60 of file run_storm.c.

References Storm_t::average_non_events, eh_dbl_set_max, Storm_t::fraction, get_beaufort_scale_from_height(), get_equivalent_storm(), User_storm_data::h, init_storm_data(), Storm_t::last_time, S_DAYS_PER_YEAR, S_YEARS_PER_DAY, sed_cube_age_in_years(), sed_cube_set_storm(), sed_cube_set_storm_list(), SED_EMPTY_INFO, sed_ocean_storm_duration(), sed_ocean_storm_wave_height(), sed_ocean_storm_wave_length(), sed_ocean_storm_wave_period(), sed_process_run_count(), sed_process_user_data(), storm_func_user(), User_storm_data::t, and Storm_t::wave_height.

void set_ocean_storm_wave ( Sed_ocean_storm  s,
gpointer  user_data 
)

Definition at line 454 of file run_storm.c.

References get_wave_period_from_height(), sed_gravity(), sed_ocean_storm_set_wave(), sed_ocean_storm_val(), and sed_wave_new().

Referenced by get_equivalent_storm().

double storm ( GRand *  rand,
double  storm_length,
double  average_storm,
double  variance,
double  last_storm 
)

Calculate the magnitude of a storm.

The magnitude of a storm is calculated based on the average length of a storm, the average magnitude of a storm, and the magnitude of the previous storm. Here a strom is merely a stretch of similar weather. It need not be particularly unpleasant. The magnitude of the storm is drawn from a power law pdf that is fixed by the average storm magnitude. The average storm length determines the probability that this storm will be the same as the last (yesterday's) storm.

Parameters:
rand A GRand
storm_length The average length of a storm.
average_storm The average magnitude of a storm.
variance The variance of storm PDF
last_storm The magnitude of the last storm.
Returns:
The magnitude of the next storm.

Definition at line 274 of file run_storm.c.

References eh_max_log_normal(), and eh_ran1().

void storm_func_user ( double *  ans,
User_storm_data user_data 
)

Definition at line 317 of file run_storm.c.

References eh_input_val_eval(), User_storm_data::h, and User_storm_data::t.

Referenced by run_storm().

void storm_func_weibull ( double *  ans,
struct weibull_storm_data user_data 
)

Definition at line 305 of file run_storm.c.

References eh_rand_max_weibull(), weibull_storm_data::mu, weibull_storm_data::rand, and weibull_storm_data::sigma.


Generated on Fri Jan 4 18:04:18 2008 for sedflux by  doxygen 1.5.2