00001
00002
00003
00004
00051 #ifndef COMPUTE_H
00052 #define COMPUTE_H
00053
00054 #ifdef __cplusplus
00055 extern "C" {
00056 #endif
00057
00073 int force_compute_scaled_coords(Force *, const MD_Dvec pos[],
00074 const int32 sel[], int32 sel_len);
00075
00076
00106 int force_compute_domain_update(Force *, const int32 sel[], int32 sel_len);
00107
00108
00129 int force_compute_bonds(Force *fobj, double *u_bond, MD_Dvec f_bond[],
00130 double e_bond[], double virial[], const MD_Dvec pos[],
00131 const int32 bond_sel[], int32 bond_sel_len);
00132
00153 int force_compute_angles(Force *fobj, double *u_angle, MD_Dvec f_angle[],
00154 double e_angle[], double virial[], const MD_Dvec pos[],
00155 const int32 angle_sel[], int32 angle_sel_len);
00156
00177 int force_compute_dihedrals(Force *fobj, double *u_dihed, MD_Dvec f_dihed[],
00178 double e_dihed[], double virial[], const MD_Dvec pos[],
00179 const int32 dihed_sel[], int32 dihed_sel_len);
00180
00201 int force_compute_impropers(Force *fobj, double *u_impr, MD_Dvec f_impr[],
00202 double e_impr[], double virial[], const MD_Dvec pos[],
00203 const int32 impr_sel[], int32 impr_sel_len);
00204
00205
00221 double force_compute_bond_interaction(MD_Dvec f_bond[], double virial[],
00222 const MD_Dvec pos[], const MD_Bond *bond, const MD_BondPrm *prm);
00223
00239 double force_compute_angle_interaction(MD_Dvec f_angle[], double virial[],
00240 const MD_Dvec pos[], const MD_Angle *angle, const MD_AnglePrm *prm);
00241
00258 double force_compute_torsion_interaction(MD_Dvec f_tors[], double virial[],
00259 const MD_Dvec pos[], const MD_Tors *tors, const MD_TorsPrm *prm);
00260
00261
00281 int force_compute_bres_sphere(Force *fobj, double *u_bres,
00282 MD_Dvec f_bres[], double e_bres[], const MD_Dvec *pos,
00283 const int32 bres_sel[], int32 bres_sel_len);
00284
00308 int force_compute_bres_cylinder(Force *fobj, double *u_bres,
00309 MD_Dvec f_bres[], double e_bres[], const MD_Dvec *pos,
00310 const int32 *bres_sel, int32 bres_sel_len, int32 bresopts);
00311
00312
00353 int force_compute_nbpairs_direct(Force *fobj, double virial[],
00354 double *u_elec, MD_Dvec f_elec[], double e_elec[], double e_epot[],
00355 int32 is_elec_direct, int32 elec_pair_potential,
00356 double *u_vdw, MD_Dvec f_vdw[], double e_vdw[],
00357 int32 is_vdw_direct, int32 vdw_pair_potential,
00358 const MD_Dvec pos[],
00359 const int32 aset_sel[], int32 aset_sel_len,
00360 const int32 bset_sel[], int32 bset_sel_len);
00361
00375 int force_compute_nbpairs_geomhash(Force *fobj,
00376 const MD_Dvec trpos[], const int32 sel[], int32 sel_len);
00377
00423 int force_compute_nbpairs_gridcells(Force *fobj, double virial[],
00424 double *u_elec, MD_Dvec f_elec[], double e_elec[], double e_epot[],
00425 int32 is_elec_gridcells, int32 elec_pair_potential,
00426 double *u_vdw, MD_Dvec f_vdw[], double e_vdw[],
00427 int32 is_vdw_gridcells, int32 vdw_pair_potential,
00428 const MD_Dvec pos[], int32 is_subtracted);
00429
00484 int force_compute_nbpairs_subtexcl(Force *fobj, double virial[],
00485 double *u_elec, MD_Dvec f_elec[], double e_elec[], double e_epot[],
00486 int32 is_elec_subtexcl, int32 elec_pair_potential,
00487 double *u_vdw, MD_Dvec f_vdw[], double e_vdw[],
00488 int32 is_vdw_subtexcl, int32 vdw_pair_potential,
00489 const MD_Dvec pos[], const int32 sel[], int32 sel_len,
00490 const int32 mapnb[], int32 map_id);
00491
00492
00503 void force_compute_nbpairs_elec_standard(double *u, double *du_r,
00504 double r2, double c);
00505
00520 void force_compute_nbpairs_elec_shifted(double *u, double *du_r,
00521 double r2, double c, double inv_elec_cutoff2);
00522
00523 void force_compute_nbpairs_elec_ewald(double *u, double *du_r,
00524 double r2, double c, double ewald_coef, double grad_coef);
00525
00536 void force_compute_nbpairs_vdw_standard(double *u, double *du_r,
00537 double r2, double a, double b);
00538
00558 void force_compute_nbpairs_vdw_switched(double *u, double *du_r,
00559 double r2, double a, double b,
00560 double vdw_cutoff2, double switch_dist2, double inv_denom_switch);
00561
00576 void force_compute_nbpairs_vdw_buck(double *u, double *du_r,
00577 double r2, double a, double b, double c);
00578
00597 void force_compute_nbpairs_vdw_switchbuck(double *u, double *du_r,
00598 double r2, double a, double b, double c,
00599 double vdw_cutoff2, double switch_dist2, double inv_denom_switch);
00600
00612 void force_compute_nbpairs_vdw_bucknd(double *u, double *du_r,
00613 double r2, double a, double b);
00614
00630 void force_compute_nbpairs_vdw_switchbucknd(double *u, double *du_r,
00631 double r2, double a, double b,
00632 double vdw_cutoff2, double switch_dist2, double inv_denom_switch);
00633
00634 void force_compute_nbpairs_vdw_bucksafe(double *u, double *du_r,
00635 double r2, double a, double b, double c,
00636 double rn2, double an, double bn);
00637
00638 void force_compute_nbpairs_vdw_switchbucksafe(double *u, double *du_r,
00639 double r2, double a, double b, double c,
00640 double rn2, double an, double bn,
00641 double roff2, double ron2, double denom);
00642
00643 int force_compute_nbpairs_isregen_pairlists(Force *fobj,
00644 double delta2, const MD_Dvec initpos[], const MD_Dvec pos[],
00645 const int32 sel[], int32 sel_len);
00646 int force_compute_nbpairs_regen_pairlists(Force *fobj,
00647 MD_Dvec initpos[], const MD_Dvec pos[],
00648 const int32 aset_sel[], int32 aset_sel_len,
00649 const int32 mapnb[], int32 aset_id, int32 bset_id);
00650 int force_compute_nbpairs_eval_pairlists(Force *fobj, double virial[],
00651 double *u_elec, MD_Dvec f_elec[], double e_elec[], double e_epot[],
00652 int32 is_elec_gridcells, int32 elec_pair_potential,
00653 double *u_vdw, MD_Dvec f_vdw[], double e_vdw[],
00654 int32 is_vdw_gridcells, int32 vdw_pair_potential,
00655 const MD_Dvec pos[], const int32 sel[], int32 sel_len,
00656 const int32 mapnb[], int32 map_id);
00657
00658 #ifdef __cplusplus
00659 }
00660 #endif
00661
00662 #endif