42 inline bool contains(vector<int>& vec,
int elem){
43 return (std::find(vec.begin(), vec.end(), elem) != vec.end());
46 inline float getnorm(
const float* vec,
const int dim =
DIM){
49 for (
int j = 0; j<
DIM; j++){
56 void mapping(
int& edge_counter,
int elem_type,
int n_vertices, stringstream& input,
int* edges);
58 string read_dump(
int& n_nodes,
int& n_elems,
string& fname);
60 void mapping(
int& edge_counter,
int elem_type);
62 void read_n(
int& n_nodes,
int& n_elems,
string& fname);
64 void take_input(
float* R,
int* edges,
int n_nodes,
int n_elems,
string& fname);
66 void __init__(
float* L,
float* damage,
bool* PBC,
int n_elems);
73 for (
int i = 0; i<
DIM; i++){
74 result[i] = vec[i] / norm;
79 ifstream infile(fname);
86 for (
int i = 0; i<
DIM; i++){
87 vec[i] = vec[i] / norm;
91 inline void unitvector(
float* result,
float* r1,
float* r2){
93 for (
int j = 0; j<
DIM; j++){
94 result[j] = r1[j] - r2[j];
101 if (t < 0.99){
return kB*
T /
b_poly * (t + 1.0 / 4.0 / pow((1 - t), 2) - 1.0 / 4.0); }
102 else {
return 1000; }
107 for (
int i = 0; i<
DIM; i++){
108 result[i] = mag*direction[i];
112 inline float dist(
const float* r1,
const float* r2){
115 for (
int j = 0; j<
DIM; j++){
122 void forcevector(
float* result,
float* r1,
float* r2,
float L);
125 inline bool ismember(
int item,
int* array,
size_t size){
126 bool is_inside =
false;
127 for(
int k=0; k<size; k++){
if(array[k]==item){is_inside =
true;
break;}}
131 float getabsmax(
float* arr,
size_t sizeofarr);
133 template <
typename t>
137 std::time_t result = std::time(
nullptr);
138 logger.open(fname, ios::trunc|ios_base::out);
141 logger<<
"1D pulling of a 2D gel"<<
"\n";
142 logger<<
"File created at "<<std::asctime(std::localtime(&result));
145 logger<<
"Sim dimension : "<<
DIM<<
"\n";
146 logger<<
"Simulation time : "<<
SIM_TIME<<
"\n";
147 logger<<
"Simulation time-step : "<<
TIME_STEP<<
"\n";
148 logger<<
"Velocity : "<<
vel_x<<
"\t"<<
vel_y<<
"\n";
151 logger<<
"Disorder characteristics : "<<
"\n";
152 logger<<
" -- L_MEAN : "<<
L_MEAN<<
"\n";
153 logger<<
" -- L_STD : "<<
L_STD<<
"\n";
159 for(
int i =0; i < rows; i++){
160 for(
int j = 0; j< cols; j++){
161 logger<<arr[i*cols + j]<<
"\t";
166 cout<<
"Stored everything in "<<fname<<
"!\n";
170 inline float kf(
float force){
174 inline float kfe(
float force_mag){
178 void __init__(
float* L,
int* m,
float* damage,
float* sacdamage,
bool* PBC,
int n_elems);
int get_num_vertices(int elem_type)
Definition: helper_funcs.h:30
#define SACBONDS
Definition: params.h:15
#define TIME_STEP
Definition: params.h:5
void write_to_file(string &fname, t *arr, int rows, int cols)
Definition: helper_funcs.h:134
float getabsmax(float *arr, size_t sizeofarr)
Gets the absolute maximum of an array.
Definition: helper_funcs.cpp:330
void unitvector(float *result, float *r1, float *r2)
Definition: helper_funcs.h:91
void mapping(int &edge_counter, int elem_type, int n_vertices, stringstream &input, int *edges)
Converts mesh elements from GMSH file to edges and nodes. Only implemented elements of <element-id> =...
Definition: helper_funcs.cpp:38
#define IMPLEMENT_PBC
Definition: params.h:16
#define SIM_TIME
Definition: params.h:6
bool does_file_exist(string &fname)
Definition: helper_funcs.h:78
#define delxf
Definition: params.h:35
#define vel_y
Definition: vel.h:9
void read_n(int &n_nodes, int &n_elems, string &fname)
Reads the number of nodes and edges according to the .msh file. Useful for allocating memory in the c...
Definition: helper_funcs.cpp:172
#define vel_x
Definition: vel.h:8
int filename(const string &)
Gives an integer value to be appended to the network dump filename.
Definition: helper_funcs.cpp:376
bool ismember(int item, int *array, size_t size)
Definition: helper_funcs.h:125
#define kB
Definition: params.h:29
void convert_to_vector(float *result, const float mag, const float *direction)
Definition: helper_funcs.h:105
string read_dump(int &n_nodes, int &n_elems, string &fname)
Reads the number of nodes and poly chains left at the end of previous simulation. The code does not t...
Definition: helper_funcs.cpp:99
#define ae
Definition: params.h:32
bool contains(vector< int > &vec, int elem)
Definition: helper_funcs.h:42
float dist(const float *r1, const float *r2)
Definition: helper_funcs.h:112
#define T
Definition: params.h:31
void __init__(float *L, float *damage, bool *PBC, int n_elems)
Initializes various properties for each edge in the graph.
Definition: helper_funcs.cpp:298
#define af
Definition: params.h:34
float kfe(float force_mag)
Definition: helper_funcs.h:174
float force_wlc(float x, float L)
Definition: helper_funcs.h:99
#define L_MEAN
Definition: params.h:9
void take_input(float *R, int *edges, int n_nodes, int n_elems, string &fname)
Reads the input and converts to appropriate network data.
Definition: helper_funcs.cpp:224
#define delxe
Definition: params.h:33
#define CRACKED
Definition: params.h:18
#define MAXBOUND_Y
Definition: params.h:12
#define RATE_DAMAGE
Definition: params.h:19
void forcevector(float *result, float *r1, float *r2, float L)
Gives a force vector given the nodes and the contour length of the polymer connecting these...
Definition: helper_funcs.cpp:316
#define DIM
Definition: params.h:4
#define PROB_REMOVAL
Definition: params.h:24
float getnorm(const float *vec, const int dim=DIM)
Definition: helper_funcs.h:46
#define b_poly
Definition: params.h:30
float kf(float force)
Definition: helper_funcs.h:170
#define L_STD
Definition: params.h:10
void normalize_vector(float *result, const float *vec)
Definition: helper_funcs.h:70
#define MAXBOUND_X
Definition: params.h:11