Allow for "computational electrophysiology" simulations (CompEl)
[alexxy/gromacs.git] / src / gromacs / legacyheaders / types / state.h
index f9bcc886ffc7c0d28e084953879007387128f5f6..4acee9803b909397aedfa4473736ee6f060c011f 100644 (file)
@@ -176,6 +176,42 @@ typedef struct
 }
 edsamstate_t;
 
+
+typedef struct
+{
+    int        eSwapCoords;                         /* Swapping along x, y, or z-direction?      */
+    int        nat_req[eCompNR][eIonNR];            /* Requested ion numbers per type an comp.   */
+    int       *nat_req_p[eCompNR][eIonNR];          /* Pointer to this data (for .cpt writing)   */
+    int        nAverage;                            /* Use average over this many swap attempt
+                                                       steps when determining the ion counts     */
+    int        inflow_netto[eCompNR][eIonNR];       /* Flux determined from the # of swaps       */
+    int       *inflow_netto_p[eCompNR][eIonNR];     /* Pointer to this data                      */
+    int       *nat_past[eCompNR][eIonNR];           /* Array with nAverage entries for history   */
+    int       *nat_past_p[eCompNR][eIonNR];         /* Pointer points to the first entry only    */
+
+    /* Channel flux detection, this is counting only and has no influence on whether swaps
+     * are performed or not: */
+    int            fluxfromAtoB[eCompNR][eIonNR];   /* Flux determined from the split cylinders  */
+    int           *fluxfromAtoB_p[eCompNR][eIonNR]; /* Pointer to this data                      */
+    int           *fluxleak;                        /* Flux not going through any channel        */
+    int            nions;                           /* Size of the following arrays              */
+    unsigned char *comp_from;                       /* Ion came from which compartment?          */
+    unsigned char *channel_label;                   /* Through which channel did this ion pass?  */
+
+    /* To also make multimeric channel proteins whole, we save the last whole configuration of
+     * the channels in the checkpoint file. If we have no checkpoint file, we assume that the
+     * starting configuration hast the correct PBC representation after making the individual
+     * molecules whole */
+    gmx_bool    bFromCpt;                           /* Did we started from a checkpoint file?    */
+    int         nat[eChanNR];                       /* Size of xc_old_whole, i.e. the number of
+                                                       atoms in each channel                     */
+    rvec       *xc_old_whole[eChanNR];              /* Last known whole positions of the two
+                                                       channels (important for multimeric ch.!)  */
+    rvec      **xc_old_whole_p[eChanNR];            /* Pointer to these positions                */
+}
+swapstate_t;
+
+
 typedef struct
 {
     int              natoms;
@@ -218,6 +254,7 @@ typedef struct
     ekinstate_t      ekinstate;       /* The state of the kinetic energy data      */
 
     energyhistory_t  enerhist;        /* Energy history for statistics           */
+    swapstate_t      swapstate;       /* Position swapping                       */
     df_history_t     dfhist;          /*Free energy history for free energy analysis  */
     edsamstate_t     edsamstate;      /* Essential dynamics / flooding history */