VdW_solver.h
Go to the documentation of this file.
1 //
2 // This file is part of the FFEA simulation package
3 //
4 // Copyright (c) by the Theory and Development FFEA teams,
5 // as they appear in the README.md file.
6 //
7 // FFEA is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // FFEA is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with FFEA. If not, see <http://www.gnu.org/licenses/>.
19 //
20 // To help us fund FFEA development, we humbly ask that you cite
21 // the research papers on the package.
22 //
23 
24 #ifndef VDW_SOLVER_H_INCLUDED
25 #define VDW_SOLVER_H_INCLUDED
26 
27 #include <math.h>
28 
29 #include "FFEA_return_codes.h"
31 #include "LJ_matrix.h"
32 #include "Blob.h"
33 
34 class VdW_solver {
35 public:
36  VdW_solver();
37 
38  ~VdW_solver();
39 
41 
42  int solve(scalar *blob_corr);
43 
46 
47  scalar get_field_energy(int i, int j);
48 
49  void reset_fieldenergy();
50 
51 protected:
52 
55 
58 
60  int num_blobs;
65  int ix, iy, iz;
66  };
67 
70  // static const scalar phi_f[4]; ///< shape function for the center of the "element"
71  static const int adjacent_cell_lookup_table[27][3];
72 
73  static const int num_tri_gauss_quad_points = 3;
74  struct tri_gauss_point {
76  scalar eta[3];
77  };
78  // static const struct tri_gauss_point gauss_pointx[num_tri_gauss_quad_points];
79  static const tri_gauss_point gauss_points[];
80 
81  bool consider_interaction(Face *f1, int l_index_i, int motion_state_i, LinkedListNode<Face> *l_j, scalar *blob_corr);
82 
83  virtual void do_interaction(Face *f1, Face *f2, scalar *blob_corr);
84 
85  bool do_steric_interaction(Face *f1, Face *f2, scalar *blob_corr);
86 
87  void do_lj_interaction(Face *f1, Face *f2, scalar *blob_corr);
88 
89  void do_gensoft_interaction(Face *f1, Face *f2, scalar *blob_corr);
90 
91  void do_sticky_xz_interaction(Face *f, bool bottom_wall, scalar dim_y);
92 
94  vector3 (&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points],
95  vector3 (&p)[num_tri_gauss_quad_points], vector3 (&q)[num_tri_gauss_quad_points],
96  scalar &Rmin, scalar &Emin, scalar &energy);
97 
99  vector3 (&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points],
100  vector3 (&p)[num_tri_gauss_quad_points], vector3 (&q)[num_tri_gauss_quad_points],
101  scalar &Rmin, scalar &Emin, scalar &energy);
102 
103  void calc_gensoft_force_pair_matrix(vector3 (&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points],
104  vector3 (&p)[num_tri_gauss_quad_points], vector3 (&q)[num_tri_gauss_quad_points],
105  scalar &Rmin, scalar &Emin, scalar &k0, scalar &energy);
106 
107  void calc_lj_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmin_6,
108  scalar &force_mag, scalar &e);
109 
110  void calc_ljinterpolated_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmini,
111  scalar &force_mag, scalar &e);
112 
113  void calc_gensoft_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmin_2, scalar &Rmin_3, scalar &k0,
114  scalar &force_mag, scalar &e);
115 
117 
118  scalar dot(vector3 *p, vector3 *q);
119 
121 
122  scalar minimum_image(scalar delta, scalar size);
123 
125 };
126 
127 #endif
bool do_steric_interaction(Face *f1, Face *f2, scalar *blob_corr)
Definition: VdW_solver.cpp:458
int total_num_surface_faces
Definition: VdW_solver.h:53
static const int adjacent_cell_lookup_table[27][3]
Definition: VdW_solver.h:71
scalar steric_factor
Proportionality factor to the Steric repulsion.
Definition: VdW_solver.h:68
virtual void do_interaction(Face *f1, Face *f2, scalar *blob_corr)
Definition: VdW_solver.cpp:332
int ix
Definition: VdW_solver.h:65
Definition: VdW_solver.h:74
scalar ** fieldenergy
Definition: VdW_solver.h:59
Definition: LJ_matrix.h:59
void reset_fieldenergy()
Definition: VdW_solver.cpp:159
int solve_sticky_wall(scalar h)
Definition: VdW_solver.cpp:216
int ssint_type
Definition: VdW_solver.h:124
scalar distance2(vector3 &p, vector3 &q)
Definition: VdW_solver.cpp:621
vector3 box_size
Definition: VdW_solver.h:56
void calc_gensoft_force_pair_matrix(vector3(&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points], vector3(&p)[num_tri_gauss_quad_points], vector3(&q)[num_tri_gauss_quad_points], scalar &Rmin, scalar &Emin, scalar &k0, scalar &energy)
Definition: VdW_solver.cpp:701
scalar dot_with_normal(vector3 *p, vector3 *q, vector3 *n)
Definition: VdW_solver.cpp:630
~VdW_solver()
Definition: VdW_solver.cpp:109
SSINT_matrix * ssint_matrix
Definition: VdW_solver.h:57
int iy
Definition: VdW_solver.h:65
scalar get_field_energy(int i, int j)
Definition: VdW_solver.cpp:642
void calc_lj_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmin_6, scalar &force_mag, scalar &e)
Definition: VdW_solver.cpp:736
Definition: VdW_solver.h:64
bool consider_interaction(Face *f1, int l_index_i, int motion_state_i, LinkedListNode< Face > *l_j, scalar *blob_corr)
Definition: VdW_solver.cpp:338
int solve(scalar *blob_corr)
Definition: VdW_solver.cpp:168
scalar minimum_image(scalar delta, scalar size)
Definition: VdW_solver.cpp:634
void do_sticky_xz_interaction(Face *f, bool bottom_wall, scalar dim_y)
Definition: VdW_solver.cpp:396
int calc_kinetics
Definition: VdW_solver.h:62
void calc_ljinterpolated_force_pair_matrix(vector3(&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points], vector3(&p)[num_tri_gauss_quad_points], vector3(&q)[num_tri_gauss_quad_points], scalar &Rmin, scalar &Emin, scalar &energy)
Definition: VdW_solver.cpp:786
scalar steric_dr
Constant to calculate the numerical derivative.
Definition: VdW_solver.h:69
Definition: VdW_solver.h:34
static const int num_tri_gauss_quad_points
Definition: VdW_solver.h:73
scalar W
Definition: VdW_solver.h:75
static const tri_gauss_point gauss_points[]
Definition: VdW_solver.h:79
int iz
Definition: VdW_solver.h:65
void do_lj_interaction(Face *f1, Face *f2, scalar *blob_corr)
Definition: VdW_solver.cpp:237
void do_gensoft_interaction(Face *f1, Face *f2, scalar *blob_corr)
Definition: VdW_solver.cpp:542
bool working_w_static_blobs
Definition: VdW_solver.h:63
static const int i
index of ith thing
Definition: rod_math_v9.h:63
int init(NearestNeighbourLinkedListCube *surface_face_lookup, vector3 *box_size, SSINT_matrix *ssint_matrix, scalar &steric_factor, int num_blobs, int inc_self_ssint, string ssint_type_string, scalar &steric_dr, int calc_kinetics, bool working_w_static_blobs)
Definition: VdW_solver.cpp:124
Definition: NearestNeighbourLinkedListCube.h:34
NearestNeighbourLinkedListCube * surface_face_lookup
Definition: VdW_solver.h:54
VdW_solver()
Definition: VdW_solver.cpp:98
Definition: mat_vec_types.h:90
int inc_self_ssint
whether to include interactions between faces within the same blob, or not.
Definition: VdW_solver.h:61
void calc_lj_force_pair_matrix(vector3(&force_pair_matrix)[num_tri_gauss_quad_points][num_tri_gauss_quad_points], vector3(&p)[num_tri_gauss_quad_points], vector3(&q)[num_tri_gauss_quad_points], scalar &Rmin, scalar &Emin, scalar &energy)
Definition: VdW_solver.cpp:664
scalar dot(vector3 *p, vector3 *q)
Definition: VdW_solver.cpp:626
double scalar
Definition: mat_vec_types.h:36
Definition: Face.h:38
int num_blobs
Definition: VdW_solver.h:60
void calc_gensoft_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmin_2, scalar &Rmin_3, scalar &k0, scalar &force_mag, scalar &e)
Definition: VdW_solver.cpp:754
void calc_ljinterpolated_factors(scalar &mag_r, int index_k, int index_l, scalar &Emin, scalar &Rmini, scalar &force_mag, scalar &e)
Definition: VdW_solver.cpp:774