Weak Zone

Contents

rhea_weakzone.h
rhea_weakzone_label.h


rhea_weakzone.h [source]

Defines

RHEA_WEAKZONE_NEUTRAL_VALUE (1.0)

RHEA_WEAKZONE

Weak zones to decouple plate boundaries.

Typedefs

typedef struct rhea_weakzone_options rhea_weakzone_options_t
typedef void (*rhea_weakzone_compute_fn_t)(ymir_vec_t *weakzone, void *data)

Computes a custom weak zone. Callback function for weak zone computation.

Enums

enum rhea_weakzone_t

Values:

enumerator RHEA_WEAKZONE_NONE = -1
enumerator RHEA_WEAKZONE_DEPTH = 0
enumerator RHEA_WEAKZONE_DATA_POINTS
enumerator RHEA_WEAKZONE_DATA_POINTS_LABELS
enumerator RHEA_WEAKZONE_DATA_POINTS_LABELS_FACTORS

Functions

void rhea_weakzone_add_options(ymir_options_t *opt_sup)

Defines options and adds them as sub-options.

void rhea_weakzone_process_options(rhea_weakzone_options_t *opt, rhea_domain_options_t *domain_options)

Processes options and stores them.

int rhea_weakzone_exists(rhea_weakzone_options_t *opt)

Checks whether a weak zone exists for the given set of options.

void rhea_weakzone_perfmon_init(const int activate, const int skip_if_active)

Initializes performance counters.

void rhea_weakzone_perfmon_print(sc_MPI_Comm mpicomm, const int print_wtime, const int print_n_calls, const int print_flops)

Prints statistics collected by performance monitors.

ymir_vec_t *rhea_weakzone_new(ymir_mesh_t *ymir_mesh)

Creates a new weak zone vector.

ymir_vec_t *rhea_weakzone_normal_new(ymir_mesh_t *ymir_mesh)
void rhea_weakzone_destroy(ymir_vec_t *weakzone)

Destroys a weak zone vector.

void rhea_weakzone_normal_destroy(ymir_vec_t *weakzone_normal)
int rhea_weakzone_check_vec_type(ymir_vec_t *vec)

Checks whether a vector is of the right type.

int rhea_weakzone_normal_check_vec_type(ymir_vec_t *vec)
int rhea_weakzone_is_valid(ymir_vec_t *vec)

Checks entries of a vector.

void rhea_weakzone_data_create(rhea_weakzone_options_t *opt, sc_MPI_Comm mpicomm)

Allocates and performs the setup of data that is required to compute the weak zone field.

void rhea_weakzone_data_clear(rhea_weakzone_options_t *opt)

Clears storage of weak zone data.

void rhea_weakzone_compute(ymir_vec_t *weakzone, void *data)

Computes the weak zone at each node of the mesh.

void rhea_weakzone_compute_distance(ymir_vec_t *distance, rhea_weakzone_options_t *opt)

Computes the distances to the weak zone surfaces at each node of the mesh.

void rhea_weakzone_compute_indicator(ymir_vec_t *indicator, const int label_filter, rhea_weakzone_options_t *opt)

Computes the (smooth) indicator for weak zones that is 1 inside of weak zones and goes to zero far away from weak zones.

void rhea_weakzone_compute_normal(ymir_vec_t *weakzone_normal, rhea_weakzone_options_t *opt)

Computes the normal to the weak zone surfaces at each node of the mesh.

double rhea_weakzone_dist_node(int *nearest_label, double *nearest_factor, const double x, const double y, const double z, rhea_weakzone_options_t *opt)

Computes the weak zone distance/factor/factor derivative at one node.

Computes the distance to the weak zone surface (e.g., shortest distance to point cloud).

double rhea_weakzone_factor_node(const double distance, const double thickness, const double thickness_const, const double factor_interior)

Computes the weak zone factor depending on the distance to a weak zone. The edges of the weak zone are smoothed by a Gaussian.

1 - (1 - factor_interior) * exp ( - dist^2 / (2 * (0.5*thickness)^2) )

double rhea_weakzone_factor_deriv_node(const double distance, const double thickness, const double thickness_const, const double factor_interior)
void rhea_weakzone_compute_elem (double *_sc_restrict weak_elem, const double *_sc_restrict x, const double *_sc_restrict y, const double *_sc_restrict z, const int n_nodes, rhea_weakzone_options_t *opt)

