functionals.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00042 #ifndef _FUNCTIONALS_H_
00043 #define _FUNCTIONALS_H_
00044
00045 #include "realtype.h"
00046
00047 #ifdef __cplusplus
00048 #define EXTERN_C extern "C"
00049 #else
00050 #define EXTERN_C
00051 #endif
00052
00053 typedef ergo_real real;
00054
00055 #if defined(FUNC_PRECISION) && FUNC_PRECISION == 1
00056 #define ASINH asinhf
00057 #define ATAN atanf
00058 #define ERF erff
00059 #define EXP expf
00060 #define FABS fabsf
00061 #define LOG logf
00062 #define POW powf
00063 #define SQRT sqrtf
00064 #elif defined(FUNC_PRECISION) && FUNC_PRECISION == 2
00065 #define ASINH asinh
00066 #define ATAN atan
00067 #define ERF erf
00068 #define EXP exp
00069 #define FABS fabs
00070 #define LOG log
00071 #define POW pow
00072 #define SQRT sqrt
00073 #else
00074 #define ASINH asinhl
00075 #define ATAN atanl
00076 #define ERF erfl
00077 #define EXP expl
00078 #define FABS fabsl
00079 #define LOG logl
00080 #define POW powl
00081 #define SQRT sqrtl
00082
00083
00084 #endif
00085
00086
00087
00088
00089
00090
00091 typedef struct {
00092 real df1000;
00093 real df0100;
00094 real df0010;
00095 real df0001;
00096 real df00001;
00097 } FunFirstFuncDrv;
00098
00099
00100
00101
00102 typedef struct {
00103 real df1000;
00104 real df0100;
00105 real df0010;
00106 real df0001;
00107 real df00001;
00108 real df2000;
00109 real df1100;
00110 real df1010;
00111 real df1001;
00112 real df10001;
00113 real df0200;
00114 real df0110;
00115 real df0101;
00116 real df01001;
00117 real df0020;
00118 real df0011;
00119 real df00101;
00120 real df0002;
00121 real df00011;
00122 real df00002;
00123 } FunSecondFuncDrv;
00124
00125
00126
00127
00128
00129
00130
00131 typedef struct {
00132 real df1000;
00133 real df0100;
00134 real df0010;
00135 real df0001;
00136 real df00001;
00137
00138 real df2000;
00139 real df1100;
00140 real df1010;
00141 real df1001;
00142 real df10001;
00143 real df0200;
00144 real df0110;
00145 real df0101;
00146 real df01001;
00147 real df0020;
00148 real df0011;
00149 real df00101;
00150 real df0002;
00151 real df00011;
00152 real df00002;
00153
00154 real df3000;
00155 real df2100;
00156 real df2010;
00157 real df2001;
00158 real df20001;
00159 real df1200;
00160 real df1110;
00161 real df1101;
00162 real df11001;
00163 real df1020;
00164 real df1011;
00165 real df10101;
00166 real df1002;
00167 real df10011;
00168 real df10002;
00169 real df0300;
00170 real df0210;
00171 real df0201;
00172 real df02001;
00173 real df0120;
00174 real df0111;
00175 real df01101;
00176 real df0102;
00177 real df01011;
00178 real df01002;
00179 real df0030;
00180 real df0021;
00181 real df00201;
00182 real df0012;
00183 real df00111;
00184 real df00102;
00185 real df0003;
00186 real df00021;
00187 real df00012;
00188 real df00003;
00189 } FunThirdFuncDrv;
00190
00191
00192 typedef struct {
00193
00194
00195
00196 real df1000;
00197 real df0100;
00198 real df0010;
00199 real df0001;
00200 real df00001;
00201
00202
00203
00204 real df2000;
00205 real df1100;
00206 real df1010;
00207 real df1001;
00208 real df10001;
00209 real df0200;
00210 real df0110;
00211 real df0101;
00212 real df01001;
00213 real df0020;
00214 real df0011;
00215 real df00101;
00216 real df0002;
00217 real df00011;
00218 real df00002;
00219
00220
00221
00222 real df3000;
00223 real df2100;
00224 real df2010;
00225 real df2001;
00226 real df20001;
00227 real df1200;
00228 real df1110;
00229 real df1101;
00230 real df11001;
00231 real df1020;
00232 real df1011;
00233 real df10101;
00234 real df1002;
00235 real df10011;
00236 real df10002;
00237 real df0300;
00238 real df0210;
00239 real df0201;
00240 real df02001;
00241 real df0120;
00242 real df0111;
00243 real df01101;
00244 real df0102;
00245 real df01011;
00246 real df01002;
00247 real df0030;
00248 real df0021;
00249 real df00201;
00250 real df0012;
00251 real df00111;
00252 real df00102;
00253 real df0003;
00254 real df00021;
00255 real df00012;
00256 real df00003;
00257
00258
00259
00260 real df4000;
00261 real df3100;
00262 real df3010;
00263 real df3001;
00264 real df30001;
00265 real df2200;
00266 real df2110;
00267 real df2101;
00268 real df21001;
00269 real df2020;
00270 real df2011;
00271 real df20101;
00272 real df2002;
00273 real df20011;
00274 real df20002;
00275 real df1300;
00276 real df1210;
00277 real df1201;
00278 real df12001;
00279 real df1120;
00280 real df1111;
00281 real df11101;
00282 real df1102;
00283 real df11011;
00284 real df11002;
00285 real df1030;
00286 real df1021;
00287 real df10201;
00288 real df1012;
00289 real df10111;
00290 real df10102;
00291 real df1003;
00292 real df10021;
00293 real df10012;
00294 real df10003;
00295 real df0400;
00296 real df0310;
00297 real df0301;
00298 real df03001;
00299 real df0220;
00300 real df0211;
00301 real df02101;
00302 real df0202;
00303 real df02011;
00304 real df02002;
00305 real df0130;
00306 real df0121;
00307 real df01201;
00308 real df0112;
00309 real df01111;
00310 real df01102;
00311 real df0103;
00312 real df01021;
00313 real df01012;
00314 real df01003;
00315 real df0040;
00316 real df0031;
00317 real df00301;
00318 real df0022;
00319 real df00211;
00320 real df00202;
00321 real df0013;
00322 real df00121;
00323 real df00112;
00324 real df00103;
00325 real df0004;
00326 real df00031;
00327 real df00022;
00328 real df00013;
00329 real df00004;
00330 } FunFourthFuncDrv;
00331
00332
00333 typedef struct Functional_ Functional;
00334
00335 enum FunError { FUN_OK, FUN_UNKNOWN, FUN_CONF_ERROR };
00336 EXTERN_C enum FunError fun_select_by_name(const char *conf_string);
00337 extern Functional *selected_func;
00338 extern int (*fun_printf)(const char *fmt, ...);
00339 extern void (*fun_set_hf_weight)(real w);
00340 extern real (*fun_get_hf_weight)(void);
00341 extern void (*fun_set_cam_param)(real w, real b);
00342 int dft_get_cam_param(real *alpha, real *beta, real *mu);
00343
00344
00345
00346
00347 typedef struct FunDensProp_ {
00348 real rhoa, rhob;
00349 real grada, gradb;
00350 real gradab;
00351
00352 } FunDensProp;
00353
00354
00355
00356
00357
00358 typedef int (*IsGGAFunc)(void);
00359 typedef int (*ReadInputFunc)(const char* conf_string);
00360 typedef void (*ReportFunc)(void);
00361 typedef real (*EnergyFunc)(const FunDensProp* dens_prop);
00362 typedef void (*FirstOrderFun)(FunFirstFuncDrv *ds, real factor,
00363 const FunDensProp* dns_prp);
00364
00365 typedef void (*SecondOrderFun)(FunSecondFuncDrv *ds, real factor,
00366 const FunDensProp* dens_prop);
00367
00368 typedef void (*ThirdOrderFun)(FunThirdFuncDrv *ds, real factor,
00369 const FunDensProp* dens_prop);
00370 typedef void (*FourthOrderFun)(FunFourthFuncDrv *ds, real factor,
00371 const FunDensProp *dens_prop);
00372
00373 struct Functional_ {
00374 const char* name;
00375 IsGGAFunc is_gga;
00376 ReadInputFunc read;
00377 ReportFunc report;
00378
00379
00380
00381 EnergyFunc func;
00382 FirstOrderFun first;
00383 SecondOrderFun second;
00384 ThirdOrderFun third;
00385 FourthOrderFun fourth;
00386 };
00387
00388 EXTERN_C void drv1_clear(FunFirstFuncDrv* gga);
00389 EXTERN_C void drv2_clear(FunSecondFuncDrv* gga);
00390 EXTERN_C void drv3_clear(FunThirdFuncDrv* gga);
00391 EXTERN_C void drv4_clear(FunFourthFuncDrv* gga);
00392
00393
00394
00395 extern Functional BeckeFunctional;
00396 extern Functional KTFunctional;
00397 extern Functional LB94Functional;
00398 extern Functional LYPFunctional;
00399 extern Functional OPTXFunctional;
00400 extern Functional P86cFunctional;
00401 extern Functional PW86xFunctional;
00402 extern Functional Pw91xFunctional;
00403 extern Functional Pw91cFunctional;
00404 extern Functional PW92cFunctional;
00405 extern Functional PZ81Functional;
00406 extern Functional PbecFunctional;
00407 extern Functional PbexFunctional;
00408 extern Functional SlaterFunctional;
00409 extern Functional VWN3Functional;
00410 extern Functional VWN5Functional;
00411 extern Functional VWNIFunctional;
00412 extern Functional VWN3IFunctional;
00413 extern Functional VWNFunctional;
00414 extern Functional XAlphaFunctional;
00415
00416
00417 extern Functional B3LYPFunctional;
00418 extern Functional B3LYPGaussFunctional;
00419 extern Functional B3P86Functional;
00420 extern Functional B3P86GFunctional;
00421 extern Functional B3PW91Functional;
00422 extern Functional BHandHFunctional;
00423 extern Functional BHandHLYPFunctional;
00424 extern Functional BLYPFunctional;
00425 extern Functional BP86Functional;
00426 extern Functional BPW91Functional;
00427 extern Functional Camb3lypFunctional;
00428 extern Functional CamFunctional;
00429 extern Functional CombineFunctional;
00430 extern Functional GGAKeyFunctional;
00431 extern Functional HseFunctional;
00432 extern Functional KT1Functional;
00433 extern Functional KT2Functional;
00434 extern Functional KT3Functional;
00435 extern Functional LDAFunctional;
00436 extern Functional OLYPFunctional;
00437 extern Functional PBE0Functional;
00438 extern Functional PBEFunctional;
00439 extern Functional SVWN3Functional;
00440 extern Functional SVWN5Functional;
00441
00442
00443 extern Functional* available_functionals[];
00444
00445 extern int fun_true(void);
00446 extern int fun_false(void);
00447
00448 EXTERN_C void dftlistfuncs_(void);
00449 int dft_isgga_(void);
00450 int dft_isgga__(void);
00451
00452 EXTERN_C void dftreport_(void);
00453 EXTERN_C int fun_get_cam_param(real *alpha, real *beta, real *mu);
00454
00455 #endif