--- /dev/null
+/*
+ * nlsop.c
+ *
+ * this program tries helping to understand the amorphous depuration
+ * and recrystallization of SiCx while ion implanation. hopefully the program
+ * will simulate the stabilization of the selforganizing structure in the
+ * observed behaviour.
+ *
+ * refs:
+ * - J. K. N. Lindner. Habilationsschrift, Universitaet Augsburg.
+ * - Maik Haeberlen. Diplomarbeit, Universitaet Augsburg.
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "nlsop.h"
+
+#include "dfbapi.h"
+#include "random.h"
+
+#define MAKE_AMORPH(N) *(N)|=AMORPH
+#define MAKE_CRYST(N) *(N)&=~AMORPH
+
+int usage(void)
+{
+ puts("usage:");
+ puts("-h \t\t help");
+ puts("-n \t\t no user interaction");
+ printf("-a <value> \t slope of nuclear energy loss (default %d)\n",A_EL);
+ printf("-b <value> \t nuclear energy loss offset (default %d)\n",B_EL);
+ printf("-x <value> \t # x cells (default %d)\n",X);
+ printf("-y <value> \t # x cells (default %d)\n",Y);
+ printf("-z <value> \t # x cells (default %d)\n",Z);
+ printf("-X <value> \t display x (default %d)\n",X/2-1);
+ printf("-Y <value> \t display y (default %d)\n",Y/2-1);
+ printf("-Z <value> \t display z (default %d)\n",Z/2-1);
+ printf("-s <value> \t steps (default %d)\n",STEPS);
+ printf("-d <value> \t refresh display (default %d)\n",REFRESH);
+ printf("-r <value> \t amorphous influence range (default %d)\n",RANGE);
+ printf("-f <value> \t pressure = <value> * 1/distance^2 (default %f)\n",A_AP);
+ printf("-p <value> \t pressure offset (default %f)\n",B_AP);
+ printf("-A <value> \t slope of linear c distribution (default %f)\n",A_CD);
+ printf("-B <value> \t linear c distribution offset (default %f)\n",B_CD);
+ printf("-C <value> \t initial c concentration (default %d)\n",CC);
+ puts("-L <file> \t load from file");
+ puts("-S <file> \t save to file");
+ puts("-R <file> \t read from random file");
+
+ return 1;
+}
+
+int process_cell(3d_lattice *3d_l,u32 x,u32 y,u32 z,int r,double a,double b,int *t_c)
+{
+ unsigned char *thiz;
+ int *conc;
+ int i,j;
+ double p;
+
+ thiz=3d_l->status+x+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y;
+ conc=3d_l->extra+x+y*d3_l->max_x+z*d3_l->max_x*d3_l->max_y;
+ p=b*URAND_MAX;
+ for(i=-r;i<=r;i++)
+ {
+ for(j=-r;j<=r;j++)
+ {
+ if(!(i==0 && j==0))
+ {
+ if(*(d3_l->status+((x+d3_l->max_x+i)%d3_l->max_x)+((y+d3_l->max_y+j)%d3_l->max_x)*d3_l->max_x+z*d3_l->max_x*d3_l->max_y)&AMORPH) p+=a*URAND_MAX/(i*i+j*j);
+ }
+ }
+ }
+ p*=*conc;
+ if(!(*thiz&AMORPH))
+ {
+ if(rand_get(URAND_MAX)<=p)
+ {
+ MAKE_AMORPH(thiz);
+ *t_c=*t_c+1-*conc;
+ } else *t_c+=1;
+ } else
+ {
+ /* assume 1-p probability */
+ if(rand_get(URAND_MAX)>p)
+ {
+ MAKE_CRYST(thiz);
+ *t_c=*t_c+1+*conc;
+ } else *t_c+=1;
+ }
+
+ return 1;
+}
+
+int distrib_c(3d_lattice *3d_l,int t_c,double a,double b)
+{
+ int i,j,total,area;
+
+ for(i=0;i<d3_l->max_z;i++)
+ {
+
+ }
+
+ return 1;
+}