Computes the weak zone factor of one element.

int rhea_weakzone_get_total_n_labels(rhea_weakzone_options_t *opt)

Returns the total number of labels.

double rhea_weakzone_lookup_thickness(const int label, rhea_weakzone_options_t *opt)

Looks up weak zone parameters.

double rhea_weakzone_lookup_thickness_const(const int label, rhea_weakzone_options_t *opt)
double rhea_weakzone_lookup_factor_interior(const int label, rhea_weakzone_options_t *opt)
int rhea_weakzone_lookup_index_from_label(const rhea_weakzone_label_t label, rhea_weakzone_options_t *opt)

Gets the array index in [0,total #labels per class) corresponding to a label.

rhea_weakzone_label_t rhea_weakzone_lookup_label_from_index(const int idx, rhea_weakzone_options_t *opt)

Gets the label corresponding to an array index in [0,total #labels per class).

double *rhea_weakzone_get_elem_gauss(sc_dmatrix_t *weak_el_mat, ymir_vec_t *weak_vec, const ymir_locidx_t elid)

Gets the weak zone of one element at Gauss nodes.

void rhea_weakzone_set_elem_gauss(ymir_vec_t *weak_vec, sc_dmatrix_t *weak_el_mat, const ymir_locidx_t elid)

Sets the weak zone of one element at Gauss nodes.

struct rhea_weakzone_options

Public Members

rhea_weakzone_t type
double thickness
double thickness_class_slab
double thickness_class_ridge
double thickness_class_fracture
double thickness_const
double thickness_const_class_slab
double thickness_const_class_ridge
double thickness_const_class_fracture
double weak_factor_interior
double weak_factor_interior_class_slab
double weak_factor_interior_class_ridge
double weak_factor_interior_class_fracture
double *weak_factor_interior_label
char *points_file_path_bin
char *points_file_path_txt
char *labels_file_path_bin
char *labels_file_path_txt
char *factors_file_path_bin
char *factors_file_path_txt
int n_points
int n_labels[RHEA_WEAKZONE_LABEL_CLASS_N]
char *write_points_file_path_bin
char *write_points_file_path_txt
char *write_labels_file_path_bin
char *write_factors_file_path_bin
rhea_pointcloud_weakzone_t *pointcloud
double stats_radius_min
double stats_thickness_max
double stats_factor_interior_min
rhea_domain_options_t *domain_options

rhea_weakzone_label.h [source]

Defines

RHEA_WEAKZONE_LABEL_MAX_N_NONE 1
RHEA_WEAKZONE_LABEL_MAX_N_SLAB 128
RHEA_WEAKZONE_LABEL_MAX_N_RIDGE 128
RHEA_WEAKZONE_LABEL_MAX_N_FRACTURE 128
RHEA_WEAKZONE_LABEL_EARTH_N_NONE 0
RHEA_WEAKZONE_LABEL_EARTH_N_SLAB 27
RHEA_WEAKZONE_LABEL_EARTH_N_RIDGE 58
RHEA_WEAKZONE_LABEL_EARTH_N_FRACTURE 35

Enums

enum rhea_weakzone_label_t

RHEA_WEAKZONE_LABEL

Weak zone labels that correspond to specific plate boudaries.

Values:

enumerator RHEA_WEAKZONE_LABEL_UNKNOWN = -1
enumerator RHEA_WEAKZONE_LABEL_CLASS_NONE = 0
enumerator RHEA_WEAKZONE_LABEL_CLASS_SLAB = 1
enumerator RHEA_WEAKZONE_LABEL_CLASS_RIDGE = 2
enumerator RHEA_WEAKZONE_LABEL_CLASS_FRACTURE = 3
enumerator RHEA_WEAKZONE_LABEL_CLASS_N = 4
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_ALU = 1001
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_CAL = 1002
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_CAM = 1003
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_CAR = 1004
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_CAS = 1005
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_COT = 1006
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_HAL = 1007
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_HEL = 1008
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_HIM = 1009
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_HIN = 1010
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_IZU = 1011
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_KER = 1012
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_KUR = 1013
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_MAK = 1014
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_MAN = 1015
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_MUE = 1016
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_PAM = 1017
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_PHI = 1018
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_PNG = 1019
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_PUY = 1020
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_RYU = 1021
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_SAM = 1022
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_SCO = 1023
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_SOL = 1024
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_SUL = 1025
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_SUM = 1026
enumerator RHEA_WEAKZONE_LABEL_EARTH_SL_VAN = 1027
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_KE_AU = 2001
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_TO_NI_1 = 2002
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_TO_NI_2 = 2003
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_TO_AU = 2004
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_BR_NH = 2005
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AU_CR = 2006
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NH_PA_1 = 2007
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NH_PA_2 = 2008
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_CR_NH = 2009
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PA_BR = 2010
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_ANDAMAN = 2011
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PS_MA_1 = 2012
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PS_MA_2 = 2013
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AYU = 2014
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_AN_1 = 2015
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_AN_2 = 2016
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_AN_3 = 2017
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_SO_AN_1 = 2018
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_SO_AN_2 = 2019
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_SO_IN = 2020
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AU_SO = 2021
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NA_AF = 2022
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_SA_1 = 2023
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_SA_2 = 2024
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_SA_3 = 2025
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AU_AN_1 = 2026
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AU_AN_2 = 2027
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AU_AN_3 = 2028
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PA_AN = 2029
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AN_SA = 2030
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AN_NZ = 2031
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_EA_PA = 2032
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_EA_NZ = 2033
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_JZ_PA = 2034
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_JZ_AN = 2035
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_JZ_NZ = 2036
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NZ_PA = 2037
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_CO_NZ_1 = 2038
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NZ_PA_1 = 2039
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NZ_PA_2 = 2040
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_CO_NZ_2 = 2041
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_GP_PA = 2042
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_GP_NZ = 2043
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_GP_CO = 2044
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_CO_PA = 2045
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PA_CO = 2046
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_RI_PA = 2047
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NA_PA = 2048
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_PA_JF = 2049
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_SW_SC = 2050
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NA_EU_1 = 2051
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_NA_EU_2 = 2052
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_EU_NA = 2053
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_IN_SO = 2054
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_IN_AR = 2055
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_SO_AR = 2056
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AF_AR = 2057
enumerator RHEA_WEAKZONE_LABEL_EARTH_RI_AR_AF = 2058
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_SB_WL = 3001
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_PS_MA_1 = 3002
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_PS_MA_2 = 3003
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AU_CR = 3004
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_BR_CR = 3005
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_BR_AU_1 = 3006
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_BR_AU_2 = 3007
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_PA_BR = 3008
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_FT_PA = 3009
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_KE_TO = 3010
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_KE_AU = 3011
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_PA_AU_1 = 3012
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AU_PA = 3013
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_PA_AU_2 = 3014
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_NZ_PM = 3015
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_NA_RI = 3016
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_NA_PA_1 = 3017
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_NA_PA_2 = 3018
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_OK_PS = 3019
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_SC_AN = 3020
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_SC_SA_1 = 3021
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_SC_SA_2 = 3022
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AN_SA = 3023
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_CA_SA = 3024
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_CA_ND = 3025
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_CA_NA = 3026
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_EU_IN = 3027
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_IN_EU = 3028
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AR_IN = 3029
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AR_AF = 3030
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AT_AR = 3031
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AR_EU = 3032
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_EU_AR = 3033
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AT_EU = 3034
enumerator RHEA_WEAKZONE_LABEL_EARTH_FZ_AS_EU = 3035

Functions

static inline int rhea_weakzone_label_is_class(const rhea_weakzone_label_t label)

Returns true/false if input label is a label for a class.

static inline rhea_weakzone_label_t rhea_weakzone_label_get_class(const rhea_weakzone_label_t label)

Returns the label to the class corresponding to the input label. Returns unknown label if cannot determine.

static inline int rhea_weakzone_label_is_valid(const rhea_weakzone_label_t label)

Returns true/false if the input label is valid.

static inline int rhea_weakzone_label_is_valid_int(const int label)
static inline int rhea_weakzone_label_is_slab(const rhea_weakzone_label_t label)

Returns true/false if the input label is of class “slab”.

static inline int rhea_weakzone_label_is_ridge(const rhea_weakzone_label_t label)

Returns true/false if the input label is of class “ridge”.

static inline int rhea_weakzone_label_is_fracture(const rhea_weakzone_label_t label)

Returns true/false if the input label is of class “fracture”.