25 if(!friction_parallelized)
27 cout <<
"Called with friction_parallized parameter, but it is set to false." << endl;
28 cout <<
"Please run without this parameter if the friction parallization version is not wanted." << endl;
32 cout <<
"Running the friction measurement in parallel for different slider speeds." << endl;
241 const arma::mat& current_block_matrix,
242 const arma::rowvec& current_pad_vector,
243 arma::mat& current_block_matrix_derivative)
254 =
k_c*(i == 0 ? 0 : (current_block_matrix(i - 1, 0) - current_block_matrix(i, 0)))
255 +
k_c*(i ==
input_parameters.
N - 1 ? 0 : (current_block_matrix(i + 1, 0) - current_block_matrix(i, 0)));
262 spring_forces(i) -=
k_p*(current_block_matrix(i, 0) - current_pad_vector(0));
272 current_block_matrix_derivative.col(0) = current_block_matrix.col(1);
273 current_block_matrix_derivative.col(1) = spring_forces /
m_u;
290 const arma::mat& current_block_matrix,
291 const arma::rowvec& current_pad_vector,
292 arma::rowvec& current_pad_vector_derivative)
295 double pad_second_derivative = 0;
310 current_pad_vector_derivative(0) = current_pad_vector(1);
334 const arma::rowvec& current_pad_vector,
335 arma::rowvec& current_pad_vector_derivative
337 double pad_second_derivative = 0;
352 current_pad_vector_derivative(0) = current_pad_vector(1);
358 return -
c_p*current_pad_vector(1);
362 arma::rowvec current_pad_vector)
364 return k_p*arma::sum(current_block_matrix.col(0) - current_pad_vector(0));
389 arma::rowvec pad_vector_half_step =
pad_vector;
412 arma::rowvec pad_vector_half_step =
pad_vector;
451 block_matrix.print(
"Block matrix" + explanation_text +
": ");
452 pad_vector.print(
"Pad vector" + explanation_text +
": ");
458 cout <<
"\n\n" << endl;
461 printf(
"\r[Percentage complete: %.0f%%]",(
double)i*percentageTransformer);
471 cout <<
"\n\n" << endl;
482 pad_position_to_file.save(result_path + filename +
"_midpoint_pad_position.csv", arma::csv_ascii);
483 pad_velocity_to_file.save(result_path + filename +
"_midpoint_pad_velocity.csv", arma::csv_ascii);
487 pad_friction_to_file.save(result_path + filename +
"_midpoint_pad_friction.csv", arma::csv_ascii);
495 arma::mat& block_matrix_parallel,
496 arma::rowvec& pad_vector_parallel,
497 arma::mat block_matrix_derivative_parallel,
498 arma::rowvec pad_vector_derivative_parallel
501 arma::mat block_matrix_half_step = block_matrix_parallel;
502 arma::rowvec pad_vector_half_step = pad_vector_parallel;
507 function_u(block_matrix_parallel, pad_vector_parallel, block_matrix_derivative_parallel);
508 function_x(block_matrix_parallel, pad_vector_parallel, pad_vector_derivative_parallel);
510 block_matrix_half_step = block_matrix_parallel + 0.5 *
input_parameters.
dt * block_matrix_derivative_parallel;
511 pad_vector_half_step = pad_vector_parallel + 0.5 *
input_parameters.
dt * pad_vector_derivative_parallel;
513 function_u(block_matrix_half_step, pad_vector_half_step, block_matrix_derivative_parallel);
514 function_x(block_matrix_half_step, pad_vector_half_step, pad_vector_derivative_parallel);
516 block_matrix_parallel = block_matrix_parallel +
input_parameters.
dt * block_matrix_derivative_parallel;
517 pad_vector_parallel = pad_vector_parallel +
input_parameters.
dt * pad_vector_derivative_parallel;
524 arma::mat block_matrix_parallel;
525 arma::mat block_matrix_derivative_parallel;
527 arma::rowvec pad_vector_parallel;
528 arma::rowvec pad_vector_derivative_parallel;
531 block_matrix_parallel = 2.0*block_matrix_parallel.randu() - 1.0;
536 block_matrix_parallel = block_matrix_parallel.randu() * (-1.0);
541 block_matrix_parallel.randu();
544 block_matrix_derivative_parallel.fill(1.0);
546 pad_vector_parallel = arma::zeros<arma::rowvec>(2);
547 pad_vector_derivative_parallel = arma::zeros<arma::rowvec>(2);
549 arma::colvec pad_friction_parallel_to_file;
550 pad_friction_parallel_to_file.set_size(time_step);
552 for(
int i = 0; i < time_step; i++)
554 midpointMethodParallel(time_step, block_matrix_parallel, pad_vector_parallel, block_matrix_derivative_parallel, pad_vector_derivative_parallel);
555 pad_friction_parallel_to_file(i) =
calculatePadFriction(block_matrix_parallel, pad_vector_parallel);
562 const arma::colvec& armadillo_vector,
563 const string& result_path,
564 const double& slider_speed
567 armadillo_vector.save(result_path +
input_parameters.
file_name +
"_midpoint_pad_friction" + to_string(slider_speed) +
".csv", arma::csv_ascii);
573 cout << number_of_slider_speed_intervals;
578 omp_set_num_threads(4);
579 #pragma omp parallel for 580 for(
int i = 1; i < number_of_slider_speed_intervals + 1; i++)
604 matrix.print(
"Matrix: ");
608 arma::mat::iterator it_end = matrix.end();
609 for(arma::mat::iterator it = matrix.begin(); it != it_end; ++it)
611 cout << it[0] << endl;
614 cout << count << endl;
621 vector.print(
"Row vector: ");
void midpointMethodParallel(int timestep, arma::mat &block_matrix_parallel, arma::rowvec &pad_vector_parallel, arma::mat block_matrix_derivative_parallel, arma::rowvec pad_vector_derivative_parallel)
void function_u(const arma::mat ¤t_block_matrix, const arma::rowvec ¤t_pad_vector, arma::mat ¤t_block_matrix_derivative)
void setupBlockMatrixDerivative()
arma::mat block_matrix_derivative
void function_x_odof(const arma::rowvec ¤t_pad_vector, arma::rowvec ¤t_pad_vector_derivative)
double calculatePadFriction(arma::mat current_block_matrix, arma::rowvec current_pad_vector)
bool debug_no_neighbor_springs
arma::uvec block_velocity_column_index
int friction_zero_counter
void calculateFrictionInParallel()
arma::colvec pad_friction_to_file
arma::mat block_velocity_to_file
arma::mat block_position_to_file
void saveToCsvParallel(const arma::colvec &armadillo_vector, const string &result_path, const double &slider_speed)
arma::rowvec pad_vector_derivative
double calculatePadSupportDamper(arma::rowvec current_pad_vector)
string input_parameters_path
void function_x(const arma::mat ¤t_block_matrix, const arma::rowvec ¤t_pad_vector, arma::rowvec ¤t_pad_vector_derivative)
Parameters input_parameters
void setupPadVectorDerivative()
void printMatrix(arma::mat matrix, bool arra_format)
int index_pad_friction_to_file
bool debug_only_negative_initial
arma::colvec pad_position_to_file
int updateSliderSpeedDtInterval
void midpointMethod(int time_step)
void updateSliderSpeed(int time_step)
double end_speed_continuous
bool debug_continuous_slider_speed
void printMidPointMethod(arma::mat block_matrix, arma::rowvec pad_vector, string explanation_text="")
void setupAndRunFrictionInParallel(int time_step, double slider_speed)
void oneDegreeOfFreedomMidpointMethod(int time_step)
arma::colvec pad_velocity_to_file
bool debug_one_degree_freedom_mode
bool debug_only_write_friction
void saveToCsv(string filename, string result_path)
bool debug_no_stationary_springs
int number_of_interval_save_step
arma::uvec block_position_column_index
double start_speed_continuous
Simulation(string parameters_path)
void writeValuesToLoggers(const int &time_step)
void printRowVector(arma::rowvec vector)
bool debug_negative_intial_values
void setSpeedAfterThreshold()
void setupSaveVectorsMatrices()
void setupSliderSpeedMode()
void setupModelVectorsMatrices()
bool loggingSpecificBlocks