00001
00054 #include "apbscfg.h"
00055 #include "apbs/apbs.h"
00056
00057 VEMBED(rcsid="$Id: value.c 1552 2010-02-10 17:46:27Z yhuang01 $")
00058
00059 int usage(int rc) {
00060
00061 char *usage = "\n\n\
00062 ----------------------------------------------------------------------\n\
00063 This driver program reads in data and prints solution information at a\n\
00064 point. It is invoked as:\n\
00065 value <x> <y> <z> <file.dx>\n\n\
00066 where <x>, <y>, and <z> are points and <file.dx> is an OpenDX-format\n\
00067 file.\n\
00068 ----------------------------------------------------------------------\n\n";
00069
00070 Vnm_print(2, usage);
00071
00072 exit(rc);
00073
00074 return 0;
00075 }
00076
00077 int main(int argc, char **argv) {
00078
00079 Vgrid *grid;
00080 int inorm;
00081 char *path;
00082 double pt[3], val, grad[3];
00083
00084
00085 Vio_start();
00086 Vnm_redirect(1);
00087 Vnm_print(1, "\n");
00088 if (argc != 5) {
00089 Vnm_print(2, "Error -- got %d arguments, expected 5.\n", argc);
00090 usage(2);
00091 }
00092 sscanf(argv[1], "%lf", &(pt[0]));
00093 sscanf(argv[2], "%lf", &(pt[1]));
00094 sscanf(argv[3], "%lf", &(pt[2]));
00095 path = argv[4];
00096
00097
00098 Vnm_print(1, "Reading data from %s...\n", path);
00099 grid = Vgrid_ctor(0, 0, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, VNULL);
00100 if (!Vgrid_readDX(grid, "FILE", "ASC", VNULL, path)) {
00101 Vnm_print(2, "main: Problem reading OpenDX-format grid from %s\n",
00102 path);
00103 return 2;
00104 }
00105
00106
00107 Vnm_print(1, "\nData at (%g, %g, %g):\n", pt[0], pt[1], pt[2]);
00108 if (Vgrid_value(grid, pt, &val)) {
00109 Vnm_print(1, "Value = %1.12E kT/e\n", val);
00110 } else Vnm_print(1, "Unable to get value.\n");
00111 if (Vgrid_gradient(grid, pt, grad)) {
00112 Vnm_print(1, "Gradient = (%1.12E, %1.12E, %1.12E) kT/e/A\n",
00113 grad[0], grad[1], grad[2]);
00114 } else Vnm_print(1, "Unable to get gradient.\n");
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130 Vnm_print(1, "\n");
00131 return 0;
00132
00133 }