#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "header.h"
#define MYIO_C

/*
 * functions in this file are related to output.
 * plot_...-functions print out files in gnuplot format.
 * and create_pdf is used in these functions to
 * process the gnuplot files into pdf-format and remove all temporary files.
 * */

void write_phi(char *outdouble *dataint Xint Y){
        FILE *file;
        int xyix;
        file=fopen(out"w");
        for(x=0x<Xx++){
                for(y=0y<Yy++){
                        ix=x*X+y;
                        fprintf(file"%3d %3d %3d % .16e\n"xyixdata[ix]);
                }
        }
        fclose(file);
}

void print_phi(double *dataint Xint Y){
        int xy;
        for(y=0y<Yy++){
                for(x=0x<Xx++){
                        printf"%d %d % .2e\t"xydata[y*X+x]);
                }
                printf("\n");
        }
        printf("\n");
        fflush(stdout);
}


void create_pdf(char *outdirchar *plot){
        FILE *file;
        char *output;
        output=malloc(1000*sizeof(char));
        sprintf(output"%s/plot.sh"outdir);
        check_file(output"w");
        file=fopen(output"w");
        fprintf(file"#!/bin/bash\n");
        fprintf(file"cd %s\n"outdir);
        fprintf(file"gnuplot %s.gp\n"plot);
        fprintf(file"latex %s.tex\n"plot);
        fprintf(file"dvipdf %s.dvi\n"plot);
        fprintf(file"rm %s.gp\n"plot);
        fprintf(file"rm %s.tex\n"plot);
        fprintf(file"rm %s.dvi\n"plot);
        fprintf(file"rm %s.aux\n"plot);
        fprintf(file"rm %s-inc.eps\n"plot);
        fprintf(file"rm %s.log\n"plot);
        fclose(file);

        sprintf(output"sh %s/plot.sh\n"outdir);
        system(output);
        sprintf(output"rm %s/plot.sh\n"outdir);
        system(output);
        free(output);
}

void plot_data_color(char *outdirchar *plotchar *titlechar *xlabelchar *ylabel,
                double *rangeint Xint Yint npiplotinfo *pi){
        FILE *file;
        char *out;
        int iL;
        double xcmycm;
        if(X>Y)
                L=X;
        else
                L=Y;
        xcm=14*(double)X/L;
        ycm=14*(double)Y/L;

        out=malloc(1000*sizeof(char));
        sprintf(out"%s/%s.gp"outdirplot);
        check_file(out"w");
        file=fopen(out"w");
        fprintf(file"reset\n");
        fprintf(file"set term epslatex standalone color size %fcm,%fcm solid\n"xcmycm);
        fprintf(file"set out sprintf(\'%s/%s.tex\')\n"outdirplot);
        for(i=0i<npii++)
                fprintf(file"data%d = sprintf(\'%s/%s\')\n"ioutdirpi[i].data);

        fprintf(file"unset key\n");
        fprintf(file"set title \'%s\'\n"title);
        fprintf(file"set pm3d map\n");
        fprintf(file"set samples %d; set isosamples %d\n"X*YX*Y);
        fprintf(file"set ytics out\n");
        fprintf(file"set xtics out rotate by -90\n");
        fprintf(file"set xlabel \'%s\'\n"xlabel);
        fprintf(file"set ylabel \'%s\' offset +1.5\n"ylabel);

        if(range[0]<range[1])
                fprintf(file"set xrange[%f:%f]\n"range[0], range[1]);
        if(range[2]<range[3])
                fprintf(file"set yrange[%f:%f]\n"range[2], range[3]);


        fprintf(file"splot ");
        for(i=0i<npi-1i++){
                fprintf(file"data%d,\\\n",i);
        }
        fprintf(file"data%d",i);

        fclose(file);
        create_pdf(outdirplot);
        free(out);
}

void plot_data(char *outdirchar *plotchar *titlechar *xlabelchar *ylabel,
                double *rangeint npiplotinfo *pi){
        FILE *file;
        char *out;
        int i;

        out=malloc(1000*sizeof(char));
        sprintf(out"%s/%s.gp"outdirplot);
        check_file(out"w");
        file=fopen(out"w");
        fprintf(file"reset\n");
        fprintf(file"set term epslatex standalone color size 24cm,14cm solid\n");
        fprintf(file"set out sprintf(\'%s/%s.tex\')\n"outdirplot);
        for(i=0i<npii++)
                fprintf(file"data%d = sprintf(\'%s/%s\')\n"ioutdirpi[i].data);

        fprintf(file"set key below\n");
        fprintf(file"set title \'%s\'\n"title);

        if(range[0]<range[1])
                fprintf(file"set xrange[%f:%f]\n"range[0], range[1]);
        if(range[2]<range[3])
                fprintf(file"set yrange[%f:%f]\n"range[2], range[3]);

        fprintf(file"set xlabel \'%s\'\n"xlabel);
        fprintf(file"set ylabel \'%s\'\n"ylabel);
        fprintf(file"plot ");
        for(i=0i<npi-1i++){
                fprintf(file"data%d using %d:%d title \'%s\' lc rgb \"%s\" lw %d pt %d,\\\n",
                                ipi[i].xpi[i].y,  pi[i].labelpi[i].colorpi[i].lwpi[i].pt);
        }
        fprintf(file"data%d using %d:%d title \'%s\' lc rgb \"%s\" lw %d pt %d",
                                        ipi[i].xpi[i].ypi[i].labelpi[i].colorpi[i].lwpi[i].pt);

        fclose(file);
        create_pdf(outdirplot);
        free(out);
}

void plot_data_vecfield(char *outdirchar *plotchar *titlechar *xlabelchar *ylabel,
                double *rangeint Xint Yint npiplotinfo *pi){
        FILE *file;
        char *out;
        int iL;
        double xcmycm;
        if(X>Y)
                L=X;
        else
                L=Y;
        xcm=14*(double)X/L;
        ycm=14*(double)Y/L;

        out=malloc(1000*sizeof(char));
        sprintf(out"%s/%s.gp"outdirplot);
        check_file(out"w");
        file=fopen(out"w");
        fprintf(file"reset\n");
        fprintf(file"set term epslatex standalone color size %fcm,%fcm solid\n"xcmycm);
        fprintf(file"set out sprintf(\'%s/%s.tex\')\n"outdirplot);
        for(i=0i<npii++)
                fprintf(file"data%d = sprintf(\'%s/%s\')\n"ioutdirpi[i].data);

        fprintf(file"unset key\n");
        fprintf(file"set title \'%s\'\n"title);

        if(range[0]<range[1])
                fprintf(file"set xrange[%f:%f]\n"range[0], range[1]);
        if(range[2]<range[3])
                fprintf(file"set yrange[%f:%f]\n"range[2], range[3]);

        fprintf(file"set xlabel \'%s\'\n"xlabel);
        fprintf(file"set ylabel \'%s\'\n"ylabel);
        fprintf(file"plot ");
        for(i=0i<npi-1i++){
                fprintf(file"data%d using %d:%d:%d:%d w vec every %d:%d lc rgb \"%s\" lw %d,\\\n",
                                ipi[i].xpi[i].ypi[i].upi[i].v,(int)L/14,(int)L/14pi[i].colorpi[i].lw);
        }
        fprintf(file"data%d using %d:%d:%d:%d w vec every %d:%d lc rgb \"%s\" lw %d",
                                        ipi[i].xpi[i].ypi[i].upi[i].v,(int)L/14,(int)L/14pi[i].colorpi[i].lw);
        fclose(file);
        create_pdf(outdirplot);
        free(out);
}