tfix many grain inconsitencies - granular - granular dynamics simulation | |
git clone git://src.adamsgaard.dk/granular | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit a2970453f73bbaedddd1e48e427c1825b67fe990 | |
parent eaad1100200c4187905bcab135b121fa10b9d75e | |
Author: Anders Damsgaard <[email protected]> | |
Date: Thu, 18 Mar 2021 07:20:01 +0100 | |
fix many grain inconsitencies | |
Diffstat: | |
M grain.c | 47 ++++++++++++++++-------------… | |
M grain.h | 2 ++ | |
2 files changed, 27 insertions(+), 22 deletions(-) | |
--- | |
diff --git a/grain.c b/grain.c | |
t@@ -32,13 +32,15 @@ grain_defaults(struct grain *g) | |
g->poissons_ratio = 0.2; | |
g->friction_coeff = 0.4; | |
g->tensile_strength = 1e8; | |
+ g->shear_strength = 1e8; | |
+ g->fracture_toughness = 1e8; | |
g->ncontacts = 0; | |
g->thermal_energy = 0.0; | |
g->color = 0; | |
} | |
static void | |
-print_padded_nd_double(FILE *stream, double *arr) | |
+print_padded_nd_double(FILE *stream, const double *arr) | |
{ | |
size_t i; | |
t@@ -50,13 +52,13 @@ print_padded_nd_double(FILE *stream, double *arr) | |
} | |
static void | |
-print_padded_nd_int(FILE *stream, size_t *arr) | |
+print_padded_nd_int(FILE *stream, const size_t *arr) | |
{ | |
size_t i; | |
for (i = 0; i < 3; i++) | |
if (i < nd) | |
- fprintf(stream, "%d\t", arr[i]); | |
+ fprintf(stream, "%ld\t", arr[i]); | |
else | |
fprintf(stream, "0.0\t"); | |
} | |
t@@ -64,9 +66,7 @@ print_padded_nd_int(FILE *stream, size_t *arr) | |
void | |
print_grain(FILE *stream, const struct grain *g) | |
{ | |
- size_t i; | |
- | |
- fprintf(stream, "%d\t", g->radius); | |
+ fprintf(stream, "%.17g\t", g->radius); | |
print_padded_nd_double(stream, g->pos); | |
print_padded_nd_double(stream, g->vel); | |
print_padded_nd_double(stream, g->acc); | |
t@@ -78,26 +78,26 @@ print_grain(FILE *stream, const struct grain *g) | |
print_padded_nd_double(stream, g->disp); | |
print_padded_nd_double(stream, g->forceext); | |
fprintf(stream, "%.17g\t", g->density); | |
- fprintf(stream, "%d\t", g->fixed); | |
- fprintf(stream, "%d\t", g->rotating); | |
- fprintf(stream, "%d\t", g->enabled); | |
+ fprintf(stream, "%ld\t", g->fixed); | |
+ fprintf(stream, "%ld\t", g->rotating); | |
+ fprintf(stream, "%ld\t", g->enabled); | |
fprintf(stream, "%.17g\t", g->youngs_modulus); | |
fprintf(stream, "%.17g\t", g->poissons_ratio); | |
- fprintf(stream, "%.17g\t", g->friction_coefficient); | |
+ fprintf(stream, "%.17g\t", g->friction_coeff); | |
fprintf(stream, "%.17g\t", g->tensile_strength); | |
fprintf(stream, "%.17g\t", g->shear_strength); | |
fprintf(stream, "%.17g\t", g->fracture_toughness); | |
- print_padded_nd_int(stream, g->grid_position); | |
- fprintf(stream, "%d\t", g->ncontacts); | |
- fprintf(stream, "%.17g\t", g->granular_stress); | |
+ print_padded_nd_int(stream, g->gridpos); | |
+ fprintf(stream, "%ld\t", g->ncontacts); | |
+ print_padded_nd_double(stream, g->contact_stress); | |
fprintf(stream, "%.17g\t", g->thermal_energy); | |
- fprintf(stream, "%d\n", g->color); | |
+ fprintf(stream, "%ld\n", g->color); | |
} | |
int | |
check_grain_values(const struct grain *g) | |
{ | |
- int i; | |
+ size_t i; | |
int status = 0; | |
check_float_positive("grain->radius", g->radius, &status); | |
t@@ -124,23 +124,26 @@ check_grain_values(const struct grain *g) | |
g->youngs_modulus, | |
&status); | |
check_float_non_negative("grain->poissons_ratio", | |
- g->youngs_modulus, | |
+ g->poissons_ratio, | |
&status); | |
check_float_non_negative("grain->friction_coeff", | |
- g->youngs_modulus, | |
+ g->friction_coeff, | |
&status); | |
check_float_non_negative("grain->tensile_strength", | |
- g->youngs_modulus, | |
+ g->tensile_strength, | |
+ &status); | |
+ check_float_non_negative("grain->shear_strength", | |
+ g->shear_strength, | |
+ &status); | |
+ check_float_non_negative("grain->fracture_toughness", | |
+ g->fracture_toughness, | |
&status); | |
for (i = 0; i < nd; i++) | |
- if (g->gridpos[i] < 0) | |
+ if (g->gridpos[i] > 1) | |
warn_parameter_value("grain->gridpos is not 0 or 1", | |
(double)g->gr… | |
- if (g->ncontacts[i] < 0) | |
- warn_parameter_value("grain->ncontacts is not 0 or 1", | |
- (double)g->ncontacts[… | |
check_float_non_negative("grain->thermal_energy", g->thermal_energy, &… | |
return status; | |
diff --git a/grain.h b/grain.h | |
t@@ -24,6 +24,8 @@ struct grain { | |
double poissons_ratio; | |
double friction_coeff; | |
double tensile_strength; | |
+ double shear_strength; | |
+ double fracture_toughness; | |
size_t gridpos[ND]; | |
size_t ncontacts; | |
double contact_stress[ND]; |