~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/bin/oeprop/print_grid.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2006-09-10 14:01:33 UTC
  • Revision ID: james.westby@ubuntu.com-20060910140133-ib2j86trekykfsfv
Tags: upstream-3.2.3
ImportĀ upstreamĀ versionĀ 3.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#define EXTERN
 
2
#include "includes.h"
 
3
#include "prototypes.h"
 
4
#include "globals.h"
 
5
 
 
6
static void print_2d_summary();
 
7
static void print_3d_summary();
 
8
static void print_grid_plotmtv();
 
9
static void print_grid_megapovray();
 
10
static void create_megapovray_file();
 
11
static void print_grid_gausscube();
 
12
static FILE* grid_file;
 
13
 
 
14
void print_grid()
 
15
{
 
16
  if (!strcmp(grid_format,"MEGAPOVPLUS"))
 
17
    print_grid_megapovray();
 
18
  else if (!strcmp(grid_format,"PLOTMTV"))
 
19
    print_grid_plotmtv();
 
20
  else if (!strcmp(grid_format,"GAUSSCUBE"))
 
21
    print_grid_gausscube();
 
22
 
 
23
  return;
 
24
}
 
25
 
 
26
void print_2d_summary()
 
27
{
 
28
  fprintf(outfile," --------------------------------------------------------------\n");
 
29
  fprintf(outfile,"    *** Evaluating properties over a rectangular 2D grid ***\n");
 
30
  fprintf(outfile," --------------------------------------------------------------\n\n");
 
31
  fprintf(outfile," -Coordinates of the lower left, lower right, and upper left corners of\n");
 
32
  fprintf(outfile,"  the grid rectangle (a.u.):\n");
 
33
  fprintf(outfile,"    **            x");
 
34
  fprintf(outfile,"                     y                     z\n");
 
35
  fprintf(outfile,"   ----  --------------------");
 
36
  fprintf(outfile,"  --------------------  --------------------\n");
 
37
  fprintf(outfile,"    LL   %20.10lf  %20.10lf  %20.10lf\n",
 
38
          grid_origin[0],grid_origin[1],grid_origin[2]);
 
39
  fprintf(outfile,"    LR   %20.10lf  %20.10lf  %20.10lf\n",
 
40
          grid_origin[0]+grid_step_x[0]*nix,
 
41
          grid_origin[1]+grid_step_x[1]*nix,
 
42
          grid_origin[2]+grid_step_x[2]*nix);
 
43
  fprintf(outfile,"    UL   %20.10lf  %20.10lf  %20.10lf\n\n\n",
 
44
          grid_origin[0]+grid_step_y[0]*niy,
 
45
          grid_origin[1]+grid_step_y[1]*niy,
 
46
          grid_origin[2]+grid_step_y[2]*niy);
 
47
}
 
48
 
 
49
void print_3d_summary()
 
50
{
 
51
  fprintf(outfile," --------------------------------------------------------------\n");
 
52
  fprintf(outfile,"    *** Evaluating properties over a rectangular 3D grid ***\n");
 
53
  fprintf(outfile," --------------------------------------------------------------\n\n");
 
54
  fprintf(outfile," -Coordinates of the lower left and upper right corners of\n");
 
55
  fprintf(outfile,"  the grid box (a.u.):\n");
 
56
  fprintf(outfile,"    **            x");
 
57
  fprintf(outfile,"                     y                     z\n");
 
58
  fprintf(outfile,"   ----  --------------------");
 
59
  fprintf(outfile,"  --------------------  --------------------\n");
 
60
  fprintf(outfile,"    LL   %20.10lf  %20.10lf  %20.10lf\n",
 
61
          grid_origin[0],grid_origin[1],grid_origin[2]);
 
62
  fprintf(outfile,"    UR   %20.10lf  %20.10lf  %20.10lf\n",
 
63
          grid_origin[0]+grid_step_x[0]*nix+grid_step_y[0]*niy+grid_step_z[0]*niz,
 
64
          grid_origin[1]+grid_step_x[1]*nix+grid_step_y[1]*niy+grid_step_z[1]*niz,
 
65
          grid_origin[2]+grid_step_x[2]*nix+grid_step_y[2]*niy+grid_step_z[2]*niz);
 
66
}
 
67
 
 
68
void print_grid_plotmtv()
 
