/* Copyright (C) 2003 by Sean David Fleming sean@ivec.org 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. The GNU GPL can also be found at http://www.gnu.org */ #define JJM_DEBUG #define VERSION 0.89 #define PATCH 0 /********************************************/ /*** Debugging switches ****/ /********************************************/ /*** Molecular surface debugging ***/ #define DEBUG_MOLSURF 1 #if DEBUG_MOLSURF #define DEBUG_CREATE_TRIANGLES 1 #define DEBUG_MS_CUBE 1 #endif /***Hirshfeld surface debugging ***/ #define DEBUG_HIRSHFELD 1 #if DEBUG_HIRSHFELD #define DEBUG_DE 1 #define DEBUG_SHAPE 1 #define DEBUG_HFS_NORMALS 1 #define DEBUG_HFS_CALC_ENV 1 #endif /**** end debugging switches ***/ #define MAX_ELEMENTS 110 #define MAX_TOKENS 100 #define MAX_DISPLAYED 9 #define MAX_MODELS 14 #define ELEM_LABEL_SIZE 7 #define LABEL_SIZE 7 #define TAIL_SIZE 80 #define DEFAULT_NA 30 #define DEFAULT_NL 10 #define DEFAULT_SS 10 #define BOND_FUDGE 0.1 #define RMAX_FUDGE 1.1 #define ROTATE_SCALE 1.0 #define SCALE_MAG 10 #define MESH_POINTS_MIN 2 #define MESH_POINTS_MAX 20 #define MESH_SPACE_MIN 0.1 #define MESH_SPACE_MAX 10.0 /* 1st is roughly (no accounting for latmat) in Angs */ #define POSITION_TOLERANCE 0.01 #define FRACTION_TOLERANCE 0.000001 /* parsing */ #define FILELEN 150 #define LINELEN 300 /* maths */ #define PI 3.1415926535897932384626433832795 #define D2R 0.01745329252 #define R2D 57.295779513 #define AU2ANG 0.529177249 /* fundamental constants, etc (C. Fisher 2004) */ #define ELCHARGE 1.60217733e-19 #define AMU 1.6605402e-27 #define AVOGADRO 6.0221367e23 /* location of data file - TODO - IMPROVE ie rc file/scan etc */ #ifdef __WIN32 #define INIT_FILE "gdis.rc" #else #define INIT_FILE ".gdisrc" #endif #define ELEM_FILE "gdis.elements" #define LIBRARY_FILE "gdis.library" /* #ifdef __WIN32 #define GFONT "-adobe-helvetica-medium-r-normal--*-120-*-*-*-*-*-*" #define DFONT "-adobe-helvetica-medium-r-normal--*-160-*-*-*-*-*-*" #else #endif */ #define GTK_FONT "Sans 10" #define GL_FONT "Sans 14" /* camera placement for POVray */ #define FRAMEZ 2003 /* non-contact molecular surface types */ #define REENTRANT -1 #define HOLE -2 #define VALLEY -3 /* convenience macros */ #define SPIN_FVAL gtk_spin_button_get_value_as_float #define SPIN_IVAL gtk_spin_button_get_value_as_int #define P3VEC(s,v) (printf("%s (%.8lf, %.8lf, %.8lf)\n",s,*v,*(v+1),*(v+2))) #define P4VEC(s,v) (printf("%s (%.8lf, %.8lf, %.8lf, %.8lf)\n",s,*v,*(v+1),*(v+2),*(v+3))) #define P3MAT(s,m) {printf("%s\n|%lf, %lf, %lf|\n|%lf, %lf, %lf|\n|%lf, %lf, %lf|\n",\ s,*m,*(m+1),*(m+2),*(m+3),*(m+4),*(m+5),*(m+6),*(m+7),*(m+8));} #define SUBLINE(pix,gc,sub,x1,y1,x2,y2) (gdk_draw_line(pix, gc, \ x1+sysenv.subcenx[sub], y1+sysenv.subceny[sub], \ x2+sysenv.subcenx[sub], y2+sysenv.subceny[sub])) #define SUBTEXT(pix,gc,sub,x1,y1,text) (gdk_draw_text(pix, sysenv.dfont, gc, \ x1+sysenv.subcenx[sub], y1+sysenv.subceny[sub], \ text, strlen(text))) #define SUBARC(pix,gc,sub,x,y,w,h,a1,a2) (gdk_draw_arc(pix, gc, FALSE,\ x+sysenv.subcenx[sub], y+sysenv.subceny[sub], w, h, a1, a2)) #define FSUBARC(pix,gc,sub,x,y,w,h,a1,a2) (gdk_draw_arc(pix, gc, TRUE,\ x+sysenv.subcenx[sub], y+sysenv.subceny[sub], w, h, a1, a2)) /* linked list loops */ #define FOR_SLIST(item, list) for (item=list ; (item=g_slist_next(item)) ; ) #define FOR_LIST(item, list) for (item=list ; (item=g_list_next(item)) ; ) /* file parsing keyword/option stuff */ enum { E_SINGLE, E_OPTIMIZE, DOCK, FREE_ENERGY, MD, CONP, CONV, MOLE, MOLMEC, MOLQ, NOBUILD, NOFLAGS, NAME, CELL, CART, FRAC, SFRAC, PFRAC, SURFACE_CELL, SURFACE_VECTORS, POLYMER_CELL, POLYMER_VECTOR, LATTICE_VECTORS, SPACE, ORIGIN, SPECIES, MAXCYC, ENERGY, TOTAL_ENERGY, SBULK_ENERGY, GULP_POTENTIAL, GULP_SINGLE_LINE_POTENTIAL, SWITCH_OFF, SWITCH_ON, CYCLE, GNORM, BFGS_OPT, RFO_OPT, CONJ_OPT, UNIT_HESSIAN, TEMPERATURE, PRESSURE, ENSEMBLE, SHRINK, QEQ, ZSISA, COMPARE, NOSYM, FIX, PHONON, EIGEN, SUPER_CELL, NVE, NVT, NPT, ENDFORCE, TIMESTEP, EQUILIBRATION, PRODUCTION, SAMPLE, WRITE, PRINT, /* FIXME - separate out solvation to its own sub-structure */ GULP_SOLVATION_NONE, GULP_SOLVATION_COSMO, GULP_SOLVATION_COSMIC, GULP_COSMO_SHAPE, GULP_COSMO_POINTS, GULP_COSMO_SEGMENTS, GULP_COSMO_SMOOTHING, GULP_COSMO_SOLVENT_EPSILON, GULP_COSMO_SOLVENT_RADIUS, GULP_COSMO_SOLVENT_RMAX, KPOINTS, GULP_LIBRARY, IGNORE, ERONGI, TITLE, END, GULP_OBSERVABLES, TEMP_FILE, DUMP_FILE, LIB_FILE, OUTPUT, NO_ESURF, NO_EATT, D_HKL, KEYWORD, ELEMENT, SYMBOL, NUMBER, LABEL, WEIGHT, COVALENT, IONIC, VDW, CHARGE, COLOUR, GULP_VARIABLES, LABEL_NORMAL, LABEL_GHOST, COORD_X, COORD_Y, COORD_Z, CORE_GROWTH_SLICE, CORE_REGION, CORE_TRANSLATE, CORE_FF, CIF_AUDIT, CIF_CREATION_DATE, CIF_DATA_START, CIF_LOOP_START, CIF_DATABASE_CODE, CIF_CHEMICAL_NAME, CIF_MINERAL_NAME, CIF_CELL_A, CIF_CELL_B, CIF_CELL_C, CIF_CELL_ALPHA, CIF_CELL_BETA, CIF_CELL_GAMMA, CIF_SPACE_NAME, CIF_SPACE_NUM, CIF_REFINE, CIF_ATOM_SITE, CIF_LABEL, CIF_TYPE_SYMBOL, CIF_SOF, CIF_EQUIV_SITE, CIF_EQUIV_POS, CIF_CART_X, CIF_CART_Y, CIF_CART_Z, CIF_FRAC_X, CIF_FRAC_Y, CIF_FRAC_Z, MARVIN_BASIS, MARVIN_COORD, DIPOLE_TOLERANCE, /* Moldy parameters */ CONTROL_FILE, SYSSPEC_FILE, SAVE_FILE, RESTART_FILE, PRINTINT, NDUMPS, DELTAT, STEPS, CUTOFF, ALPHA, KCUTOFF, SCALEINT, SCALEEND, DUMPSTART, DUMPINT, AVSTART, AVINT, ROLLINT, RDFSTART, RDFINT, RDFOUT, RDFLIM, NBINS, BACKINT, BACKFILE, TTMASS, RTMASS, MASSPARM, SUBCELL, ACCURACY, NMOLS, DENSITY, DREIDING, GASTEIGER, /* gdis config file parsing */ GDIS_ELEM_START, GDIS_END }; /* Moldy unit types */ enum { TIME_UNIT, LENGTH_UNIT, MASS_UNIT, CHARGE_UNIT }; /* misc specifiers */ enum {UP, DOWN}; enum {DEFAULT, MODIFIED}; enum {ALL, SINGLE}; enum {APPEND, INSERT, REPLACE}; enum {LOW, MEDIUM, HIGH}; enum {PLANE_XY, PLANE_YZ, PLANE_XZ}; enum {CHECK, CONDENSE}; enum {EXEC_PATH}; enum {SELECTED, ANY}; enum {BY_FILE_ID, BY_EXTENSION, BY_LABEL}; enum {STANDARD, WARNING, ERROR, BOLD, ITALIC}; enum {CARTESIAN, OTHER, ANGSTROM, BOHR, DEGREES, RADIANS}; /* surface types */ enum {SOLSURF, MOLSURF}; /* some colour names */ enum {BLACK, WHITE, RED, GREEN, BLUE, YELLOW, GOLD, ORANGE, SEA_GREEN, AQUAMARINE, NAVY_BLUE, LIGHT_TAN, LEMON, PURPLE}; /* data type specifiers */ enum {MODEL, CORE, BOND, UBOND, HBOND, MOL, SHELL, ELEM, ATOM_LABEL, ATOM_TYPE, ELEM_MOL, FRAGMENT, REGION, GROWTH_SLICE, TRANSLATE, OCCUPANCY, VELOCITY, GEOM, DIST, ANGLE, DIHEDRAL, SELECT, ZEOLITE, RIBBON}; /* coords_init() call modes */ enum { INIT_COORDS, CENT_COORDS, REDO_COORDS, MESH_ON, MESH_OFF, BOX_ON, BOX_OFF, }; /* crystal lattice types */ enum {XS_UNKNOWN, XS_TRICLINIC, XS_MONOCLINIC, XS_ORTHOROMBIC, XS_TETRAGONAL, XS_TRIGONAL, XS_HEXAGONAL, XS_CUBIC}; /* unit cell facets */ enum {A_LO, A_HI, B_LO, B_HI, C_LO, C_HI}; /* general update call modes */ enum {INITIAL, REFRESH, RESTORE, CREATE}; /* atom status flags */ #define NORMAL 1 #define DELETED 2 #define HIDDEN 4 #define SELECT 8 #define PRUNED 16 #define ZEOL_HIDDEN 32 #define OFF_SCREEN 64 /* drawing mode */ enum {DRAW_OFF, DRAW_GDK, DRAW_GL}; /* creator grid */ enum {MESH_POINTS, MESH_SPACING}; /* marvin region types */ enum {REGION1A, REGION2A, REGION1B, REGION2B, NONE}; /* selection modes */ enum {CLEAN, START, UPDATE, STOP, ASSIGN, RECALL, RELEASE}; /*****************/ /* MAIN INCLUDES */ /*****************/ #include #include #include "pak.h" #if GTK_EXTRA #include #endif