/* \int R(n0,l0)R(n1,l1)r */ double HydrogenicDipole(const cfac_t *cfac, int n0, int l0, int n1, int l1) { gsl_coulomb_me *r, ***qk; double z, am, scale; if (n0 > n1) { int tmp; tmp = n0; n0 = n1; n1 = tmp; tmp = l0; l0 = l1; l1 = tmp; } if (l1 != l0 + 1 && l1 != l0 - 1) { return 0.0; } z = GetResidualZ(cfac); am = cfac_get_atomic_mass(cfac); scale = gsl_coulomb_me_scale(z, am); qk = ArraySet(cfac->coulomb.dipole_array, n1, NULL); if (*qk == NULL) { int np; *qk = malloc(n1*sizeof(gsl_coulomb_me *)); for (np = 1; np <= n1; np++) { r = gsl_coulomb_me_alloc(n1, np); (*qk)[np - 1] = r; } } r = (*qk)[n0 - 1]; return scale*gsl_coulomb_me_get(r, l1, l0); }
int StoreInit(const cfac_t *cfac, const char *fn, int reset, sqlite3 **db, unsigned long *sid) { int retval = 0; struct stat sb; sqlite3_stmt *stmt; int rc; const char *sql; char *errmsg; int need_truncate = 0, need_init = 0; *sid = (unsigned long) time(NULL); if (reset) { need_truncate = 1; need_init = 1; } if (stat(fn, &sb) == -1) { if (errno == ENOENT) { need_truncate = 0; need_init = 1; } else { perror("stat"); return -1; } } else { if (sb.st_size == 0) { need_truncate = 0; need_init = 1; } } if (need_truncate) { if (truncate(fn, 0)) { return -1; } } rc = sqlite3_open(fn, db); if (rc) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(*db)); sqlite3_close(*db); return -1; } rc = sqlite3_exec(*db, "PRAGMA foreign_keys = ON", NULL, NULL, &errmsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", errmsg); sqlite3_free(errmsg); sqlite3_close(*db); return -1; } if (need_init) { int i = 0; while ((sql = schema_str[i])) { rc = sqlite3_exec(*db, sql, NULL, NULL, &errmsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", errmsg); sqlite3_free(errmsg); sqlite3_close(*db); retval = -1; break; } i++; } sql = "INSERT INTO cfacdb" \ " (property, value)" \ " VALUES ('format', ?)"; sqlite3_prepare_v2(*db, sql, -1, &stmt, NULL); sqlite3_bind_int(stmt, 1, CFACDB_FORMAT_VERSION); rc = sqlite3_step(stmt); if (rc != SQLITE_DONE) { fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(*db)); sqlite3_close(*db); retval = -1; } sqlite3_reset(stmt); } else { int db_format; sql = "SELECT value FROM cfacdb WHERE property = 'format'"; rc = sqlite3_exec(*db, sql, format_cb, &db_format, &errmsg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n", errmsg); sqlite3_free(errmsg); sqlite3_close(*db); return -1; } if (db_format != CFACDB_FORMAT_VERSION) { fprintf(stderr, "Incompatible DB format %d, expected %d\n", db_format, CFACDB_FORMAT_VERSION); sqlite3_free(errmsg); sqlite3_close(*db); return -1; } } sql = "INSERT INTO sessions" \ " (sid, version, uta, cmdline)" \ " VALUES (?, ?, ?, '')"; sqlite3_prepare_v2(*db, sql, -1, &stmt, NULL); sqlite3_bind_int(stmt, 1, *sid); sqlite3_bind_int(stmt, 2, 10000*CFAC_VERSION + 100*CFAC_SUBVERSION + CFAC_SUBSUBVERSION); sqlite3_bind_int(stmt, 3, cfac->uta ? 1:0); rc = sqlite3_step(stmt); if (rc != SQLITE_DONE) { fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(*db)); sqlite3_close(*db); retval = -1; } sqlite3_reset(stmt); sql = "INSERT INTO species (sid, symbol, anum, mass) VALUES (?, ?, ?, ?)"; sqlite3_prepare_v2(*db, sql, -1, &stmt, NULL); sqlite3_bind_int (stmt, 1, *sid); SQLITE3_BIND_STR (stmt, 2, cfac_get_atomic_symbol(cfac)); sqlite3_bind_int (stmt, 3, cfac_get_atomic_number(cfac)); sqlite3_bind_double(stmt, 4, cfac_get_atomic_mass(cfac)); rc = sqlite3_step(stmt); if (rc != SQLITE_DONE) { fprintf(stderr, "SQL error: %s\n", sqlite3_errmsg(*db)); sqlite3_close(*db); retval = -1; } sqlite3_finalize(stmt); return retval; }