69
{
 
70
  int i,j,k;
 
71
  double step_x, step_y, x, y;
 
72
 
 
73
  print_2d_summary();
 
74
  
 
75
  switch (grid) {
 
76
    case 1:
 
77
      grid_file = fopen("esp.dat","w");
 
78
      break;
 
79
 
 
80
    case 2:
 
81
      if (!spin_prop)
 
82
        grid_file = fopen("edens.dat","w");
 
83
      else
 
84
        grid_file = fopen("sdens.dat","w");
 
85
      break;
 
86
    
 
87
    case 3:
 
88
      if (!spin_prop)
 
89
        grid_file = fopen("edgrad.dat","w");
 
90
      else
 
91
        grid_file = fopen("sdgrad.dat","w");
 
92
      break;
 
93
 
 
94
    case 4:
 
95
      if (!spin_prop)
 
96
        grid_file = fopen("edlapl.dat","w");
 
97
      else
 
98
        grid_file = fopen("sdlapl.dat","w");
 
99
      break;
 
100
 
 
101
  }
 
102
 
 
103
/*    fprintf(grid_file,"%8.4lf %d %8.4lf  %8.4lf %d %8.4lf  %8.4lf %d %8.4lf\n",
 
104
            grid_xyz0[0],nix,grid_xyz1[0],
 
105
            grid_xyz0[1],niy,grid_xyz1[1],
 
106
            grid_xyz0[2],niz,grid_xyz1[2]); */
 
107
  switch (grid) {
 
108
    case 1:
 
109
    case 2:
 
110
    case 4:
 
111
      fprintf(grid_file,"$DATA = CONTOUR\n");
 
112
      fprintf(grid_file,"%% xmin = %lf xmax = %lf nx = %d\n",grid_xy0[0],grid_xy1[0],nix+1);
 
113
      fprintf(grid_file,"%% ymin = %lf ymax = %lf ny = %d\n",grid_xy0[1],grid_xy1[1],niy+1);
 
114
      fprintf(grid_file,"%% zmin = %lf zmax = %lf\n",grid_zmin,grid_zmax);
 
115
      fprintf(grid_file,"%% contfill = T meshplot = T\n");
 
116
      for(i=0;i<=niy;i++) {
 
117
        for(j=0;j<=nix;j++)
 
118
          if (grid_pts[j][i] < grid_zmin)
 
119
            fprintf(grid_file," %lf ",grid_zmin);
 
120
          else
 
121
            if (grid_pts[j][i] > grid_zmax)
 
122
              fprintf(grid_file," %lf ",grid_zmax);
 
123
            else
 
124
              fprintf(grid_file," %lf ",grid_pts[j][i]);
 
125
        fprintf(grid_file,"\n");
 
126
      }
 
127
      break; 
 
128
      
 
129
    case 3:
 
130
      fprintf(grid_file,"$DATA = VECTOR\n");
 
131
      fprintf(grid_file,"%% xmin = %lf xmax = %lf\n",grid_xy0[0],grid_xy1[0]);
 
132
      fprintf(grid_file,"%% ymin = %lf ymax = %lf\n",grid_xy0[1],grid_xy1[1]);
 
133
      fprintf(grid_file,"%% zmin = %lf zmax = %lf\n",0.0,0.0);
 
134
      fprintf(grid_file,"%% linecolor = 3\n");
 
135
      fprintf(grid_file,"%% xlog = off vscale = 0.2\n\n");
 
136
      step_x = (grid_xy1[0]-grid_xy0[0])/nix;
 
137
      step_y = (grid_xy1[1]-grid_xy0[1])/niy;
 
138
      for(i=0;i<=nix;i++) {
 
139
        x = grid_xy0[0] + step_x*i;
 
140
        for(j=0;j<=niy;j++) {
 
141
        y = grid_xy0[1] + step_y*j;
 
142
        if (fabs(grid_pts[i][j]) <= MAXDENSGRAD)
 
143
          fprintf(grid_file,"%9.5lf  %9.5lf  %9.5lf  %12.8lf  %12.8lf  %12.8lf\n",x,y,0.0,
 
144
                  grid_vecX[i][j],grid_vecY[i][j],0.0);
 
145
        }
 
146
      }
 
147
      break;
 
148
  }
 
149
      
 
150
  fprintf(grid_file,"$END\n");
 
151
  fclose(grid_file);
 
152
}
 
153
 
 
154
 
 
155
void print_grid_megapovray()
 
