00001
00072 #ifndef _VFETK_H_
00073 #define _VFETK_H_
00074
00075 #include "maloc/maloc.h"
00076 #include "mc/mc.h"
00077 #include "apbs/vhal.h"
00078 #include "apbs/vatom.h"
00079
00080 #include "apbs/vcsm.h"
00081 #include "apbs/vpbe.h"
00082 #include "apbs/vunit.h"
00083 #include "apbs/vgreen.h"
00084 #include "apbs/vcap.h"
00085 #include "apbs/pbeparm.h"
00086 #include "apbs/femparm.h"
00087
00093 enum eVfetk_LsolvType {
00094 VLT_SLU=0,
00095 VLT_MG=1,
00096 VLT_CG=2,
00097 VLT_BCG=3
00098 };
00099
00104 typedef enum eVfetk_LsolvType Vfetk_LsolvType;
00105
00111 enum eVfetk_NsolvType {
00112 VNT_NEW=0,
00113 VNT_INC=1,
00114 VNT_ARC=2
00115 };
00116
00121 typedef enum eVfetk_NsolvType Vfetk_NsolvType;
00122
00128 enum eVfetk_GuessType {
00129 VGT_ZERO=0,
00130 VGT_DIRI=1,
00131 VGT_PREV=2
00132 };
00133
00138 typedef enum eVfetk_GuessType Vfetk_GuessType;
00139
00145 enum eVfetk_PrecType {
00146 VPT_IDEN=0,
00147 VPT_DIAG=1,
00148 VPT_MG=2
00149 };
00150
00155 typedef enum eVfetk_PrecType Vfetk_PrecType;
00156
00166 struct sVfetk {
00167
00168 Vmem *vmem;
00169 Gem *gm;
00172 AM *am;
00173 Aprx *aprx;
00174 PDE *pde;
00175 Vpbe *pbe;
00176 Vcsm *csm;
00177 Vfetk_LsolvType lkey;
00178 int lmax;
00179 double ltol;
00180 Vfetk_NsolvType nkey;
00181 int nmax;
00182 double ntol;
00183 Vfetk_GuessType gues;
00184 Vfetk_PrecType lprec;
00185 int pjac;
00187 PBEparm *pbeparm;
00188 FEMparm *feparm;
00189 Vhal_PBEType type;
00190 int level;
00192 };
00193
00197 typedef struct sVfetk Vfetk;
00198
00205 struct sVfetk_LocalVar {
00206 double nvec[VAPBS_DIM];
00207 double vx[4][VAPBS_DIM];
00208 double xq[VAPBS_DIM];
00209 double U[MAXV];
00210 double dU[MAXV][VAPBS_DIM];
00211 double W;
00212 double dW[VAPBS_DIM];
00213 double d2W;
00214 int sType;
00215 int fType;
00216 double diel;
00217 double ionacc;
00218 double A;
00219 double F;
00220 double B;
00221 double DB;
00222 double jumpDiel;
00223 Vfetk *fetk;
00224 Vgreen *green;
00225 int initGreen;
00227 SS *simp;
00229 VV *verts[4];
00230 int nverts;
00231 double ionConc[MAXION];
00232 double ionQ[MAXION];
00233 double ionRadii[MAXION];
00234 double zkappa2;
00235 double zks2;
00236 double ionstr;
00237 int nion;
00238 double Fu_v;
00239 double DFu_wv;
00240 double delta;
00241 double u_D;
00242 double u_T;
00243 };
00244
00249 typedef struct sVfetk_LocalVar Vfetk_LocalVar;
00250
00251 #if !defined(VINLINE_VFETK)
00252
00258 Gem* Vfetk_getGem(
00259 Vfetk *thee
00260 );
00261
00267 AM* Vfetk_getAM(
00268 Vfetk *thee
00269 );
00270
00276 Vpbe* Vfetk_getVpbe(
00277 Vfetk *thee
00278 );
00279
00285 Vcsm* Vfetk_getVcsm(
00286 Vfetk *thee
00287 );
00288
00297 int Vfetk_getAtomColor(
00298 Vfetk *thee,
00299 int iatom
00300 );
00301
00302 #else
00303 # define Vfetk_getGem(thee) ((thee)->gm)
00304 # define Vfetk_getAM(thee) ((thee)->am)
00305 # define Vfetk_getVpbe(thee) ((thee)->pbe)
00306 # define Vfetk_getVcsm(thee) ((thee)->csm)
00307 # define Vfetk_getAtomColor(thee, iatom) (Vatom_getPartID(Valist_getAtom(Vpbe_getValist(thee->pbe), iatom)))
00308 #endif
00309
00310
00311
00313
00323
00324
00325
00326
00327
00337
00338
00339
00340
00341
00342
00348
00349
00350
00351
00357
00358
00359
00360
00370
00371
00372
00373
00374
00380
00381
00382
00383
00384
00385
00404
00405
00406
00410
00412
00413
00443
00444
00445
00449
00450
00468
00469
00470
00472
00473
00481
00482
00483
00484
00500
00501
00502
00503
00512
00513
00514
00515
00516
00523
00524
00525
00526
00527
00528
00535
00536
00537
00538
00545
00546
00547
00548
00549
00556
00557
00558
00559
00566
00567
00568
00569
00575
00576
00577
00578
00579
00580
00587
00588
00589
00590
00593
00594
00595
00596
00602
00603
00604
00606
00608
00609
00610
00618
00619
00620
00621
00623
00624
00625
00626
00627
00645
00646
00647
00649
00650
00651
00662
00663
00664
00666
00667
00668
00669
00681
00682
00683
00685
00686
00687
00688
00689
00690
00697
00698
00699
00700
00701
00702
00703
00704
00705
00713
00714
00715
00716
00717
00718
00719
00720
00728
00729
00730
00731
00732
00733
00734
00735
00741
00742
00743
00744
00745
00747
00748
00749
00755
00756
00757
00758
00759
00760
00761
00762
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00787
00788
00789
00790
00791
00792
00793
00794
00795
00805
00806
00807
00808
00809
00817
00818
00820
00821
00822
00823
00886
00887
00889
00890
00892
00893
00894
00895
00903
00904
00906
00907
00908
00917
00918
00920
00921
00927
00928
00929
00930
00931
00932
00938
00939
00947
00948
00949
00950
00951
00952
00967
00968
00969
00971
00973
00974
00975
00976
00977
00978
00979
00980
00981