int ljcos2_set_params(int part_type_a, int part_type_b, double eps, double sig, double offset, double w) { IA_parameters *data, *data_sym; make_particle_type_exist(part_type_a); make_particle_type_exist(part_type_b); data = get_ia_param(part_type_a, part_type_b); data_sym = get_ia_param(part_type_b, part_type_a); if (!data || !data_sym) { return TCL_ERROR; } /* lj-cos2 should be symmetrically */ data->LJCOS2_eps = data_sym->LJCOS2_eps = eps; data->LJCOS2_sig = data_sym->LJCOS2_sig = sig; data->LJCOS2_offset = data_sym->LJCOS2_offset = offset; data->LJCOS2_w = data_sym->LJCOS2_w = w; /* calculate dependent parameters */ data->LJCOS2_rchange = data_sym->LJCOS2_rchange = pow(2,1/6.)*sig; data->LJCOS2_cut = data_sym->LJCOS2_cut = w + data_sym->LJCOS2_rchange; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); mpi_bcast_ia_params(part_type_b, part_type_a); if (lj_force_cap != -1.0) mpi_lj_cap_forces(lj_force_cap); return TCL_OK; }
int ljangle_set_params(int part_type_a, int part_type_b, double eps, double sig, double cut, int b1p, int b1n, int b2p, int b2n, double cap_radius, double z0, double dz, double kappa, double epsprime) { IA_parameters *data, *data_sym; make_particle_type_exist(part_type_a); make_particle_type_exist(part_type_b); data = get_ia_param(part_type_a, part_type_b); data_sym = get_ia_param(part_type_b, part_type_a); if (!data || !data_sym) { return TCL_ERROR; } /* LJ_ANGLE should be symmetrically */ data->LJANGLE_eps = data_sym->LJANGLE_eps = eps; data->LJANGLE_sig = data_sym->LJANGLE_sig = sig; data->LJANGLE_cut = data_sym->LJANGLE_cut = cut; data->LJANGLE_bonded1pos = data_sym->LJANGLE_bonded1pos = b1p; data->LJANGLE_bonded1neg = data_sym->LJANGLE_bonded1neg = b1n; data->LJANGLE_bonded2pos = data_sym->LJANGLE_bonded2pos = b2p; data->LJANGLE_bonded2neg = data_sym->LJANGLE_bonded2neg = b2n; data->LJANGLE_bonded1type = data_sym->LJANGLE_bonded1type = part_type_a; if (cap_radius > 0) { data->LJANGLE_capradius = cap_radius; data_sym->LJANGLE_capradius = cap_radius; } if (dz > 0.) { data->LJANGLE_z0 = data_sym->LJANGLE_z0 = z0; data->LJANGLE_dz = data_sym->LJANGLE_dz = dz; data->LJANGLE_kappa = data_sym->LJANGLE_kappa = kappa; data->LJANGLE_epsprime = data_sym->LJANGLE_epsprime = epsprime; } /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); mpi_bcast_ia_params(part_type_b, part_type_a); if (ljangle_force_cap != -1.0) mpi_ljangle_cap_forces(ljangle_force_cap); return TCL_OK; }
int angledist_set_params(int bond_type, double bend, double phimin, double distmin, double phimax, double distmax) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.angledist.bend = bend; bonded_ia_params[bond_type].p.angledist.phimin = phimin; bonded_ia_params[bond_type].p.angledist.distmin = distmin; bonded_ia_params[bond_type].p.angledist.phimax = phimax; bonded_ia_params[bond_type].p.angledist.distmax = distmax; #ifdef BOND_ANGLEDIST_COSINE #error angledist not implemented for BOND_ANGLEDIST_COSINE #endif #ifdef BOND_ANGLEDIST_COSSQUARE #error angledist not implemented for BOND_ANGLEDIST_COSSQUARE #endif bonded_ia_params[bond_type].type = BONDED_IA_ANGLEDIST; bonded_ia_params[bond_type].num = 2; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int ljcos2_set_params(int part_type_a, int part_type_b, double eps, double sig, double offset, double w) { IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->LJCOS2_eps = eps; data->LJCOS2_sig = sig; data->LJCOS2_offset = offset; data->LJCOS2_w = w; /* calculate dependent parameters */ data->LJCOS2_rchange = pow(2,1/6.)*sig; data->LJCOS2_cut = w + data->LJCOS2_rchange; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); if (lj_force_cap != -1.0) mpi_lj_cap_forces(lj_force_cap); return ES_OK; }
int BMHTF_set_params(int part_type_a, int part_type_b, double A, double B, double C, double D, double sig, double cut) { double shift, dist2, pw6; IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; dist2 = cut*cut; pw6 = dist2*dist2*dist2; shift = -(A*exp(B*(sig - cut)) - C/pw6 - D/pw6/dist2); data->BMHTF_A = A; data->BMHTF_B = B; data->BMHTF_C = C; data->BMHTF_D = D; data->BMHTF_sig = sig; data->BMHTF_cut = cut; data->BMHTF_computed_shift = shift; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int IBM_VolumeConservation_SetParams(const int bond_type, const int softID, const double kappaV) { // Create bond make_bond_type_exist(bond_type); // General bond parameters bonded_ia_params[bond_type].type = BONDED_IA_IBM_VOLUME_CONSERVATION; bonded_ia_params[bond_type].num = 1; // This means that Espresso requires one bond partner. Here we simply ignore it, but Espresso cannot handle 0. // Specific stuff if ( softID > MaxNumIBM) { printf("Error: softID (%d) is larger than MaxNumIBM (%d)\n", softID, MaxNumIBM); return ES_ERROR; } if ( softID < 0) { printf("Error: softID (%d) must be non-negative\n", softID); return ES_ERROR; } bonded_ia_params[bond_type].p.ibmVolConsParameters.softID = softID; bonded_ia_params[bond_type].p.ibmVolConsParameters.kappaV = kappaV; bonded_ia_params[bond_type].p.ibmVolConsParameters.volRef = 0; // NOTE: We cannot compute the reference volume here because not all interactions are setup // and thus we do not know which triangles belong to this softID // Calculate it later in the init function //Communicate this to whoever is interested mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int lj_cos_set_params(int part_type_a, int part_type_b, double eps, double sig, double cut, double offset) { double facsq; IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->LJCOS_eps = eps; data->LJCOS_sig = sig; data->LJCOS_cut = cut; data->LJCOS_offset = offset; /* Calculate dependent parameters */ facsq = driwu2*SQR(sig); data->LJCOS_rmin = sqrt(driwu2)*sig; data->LJCOS_alfa = PI/(SQR(data->LJCOS_cut)-facsq); data->LJCOS_beta = PI*(1.-(1./(SQR(data->LJCOS_cut)/facsq-1.))); /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int hydrogen_bond_set_params(int bond_type, DoubleList *params) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.hydrogen_bond.r0 = params->e[0]; bonded_ia_params[bond_type].p.hydrogen_bond.alpha = params->e[1]; bonded_ia_params[bond_type].p.hydrogen_bond.E0 = params->e[2]; bonded_ia_params[bond_type].p.hydrogen_bond.kd = params->e[3]; bonded_ia_params[bond_type].p.hydrogen_bond.sigma1 = params->e[4]; bonded_ia_params[bond_type].p.hydrogen_bond.sigma2 = params->e[5]; bonded_ia_params[bond_type].p.hydrogen_bond.psi10 = params->e[6]; bonded_ia_params[bond_type].p.hydrogen_bond.psi20 = params->e[7]; bonded_ia_params[bond_type].p.hydrogen_bond.E0sb = params->e[8]; bonded_ia_params[bond_type].p.hydrogen_bond.r0sb = params->e[9]; bonded_ia_params[bond_type].p.hydrogen_bond.alphasb = params->e[10]; bonded_ia_params[bond_type].p.hydrogen_bond.f2 = params->e[11]; bonded_ia_params[bond_type].p.hydrogen_bond.f3 = params->e[12]; bonded_ia_params[bond_type].type = BONDED_IA_CG_DNA_BASEPAIR; bonded_ia_params[bond_type].num = 3; mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int lennard_jones_set_params(int part_type_a, int part_type_b, double eps, double sig, double cut, double shift, double offset, double cap_radius, double min) { IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->LJ_eps = eps; data->LJ_sig = sig; data->LJ_cut = cut; data->LJ_shift = shift; data->LJ_offset = offset; if (cap_radius > 0) { data->LJ_capradius = cap_radius; } if (min > 0) { data->LJ_min = min; } /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); mpi_cap_forces(force_cap); return ES_OK; }
int inter_dpd_set_params(int part_type_a, int part_type_b, double gamma, double r_c, int wf, double tgamma, double tr_c, int twf) { extern double temperature; IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->dpd_gamma = gamma; data->dpd_r_cut = r_c; data->dpd_wf = wf; data->dpd_pref1 = gamma/time_step; data->dpd_pref2 = sqrt(24.0*temperature*gamma/time_step); data->dpd_tgamma = tgamma; data->dpd_tr_cut = tr_c; data->dpd_twf = twf; data->dpd_pref3 = tgamma/time_step; data->dpd_pref4 = sqrt(24.0*temperature*tgamma/time_step); /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int comfixed_set_params(int part_type_a, int part_type_b, int flag) { Particle *p; int i, j, np, c; Cell *cell; IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return 1; if (n_nodes > 1) return 2; data->COMFIXED_flag = flag; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); for (c = 0; c < local_cells.n; c++) { cell = local_cells.cell[c]; p = cell->part; np = cell->n; for(i = 0; i < np; i++) { if(p[i].p.type==part_type_a) { for(j = 0; j < 3; j++) { p[i].m.v[j] = 0.; p[i].f.f[j] = 0.; } } } } return ES_OK; }
int morse_set_params(int part_type_a, int part_type_b, double eps, double alpha, double rmin, double cut, double cap_radius) { double add1, add2; IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->MORSE_eps = eps; data->MORSE_alpha = alpha; data->MORSE_rmin = rmin; data->MORSE_cut = cut; /* calculate dependent parameter */ add1 = exp(-2.0*data->MORSE_alpha*(data->MORSE_cut - data->MORSE_rmin)); add2 = 2.0*exp(-data->MORSE_alpha*(data->MORSE_cut - data->MORSE_rmin)); data->MORSE_rest = data->MORSE_eps * (add1 - add2); if (cap_radius > 0) { data->MORSE_capradius = cap_radius; } /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); mpi_cap_forces(force_cap); return ES_OK; }
void IBM_InitVolumeConservation() { // Check since this function is called at the start of every integrate loop // Also check if volume has been set due to reading of a checkpoint if ( !VolumeInitDone /*&& VolumesCurrent[0] == 0 */) { // Calculate volumes CalcVolumes(); //numWriteCOM = 0; // Loop through all bonded interactions and check if we need to set the reference volume for (int i=0; i < n_bonded_ia; i++) { if ( bonded_ia_params[i].type == BONDED_IA_IBM_VOLUME_CONSERVATION ) { // This check is important because InitVolumeConservation may be called accidentally // during the integration. Then we must not reset the reference if ( bonded_ia_params[i].p.ibmVolConsParameters.volRef == 0 ) { const int softID =bonded_ia_params[i].p.ibmVolConsParameters.softID; bonded_ia_params[i].p.ibmVolConsParameters.volRef = VolumesCurrent[softID]; mpi_bcast_ia_params(i, -1); } } } } VolumeInitDone = true; }
// set out_direction parameters int out_direction_set_params(int bond_type) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].type = BONDED_IA_OIF_OUT_DIRECTION; bonded_ia_params[bond_type].num = 3; mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int hat_set_params(int part_type_a, int part_type_b, double Fmax, double r) { IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->HAT_Fmax = Fmax; data->HAT_r = r; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int IBM_Tribend_ResetParams(const int bond_type, const double kb) { // Check if bond exists and is of correct type if ( bond_type >= n_bonded_ia ) { printf("bond does not exist while reading tribend checkpoint\n"); return ES_ERROR; } if ( bonded_ia_params[bond_type].type != BONDED_IA_IBM_TRIBEND ) { printf("interaction type does not match while reading tribend checkpoint!\n"); return ES_ERROR; } // Check if k is correct if ( fabs( bonded_ia_params[bond_type].p.ibm_tribend.kb - kb) > 1e-6 ) { printf("kb does not match while reading tribend checkpoint. It is %.12e and read was %.12e\n", bonded_ia_params[bond_type].p.ibm_tribend.kb, kb); return ES_ERROR; } //Communicate this to whoever is interested mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int virtual_set_params(int bond_type) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].type = BONDED_IA_VIRTUAL_BOND; bonded_ia_params[bond_type].num = 1; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int bonded_coulomb_set_params(int bond_type, double prefactor) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.bonded_coulomb.prefactor = prefactor; bonded_ia_params[bond_type].type = BONDED_IA_BONDED_COULOMB; bonded_ia_params[bond_type].num = 1; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int IBM_VolumeConservation_ResetParams(const int bond_type, const double volRef) { // Check if bond exists and is of correct type if ( bond_type >= n_bonded_ia ) return ES_ERROR; if ( bonded_ia_params[bond_type].type != BONDED_IA_IBM_VOLUME_CONSERVATION ) return ES_ERROR; // Specific stuff // We need to set this here, since it is not re-calculated at the restarting of a sim as, e.g., triel bonded_ia_params[bond_type].p.ibmVolConsParameters.volRef = volRef; //Communicate this to whoever is interested mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int gaussian_set_params(int part_type_a, int part_type_b, double eps, double sig, double cut) { IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->Gaussian_eps = eps; data->Gaussian_sig = sig; data->Gaussian_cut = cut; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int soft_sphere_set_params(int part_type_a, int part_type_b, double a, double n, double cut, double offset) { IA_parameters *data = get_ia_param_safe(part_type_a, part_type_b); if (!data) return ES_ERROR; data->soft_a = a; data->soft_n = n; data->soft_cut = cut; data->soft_offset = offset; /* broadcast interaction parameters */ mpi_bcast_ia_params(part_type_a, part_type_b); return ES_OK; }
int subt_lj_set_params(int bond_type, double k, double r) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.subt_lj.k = k; bonded_ia_params[bond_type].p.subt_lj.r = r; bonded_ia_params[bond_type].type = BONDED_IA_SUBT_LJ; bonded_ia_params[bond_type].p.subt_lj.r2 = SQR(bonded_ia_params[bond_type].p.subt_lj.r); bonded_ia_params[bond_type].num = 1; mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/// set dihedral parameters int dihedral_set_params(int bond_type, int mult, double bend, double phase) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].type = BONDED_IA_DIHEDRAL; bonded_ia_params[bond_type].num = 3; bonded_ia_params[bond_type].p.dihedral.mult = mult; bonded_ia_params[bond_type].p.dihedral.bend = bend; bonded_ia_params[bond_type].p.dihedral.phase = phase; mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/***************************************************************************** * setting parameters *****************************************************************************/ int rigid_bond_set_params(int bond_type, double d, double p_tol, double v_tol) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.rigid_bond.d2 = d*d; bonded_ia_params[bond_type].p.rigid_bond.p_tol = 2.0*p_tol; bonded_ia_params[bond_type].p.rigid_bond.v_tol = v_tol*time_step; bonded_ia_params[bond_type].type = BONDED_IA_RIGID_BOND; bonded_ia_params[bond_type].num = 1; n_rigidbonds += 1; mpi_bcast_ia_params(bond_type, -1); mpi_bcast_parameter(FIELD_RIGIDBONDS); return ES_OK; }
/** set parameters for the angle potential. \todo The type of the angle potential is chosen via config.hpp and cannot be changed at runtime. */ int angle_cossquare_set_params(int bond_type, double bend, double phi0) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.angle_cossquare.bend = bend; bonded_ia_params[bond_type].p.angle_cossquare.phi0 = phi0; bonded_ia_params[bond_type].p.angle_cossquare.cos_phi0 = cos(phi0); bonded_ia_params[bond_type].type = BONDED_IA_ANGLE_COSSQUARE; bonded_ia_params[bond_type].num = 2; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/// set the parameters for the stretching_force potential int stretching_force_set_params(int bond_type, double r0, double ks) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.stretching_force.ks = ks; bonded_ia_params[bond_type].p.stretching_force.r0 = r0; bonded_ia_params[bond_type].type = BONDED_IA_STRETCHING_FORCE; bonded_ia_params[bond_type].num = 1; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
int harmonic_set_params(int bond_type, double k, double r,double r_cut) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.harmonic.k = k; bonded_ia_params[bond_type].p.harmonic.r = r; bonded_ia_params[bond_type].p.harmonic.r_cut = r_cut; bonded_ia_params[bond_type].type = BONDED_IA_HARMONIC; bonded_ia_params[bond_type].num = 1; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/** set parameters for the AREA_FORCE_GLOBAL potential. */ int area_force_global_set_params(int bond_type, double A0_g, double ka_g) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.area_force_global.ka_g = ka_g; bonded_ia_params[bond_type].p.area_force_global.A0_g = A0_g; bonded_ia_params[bond_type].type = BONDED_IA_AREA_FORCE_GLOBAL; bonded_ia_params[bond_type].num = 2; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/** set parameters for the angle potential. \todo The type of the angle potential is chosen via config.hpp and cannot be changed at runtime. */ int angle_harmonic_set_params(int bond_type, double bend, double phi0) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.angle_harmonic.bend = bend; bonded_ia_params[bond_type].p.angle_harmonic.phi0 = phi0; bonded_ia_params[bond_type].type = BONDED_IA_ANGLE_HARMONIC; bonded_ia_params[bond_type].num = 2; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }
/** set parameters for the OIF_GLOBAL_FORCES potential. */ int oif_global_forces_set_params(int bond_type, double A0_g, double ka_g, double V0, double kv) { if(bond_type < 0) return ES_ERROR; make_bond_type_exist(bond_type); bonded_ia_params[bond_type].p.oif_global_forces.ka_g = ka_g; bonded_ia_params[bond_type].p.oif_global_forces.A0_g = A0_g; bonded_ia_params[bond_type].p.oif_global_forces.V0 = V0; bonded_ia_params[bond_type].p.oif_global_forces.kv = kv; bonded_ia_params[bond_type].type = BONDED_IA_OIF_GLOBAL_FORCES; bonded_ia_params[bond_type].num = 2; /* broadcast interaction parameters */ mpi_bcast_ia_params(bond_type, -1); return ES_OK; }