156
{
 
157
  int i,j,k;
 
158
  double step_x, step_y, step_z, x, y, z;
 
159
 
 
160
  print_3d_summary();
 
161
 
 
162
  /*--- Write out a data file ---*/
 
163
  switch (grid) {
 
164
  case 5:
 
165
  case 6:
 
166
      grid_file = fopen("mo.dat","w");
 
167
      break;
 
168
  }
 
169
 
 
170
  switch (grid) {
 
171
  case 5:
 
172
  case 6:
 
173
    for(k=0;k<=niz;k++)
 
174
      for(j=0;j<=niy;j++)
 
175
        for(i=0;i<=nix;i++) {
 
176
          fprintf(grid_file,"%15.8lf\n",grid3d_pts[0][i][j][k]);
 
177
        }
 
178
      break;
 
179
  }
 
180
 
 
181
  fclose(grid_file);
 
182
 
 
183
  /*--- Write out a command file ---*/
 
184
  create_megapovray_file();
 
185
  
 
186
  return;
 
187
}
 
188
 
 
189
 
 
190
void create_megapovray_file()
 
191
{
 
192
  int i, j, z;
 
193
  double radius, midx, midy, midz;
 
194
  double camera_distance, frame_width, frame_height, frame_center[3];
 
195
  double dimx, dimy, dimz, maxdim;
 
196
  double **grid_geom, **Rgrid;
 
197
  FILE *mpvfile;
 
198
#include <rgb.h>
 
199
 
 
200
  dimx = grid_xyz1[0] - grid_xyz0[0];
 
201
  dimy = grid_xyz1[1] - grid_xyz0[1];
 
202
  dimz = grid_xyz1[2] - grid_xyz0[2];
 
203
#define MAX(x,y) (((x) > (y)) ? (x) : (y))
 
204
  maxdim = MAX(dimz,MAX(dimx,dimy));
 
205
  frame_width = maxdim + 2.0;
 
206
  frame_height = maxdim + 2.0;
 
207
  frame_center[0] = grid_origin[0] + 0.5*dimx;
 
208
  frame_center[1] = grid_origin[1] + 0.5*dimy;
 
209
  frame_center[2] = grid_origin[2] + 0.5*dimz;
 
210
  camera_distance = 3.0*frame_height;
 
211
 
 
212
  /* compute atomic coordinates in the grid coordinate system,
 
213
     since MegaPov simply assumes a simple XYZ grid */
 
214
  grid_geom = block_matrix(natom,3);
 
215
  Rgrid = block_matrix(3,3);
 
216
  for(i=0; i<3; i++) {
 
217
    Rgrid[i][0] = grid_unit_x[i];
 
218
    Rgrid[i][1] = grid_unit_y[i];
 
219
    Rgrid[i][2] = grid_unit_z[i];
 
220
  }
 
221
  mmult(geom,0,Rgrid,0,grid_geom,0,natom,3,3,0);
 
222
  free_block(Rgrid);
 
223
    
 
224
  compute_connectivity();
 
225
 
 
226
  mpvfile = fopen("mo.pov","w");
 
227
  fprintf(mpvfile,"// File: mo.pov\n");
 
228
  fprintf(mpvfile,"// Creator: oeprop (Psi 3.2)\n");
 
229
  fprintf(mpvfile,"// Version: MegaPov 0.5\n\n");
 
230
 
 
231
  fprintf(mpvfile,"#version unofficial MegaPov 0.5;\n\n");
 
232
 
 
233
  fprintf(mpvfile,"// Camera\n");
 
234
  fprintf(mpvfile,"camera {\n");
 
235
  fprintf(mpvfile,"    orthographic\n");
 
236
  fprintf(mpvfile,"    location <%lf, %lf, %lf>\n",
 
237
          camera_distance,frame_center[1],frame_center[2]);  
 
238
  fprintf(mpvfile,"    look_at <%lf, %lf, %lf>\n",
 
239
          frame_center[0],frame_center[1],frame_center[2]);
 
240
  fprintf(mpvfile,"    up <%lf, %lf, %lf>\n",
 
241
          frame_center[0],frame_center[1],frame_center[2]+frame_height);
 
242
  fprintf(mpvfile,"    right <%lf, %lf, %lf>\n",
 
243
          frame_center[0],frame_center[1]+frame_width,frame_center[2]);
 
244
  fprintf(mpvfile,"}\n\n");
 
245
 
 
246
  fprintf(mpvfile,"// Light\n");
 
247
  fprintf(mpvfile,"light_source {<%lf, %lf, %lf> color rgb <1.0, 1.0, 1.0>}\n\n",
 
248
          camera_distance*10.0,camera_distance*(-10.0),camera_distance*(-10.0));
 
249
 
 
250
  fprintf(mpvfile,"// Background\n");
 
251
  fprintf(mpvfile,"background { color rgb <1.0, 1.0, 1.0>}\n\n");
 
252
 
 
253
  fprintf(mpvfile,"union {\n");
 
254
  fprintf(mpvfile,"// Objects\n");
 
255
  fprintf(mpvfile,"  // union finish\n");
 
256
  fprintf(mpvfile,"  #declare F = finish {specular 0.4 roughness 0.005 diffuse 0.8 ambient 0.2}\n");
 
257
  fprintf(mpvfile,"  // transparency of atomic surfaces \n");
 
258
  fprintf(mpvfile,"  #declare T = 0;\n");
 
259
  fprintf(mpvfile,"  // no_shadow\n");
 
260
  fprintf(mpvfile,"  // hollow\n\n");
 
261
  
 
262
  fprintf(mpvfile,"  // Atoms\n");
 
263
  for(i=0;i<natom;i++) {
 
264
    z = (int)zvals[i];
 
265
    fprintf(mpvfile,"  // Atom # %d, charge %d\n",i,z);
 
266
    fprintf(mpvfile,"  object {\n");
 
267
    fprintf(mpvfile,"    sphere { < %lf, %lf, %lf > ",grid_geom[i][0],grid_geom[i][1],grid_geom[i][2]);
 
268
    if (z <= 2)
 
269
      radius = 0.4;
 
270
    else if (z <= 10)
 
271
      radius = 0.5;
 
272
    else
 
273
      radius = 0.6;
 
274
    fprintf(mpvfile,"%lf }\n",radius);
 
275
    fprintf(mpvfile,"     texture {\n");
 
276
    if (z <= LAST_RGB_INDEX)
 
277
      fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[z][0],atomic_rgb[z][1],atomic_rgb[z][2]);
 
278
    else
 
279
      fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[0][0],atomic_rgb[0][1],atomic_rgb[0][2]);
 
