⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_coulomb.c

📁 This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY without ev
💻 C
📖 第 1 页 / 共 2 页
字号:
/* specfunc/test_coulomb.c *  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman *  * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or (at * your option) any later version. *  * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. *  * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *//* Author:  G. Jungman */#include <config.h>#include <gsl/gsl_test.h>#include <gsl/gsl_sf.h>#include "test_sf.h"#define PRINT(n) printf("%22.18g  %22.18g  %22.18g  %22.18g\n", F[n], Fp[n], G[n], Gp[n])#define WKB_TOL (1.0e+04 * TEST_SQRT_TOL0)int test_coulomb(void){  gsl_sf_result r;  int status = 0;  int s = 0;    char message_buff[2048];  /* const int kmax = 20; */  /* double F[kmax+1], Fp[kmax+1], G[kmax+1], Gp[kmax+1]; */  gsl_sf_result F, Fp, G, Gp;  double Fe, Ge;  double lam_min;  double lam_F;  double eta, x;  int k_G;  TEST_SF(s, gsl_sf_hydrogenicR_1_e, (3.0, 2.0, &r),  0.025759948256148471036,  TEST_TOL0, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_1_e, (3.0, 10.0, &r), 9.724727052062819704e-13, TEST_TOL1, GSL_SUCCESS);  status += s;  TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 1, 3.0, 0.0, &r),  0.0,  TEST_TOL0, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 0, 3.0, 2.0, &r), -0.03623182256981820062,  TEST_TOL2, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 1, 3.0, 2.0, &r), -0.028065049083129581005, TEST_TOL2, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_e, (4, 2, 3.0, 2.0, &r),  0.14583027278668431009,  TEST_TOL0, GSL_SUCCESS);  status += s;  TEST_SF(s, gsl_sf_hydrogenicR_e, (100,  0, 3.0, 2.0, &r), -0.00007938950980052281367, TEST_TOL3, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_e, (100, 10, 3.0, 2.0, &r),  7.112823375353605977e-12,  TEST_TOL2, GSL_SUCCESS);  TEST_SF(s, gsl_sf_hydrogenicR_e, (100, 90, 3.0, 2.0, &r),  5.845231751418131548e-245, TEST_TOL2, GSL_SUCCESS);  status += s;  lam_F = 0.0;  k_G   = 0;  eta = 1.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  0.6849374120059439677, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp, -0.7236423862556063963, TEST_TOL3);  s += test_sf_check_result(message_buff,  G, -0.8984143590920205487, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp, -0.5108047585190350106, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s,"  gsl_sf_coulomb_wave_FG_e(1.0, 5.0, lam_F=0, lam_G=0)");  status += s;  lam_F = 10.0;  k_G   = 2;  eta = 1.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  0.0006423773354915823698, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  0.0013299570958719702545, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  33.27615734455096130,     TEST_TOL3);  s += test_sf_check_result(message_buff, Gp, -45.49180102261540580,     TEST_TOL3);  printf("%s", message_buff);  gsl_test(s,"  gsl_sf_coulomb_wave_FG_e(1.0, 5.0, lam_F=10, lam_G=8)");  status += s;  lam_F = 4.0;  k_G   = 2;  eta = 50.0;  x = 120.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  0.0735194711823798495, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  0.6368149124126783325, TEST_TOL3);  /*  s += test_sf_check_result(message_buff,  G,  , TEST_TOL5);  s += test_sf_check_result(message_buff, Gp, , TEST_TOL5);  */  printf("%s", message_buff);  gsl_test(s,"  gsl_sf_coulomb_wave_FG_e(50.0, 120.0, lam_F=4, lam_G=2)");  status += s;  lam_F = 0.0;  k_G = 0;  eta = -1000.0;  x = 1.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  9.68222518991341e-02, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  5.12063396274631e+00, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  1.13936784379472e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp, -4.30243486522438e+00, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-1000.0, 1.0, lam_F=0, lam_G=0)");  status += s;  lam_min = 0.0;  eta = -50.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  1.52236975714236e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  2.03091041166137e+00, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  4.41680690236251e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp, -6.76485374766869e-01, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-50.0, 5.0, lam_F=0, lam_G=0)");  status += s;  lam_min = 0.0;  eta = -50.0;  x = 1000.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F, -0.2267212182760888523, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp, -0.9961306810018401525, TEST_TOL3);  s += test_sf_check_result(message_buff,  G, -0.9497684438900352186, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp,  0.2377656295411961399, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-50.0, 1000.0, lam_F=0, lam_G=0)");  status += s;  lam_F = 10.0;  k_G = 0;  eta = -50.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F, -3.681143602184922e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  1.338467510317215e+00, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  3.315883246109351e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp,  1.510888628136180e+00, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-50.0, 5.0, lam_F=10, lam_G=10)");  status += s;  lam_F = 0.0;  k_G = 0;  eta = -4.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  4.078627230056172e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  1.098212336357310e+00, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  6.743270353832442e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp, -6.361104272804447e-01, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-4.0, 5.0, lam_F=0, lam_G=0");  status += s;  lam_F = 3.0;  k_G = 0;  eta = -4.0;  x = 5.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F, -2.568630935581323e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  1.143229422014827e+00, TEST_TOL3);  s += test_sf_check_result(message_buff,  G,  7.879899223927996e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Gp,  3.859905878106713e-01, TEST_TOL3);  printf("%s", message_buff);  gsl_test(s, "  gsl_sf_coulomb_wave_FG_e(-4.0, 5.0, lam_F=3, lam_G=3");  status += s;  lam_F = 0.0;  k_G = 0;  eta = 1.0;  x = 2.0;  gsl_sf_coulomb_wave_FG_e(eta, x, lam_F, k_G, &F, &Fp, &G, &Gp, &Fe, &Ge);  s = 0;  message_buff[0] = 0;  s += test_sf_check_result(message_buff,  F,  6.61781613832681e-01, TEST_TOL3);  s += test_sf_check_result(message_buff, Fp,  4.81557455709949e-01, TEST_TOL3);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -