#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 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" |
#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" |
#define STORM_KEY_STORM_MAGNITUDE "wave height of 100 year storm" |
#define STORM_KEY_STORM_VARIANCE "variance of 100 year storm" |
#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().
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.
beaufort_storm | A Beaufort storm value. |
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.
beaufort_storm | Storm magnitude as expressed as a beaufort value. | |
wave | Array of wave characteristics. |
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.
beaufort_storm | Storm magnitude as expressed as a beaufort value. | |
wave | Array of 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.
beaufort_storm | Storm magnitude as expressed as a beaufort value. | |
wave | Array of wave characteristics. |
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.
wind_speed_in_mps | Wind speed (m/s) |
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.
wave_height | Wave height |
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.
wind_speed_in_mps | Wind speed (m/s) |
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.
wave_height_in_meters | Wave height (m) |
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.
wind_speed_in_mps | Wind speed (m/s) |
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.
beaufort_storm | A Beaufort storm value. |
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.
p | A pointer to Sed_process | |
tab | A pointer to a Symbol_table. | |
error | A GError to indicate user-input error |
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 | ) |
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.
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. |
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.