280
    fprintf(mpvfile,"       finish {F}\n");
 
281
    fprintf(mpvfile,"     }\n");
 
282
    fprintf(mpvfile,"  }\n");
 
283
  }
 
284
  fprintf(mpvfile,"\n");
 
285
 
 
286
  fprintf(mpvfile,"  // Bonds\n");
 
287
  for(i=0;i<natom;i++)
 
288
    for(j=0;j<i;j++)
 
289
      if (connectivity[i][j]) {
 
290
        fprintf(mpvfile,"  // Bond between atoms %d and %d\n",i,j);
 
291
        midx = 0.5*(grid_geom[i][0] + grid_geom[j][0]);
 
292
        midy = 0.5*(grid_geom[i][1] + grid_geom[j][1]);
 
293
        midz = 0.5*(grid_geom[i][2] + grid_geom[j][2]);
 
294
        fprintf(mpvfile,"  object {\n");
 
295
        fprintf(mpvfile,"    cylinder { < %lf, %lf, %lf > < %lf, %lf, %lf > 0.15 }\n",
 
296
                grid_geom[i][0],grid_geom[i][1],grid_geom[i][2],
 
297
                midx,midy,midz);
 
298
        fprintf(mpvfile,"     texture {\n");
 
299
        z = (int) zvals[i];
 
300
        if (z <= LAST_RGB_INDEX)
 
301
            fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[z][0],atomic_rgb[z][1],atomic_rgb[z][2]);
 
302
        else
 
303
            fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[0][0],atomic_rgb[0][1],atomic_rgb[0][2]);
 
304
        fprintf(mpvfile,"       finish {F}\n");
 
305
        fprintf(mpvfile,"     }\n");
 
306
        fprintf(mpvfile,"  }\n");
 
307
        fprintf(mpvfile,"  object {\n");
 
308
        fprintf(mpvfile,"    cylinder { < %lf, %lf, %lf > < %lf, %lf, %lf > 0.15 }\n",
 
309
                grid_geom[j][0],grid_geom[j][1],grid_geom[j][2],
 
310
                midx,midy,midz);
 
311
        fprintf(mpvfile,"     texture {\n");
 
312
        z = (int) zvals[j];
 
313
        if (z <= LAST_RGB_INDEX)
 
314
            fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[z][0],atomic_rgb[z][1],atomic_rgb[z][2]);
 
315
        else
 
316
            fprintf(mpvfile,"       pigment {color rgbt <%lf, %lf, %lf, T>}\n",atomic_rgb[0][0],atomic_rgb[0][1],atomic_rgb[0][2]);
 
317
        fprintf(mpvfile,"       finish {F}\n");
 
318
        fprintf(mpvfile,"     }\n");
 
319
        fprintf(mpvfile,"  }\n");
 
320
      }
 
321
  
 
322
  fprintf(mpvfile,"  #declare ISO = 1;\n");
 
323
  fprintf(mpvfile,"  #declare NX = %d;\n",nix);
 
324
  fprintf(mpvfile,"  #declare NY = %d;\n",niy);
 
325
  fprintf(mpvfile,"  #declare NZ = %d;\n",niz);
 
326
  fprintf(mpvfile,"  #declare RX = %lf;\n",grid_origin[0]);
 
327
  fprintf(mpvfile,"  #declare RY = %lf;\n",grid_origin[1]);
 
328
  fprintf(mpvfile,"  #declare RZ = %lf;\n",grid_origin[2]);
 
329
  fprintf(mpvfile,"  #declare LX = %lf;\n",grid_xyz1[0] - grid_xyz0[0]);
 
330
  fprintf(mpvfile,"  #declare LY = %lf;\n",grid_xyz1[1] - grid_xyz0[1]);
 
331
  fprintf(mpvfile,"  #declare LZ = %lf;\n",grid_xyz1[2] - grid_xyz0[2]);
 
332
  fprintf(mpvfile,"  #declare LEVSCALE = 11;\n\n");
 
333
 
 
334
  fprintf(mpvfile,"  #ifdef (ISO)\n");
 
335
  fprintf(mpvfile,"  #declare wfun1 = function {\"data_3D_3\",\n");
 
336
  fprintf(mpvfile,"     <-LEVSCALE>, library \"i_dat3d\",  \"mo.dat\", <NX+1,NY+1,NZ+1,0>}\n");
 
337
  fprintf(mpvfile,"  #declare wfun2 = function {\"data_3D_3\",\n");
 
338
  fprintf(mpvfile,"      <LEVSCALE>, library \"i_dat3d\",  \"mo.dat\", <NX+1,NY+1,NZ+1,0>}\n");
 
339
  fprintf(mpvfile,"  union {\n");
 
340
  fprintf(mpvfile,"    isosurface {\n");
 
341
  fprintf(mpvfile,"      function {wfun1}\n");
 
342
  fprintf(mpvfile,"      contained_by { box {<0,0,0>,<NX,NY,NZ>} }\n");
 
343
  fprintf(mpvfile,"      threshold -1\n");
 
344
  fprintf(mpvfile,"      max_gradient 1.000\n");
 
345
  fprintf(mpvfile,"      eval\n");
 
346
  fprintf(mpvfile,"      texture { pigment { color rgbt <1.0,0.0,0.0,0.8> } }\n");
 
347
  fprintf(mpvfile,"    }\n");
 
348
  fprintf(mpvfile,"    isosurface {\n");
 
349
  fprintf(mpvfile,"      function {wfun2}\n");
 
350
  fprintf(mpvfile,"      contained_by { box {<0,0,0>,<NX,NY,NZ>} }\n");
 
351
  fprintf(mpvfile,"      threshold -1\n");
 
352
  fprintf(mpvfile,"      max_gradient 1.000\n");
 
353
  fprintf(mpvfile,"      eval\n");
 
354
  fprintf(mpvfile,"      texture { pigment { color rgbt <0.0,1.0,0.0,0.8> } }\n");
 
355
  fprintf(mpvfile,"    }\n");
 
356
  fprintf(mpvfile,"    translate <RX*NX/LX,RY*NY/LY,RZ*NZ/LZ>\n");
 
357
  fprintf(mpvfile,"    scale <LX/NX,LY/NY,LZ/NZ>\n");
 
358
  fprintf(mpvfile,"  }\n");
 
359
  fprintf(mpvfile,"  #end\n\n");
 
360
  
 
361
  fprintf(mpvfile,"  // Rotate\n");
 
362
  fprintf(mpvfile,"  rotate 0*z\n");
 
