00001
00049 #ifndef _VFETK_H_
00050 #define _VFETK_H_
00051
00052 #include "maloc/maloc.h"
00053 #include "mc/mc.h"
00054 #include "apbs/vhal.h"
00055 #include "apbs/vatom.h"
00056
00057 #include "apbs/vcsm.h"
00058 #include "apbs/vpbe.h"
00059 #include "apbs/vunit.h"
00060 #include "apbs/vgreen.h"
00061 #include "apbs/vcap.h"
00062 #include "apbs/pbeparm.h"
00063 #include "apbs/femparm.h"
00064
00070 enum eVfetk_LsolvType {
00071 VLT_SLU=0,
00072 VLT_MG=1,
00073 VLT_CG=2,
00074 VLT_BCG=3
00075 };
00076
00081 typedef enum eVfetk_LsolvType Vfetk_LsolvType;
00082
00088 enum eVfetk_NsolvType {
00089 VNT_NEW=0,
00090 VNT_INC=1,
00091 VNT_ARC=2
00092 };
00093
00098 typedef enum eVfetk_NsolvType Vfetk_NsolvType;
00099
00105 enum eVfetk_GuessType {
00106 VGT_ZERO=0,
00107 VGT_DIRI=1,
00108 VGT_PREV=2
00109 };
00110
00115 typedef enum eVfetk_GuessType Vfetk_GuessType;
00116
00122 enum eVfetk_PrecType {
00123 VPT_IDEN=0,
00124 VPT_DIAG=1,
00125 VPT_MG=2
00126 };
00127
00132 typedef enum eVfetk_PrecType Vfetk_PrecType;
00133
00143 struct sVfetk {
00144
00145 Vmem *vmem;
00146 Gem *gm;
00149 AM *am;
00150 Aprx *aprx;
00151 PDE *pde;
00152 Vpbe *pbe;
00153 Vcsm *csm;
00154 Vfetk_LsolvType lkey;
00155 int lmax;
00156 double ltol;
00157 Vfetk_NsolvType nkey;
00158 int nmax;
00159 double ntol;
00160 Vfetk_GuessType gues;
00161 Vfetk_PrecType lprec;
00162 int pjac;
00164 PBEparm *pbeparm;
00165 FEMparm *feparm;
00166 Vhal_PBEType type;
00167 int level;
00169 };
00170
00174 typedef struct sVfetk Vfetk;
00175
00182 struct sVfetk_LocalVar {
00183 double nvec[VAPBS_DIM];
00184 double vx[4][VAPBS_DIM];
00185 double xq[VAPBS_DIM];
00186 double U[MAXV];
00187 double dU[MAXV][VAPBS_DIM];
00188 double W;
00189 double dW[VAPBS_DIM];
00190 double d2W;
00191 int sType;
00192 int fType;
00193 double diel;
00194 double kappa2;
00195 double A;
00196 double F;
00197 double B;
00198 double DB;
00199 double jumpDiel;
00200 Vfetk *fetk;
00201 Vgreen *green;
00202 int initGreen;
00204 SS *simp;
00206 VV *verts[4];
00207 int nverts;
00208 double ionConc[MAXION];
00209 double ionQ[MAXION];
00210 double ionRadii[MAXION];
00211 double zkappa2;
00212 double zks2;
00213 double ionstr;
00214 int nion;
00215 double Fu_v;
00216 double DFu_wv;
00217 double delta;
00218 double u_D;
00219 double u_T;
00220 };
00221
00226 typedef struct sVfetk_LocalVar Vfetk_LocalVar;
00227
00228 #if !defined(VINLINE_VFETK)
00229
00235 Gem* Vfetk_getGem(
00236 Vfetk *thee
00237 );
00238
00244 AM* Vfetk_getAM(
00245 Vfetk *thee
00246 );
00247
00253 Vpbe* Vfetk_getVpbe(
00254 Vfetk *thee
00255 );
00256
00262 Vcsm* Vfetk_getVcsm(
00263 Vfetk *thee
00264 );
00265
00274 int Vfetk_getAtomColor(
00275 Vfetk *thee,
00276 int iatom
00277 );
00278
00279 #else
00280 # define Vfetk_getGem(thee) ((thee)->gm)
00281 # define Vfetk_getAM(thee) ((thee)->am)
00282 # define Vfetk_getVpbe(thee) ((thee)->pbe)
00283 # define Vfetk_getVcsm(thee) ((thee)->csm)
00284 # define Vfetk_getAtomColor(thee, iatom) (Vatom_getPartID(Valist_getAtom(Vpbe_getValist(thee->pbe), iatom)))
00285 #endif
00286
00287
00288
00290
00300
00301
00302
00303
00304
00314
00315
00316
00317
00318
00319
00325
00326
00327
00328
00334
00335
00336
00337
00347
00348
00349
00350
00351
00357
00358
00359
00360
00361
00362
00381
00382
00383
00387
00389
00390
00420
00421
00422
00426
00427
00445
00446
00447
00449
00450
00458
00459
00460
00461
00477
00478
00479
00480
00489
00490
00491
00492
00493
00500
00501
00502
00503
00504
00505
00512
00513
00514
00515
00522
00523
00524
00525
00526
00533
00534
00535
00536
00543
00544
00545
00546
00552
00553
00554
00555
00556
00557
00564
00565
00566
00567
00570
00571
00572
00573
00579
00580
00581
00583
00585
00586
00587
00595
00596
00597
00598
00600
00601
00602
00603
00604
00622
00623
00624
00626
00627
00628
00639
00640
00641
00643
00644
00645
00646
00658
00659
00660
00662
00663
00664
00665
00666
00667
00674
00675
00676
00677
00678
00679
00680
00681
00682
00690
00691
00692
00693
00694
00695
00696
00697
00705
00706
00707
00708
00709
00710
00711
00712
00718
00719
00720
00721
00722
00724
00725
00726
00732
00733
00734
00735
00736
00737
00738
00739
00748
00749
00750
00751
00752
00753
00754
00755
00756
00757
00758
00764
00765
00766
00767
00768
00769
00770
00771
00772
00782
00783
00784
00785
00786
00794
00795
00797
00798
00799
00800
00863
00864
00866
00867
00869
00870
00871
00872
00880
00881
00883
00884
00885
00894
00895
00897
00898
00904
00905
00906
00907
00908
00909
00915
00916
00924
00925
00926
00927
00928
00929
00944
00945
00946
00948
00950
00951
00952
00953
00954
00955
00956
00957
00958