363
  fprintf(mpvfile,"}\n");
 
364
 
 
365
  fclose(mpvfile);
 
366
 
 
367
  free_block(grid_geom);
 
368
 
 
369
  return;
 
370
}
 
371
 
 
372
 
 
373
void print_grid_gausscube()
 
374
{
 
375
  int i,j,k;
 
376
  int atom, mo;
 
377
  int n_per_line;
 
378
  double step_x, step_y, step_z, x, y, z;
 
379
 
 
380
  print_3d_summary();
 
381
 
 
382
  /* file name */
 
383
  switch (grid) {
 
384
  case 5:
 
385
      grid_file = fopen("mo.cube","w");
 
386
      break;
 
387
  case 6:
 
388
      grid_file = fopen("dens.cube","w");
 
389
      break;
 
390
  }
 
391
 
 
392
  /*------------------------------------------------------------------------
 
393
    Gaussian Cube standard overhead as described in G94 programmer's manual
 
394
   ------------------------------------------------------------------------*/
 
395
  /* Comment and subcomment */
 
396
  fprintf(grid_file,"Gaussian Cube file created by OEPROP (Psi 3.2)\n");
 
397
  fprintf(grid_file,"Calculation title: %s\n",title);
 
398
  if (grid == 5)
 
399
    fprintf(grid_file,"%5d",-1*natom);
 
400
  else if (grid == 6)
 
401
    fprintf(grid_file,"%5d",natom);
 
402
  fprintf(grid_file,"%12.6lf%12.6lf%12.6lf\n", grid_origin[0], grid_origin[1], grid_origin[2]);
 
403
  fprintf(grid_file,"%5d%12.6lf%12.6lf%12.6lf\n", nix+1, grid_step_x[0], grid_step_x[1], grid_step_x[2]);
 
404
  fprintf(grid_file,"%5d%12.6lf%12.6lf%12.6lf\n", niy+1, grid_step_y[0], grid_step_y[1], grid_step_y[2]);
 
405
  fprintf(grid_file,"%5d%12.6lf%12.6lf%12.6lf\n", niz+1, grid_step_z[0], grid_step_z[1], grid_step_z[2]);
 
406
  for(atom=0;atom<natom;atom++) {
 
407
    fprintf(grid_file,"%5d%12.6lf%12.6lf%12.6lf%12.6lf\n", (int)zvals[atom], zvals[atom],
 
408
            geom[atom][0], geom[atom][1], geom[atom][2]);
 
409
  }
 
410
  if (grid == 5) {
 
411
    fprintf(grid_file,"%5d",num_mos_to_plot);
 
412
    for(mo=0;mo<num_mos_to_plot;mo++)
 
413
      fprintf(grid_file,"%5d",mos_to_plot[mo]);
 
414
    fprintf(grid_file,"\n");
 
415
  }
 
416
 
 
417
  switch (grid) {
 
418
  case 5:
 
419
    for(i=0;i<=nix;i++)
 
420
      for(j=0;j<=niy;j++) {
 
421
        n_per_line = 0;
 
422
        for(k=0;k<=niz;k++)
 
423
          for(mo=0;mo<num_mos_to_plot;mo++) {
 
424
            fprintf(grid_file,"%13.5E",grid3d_pts[mo][i][j][k]);
 
425
            n_per_line++;
 
426
            if (n_per_line == 6) {
 
427
              fprintf(grid_file,"\n");
 
428
              n_per_line = 0;
 
429
            }
 
430
          }
 
431
        if (n_per_line != 0)
 
432
          fprintf(grid_file,"\n");
 
433
      }
 
434
    break;
 
435
 
 
436
  case 6:
 
437
    for(i=0;i<=nix;i++)
 
438
      for(j=0;j<=niy;j++) {
 
439
        n_per_line = 0;
 
440
        for(k=0;k<=niz;k++) {
 
441
          fprintf(grid_file,"%13.5E",grid3d_pts[0][i][j][k]);
 
442
          n_per_line++;
 
443
          if (n_per_line == 6) {
 
444
            fprintf(grid_file,"\n");
 
445
            n_per_line = 0;
 
446
          }
 
447
        }
 
448
        if (n_per_line != 0)
 
449
          fprintf(grid_file,"\n");
 
450
      }
 
451
    break;
 
452
  }
 
453
 
 
454
  fclose(grid_file);
 
455
 
 
456
  return;
 
457
}