#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

#define MAX 100000

void files(void);

long i;
long j;
long k;

long numBytes = 3000;
char string[3000];

char s[22][31];

long node_num,n1,n2;

long node_original_num[MAX];


long elem_n1[MAX];
long elem_n2[MAX];

long ntotal;
long etotal;
long ctotal;

double x,y,z;

double node1[MAX],node2[MAX],node3[MAX];

long constraint[MAX][5];            
long constraint_node[MAX];    

char sss[1];

FILE *pFile[6];
char filename[6][FILENAME_MAX];


int main()
{

	printf( "\n\n\n CBAR_extract.cpp   ver 1.0  March 8, 2008 \n");
	printf( "\n by Tom Irvine   Email: tomirvine@aol.com \n");
	
    files();

	for(i=0;i<MAX;i++)
	{
        for(j=0;j<6;j++)
        {
            constraint[i][j]=0;                       
        }              
    }

    printf(" Ref 1 \n");
    
    i=0;
    j=0;
    k=0;
    while(1)
	{
		if(fgets(string,numBytes,pFile[0] )<=0)
		{
            break;
        }
        
        
        if(strstr(string,"GRID")!=NULL)
        {
 //             printf("%s\n",string);
                                          
              sscanf(string,"%s %s %s %s %s %s",s[1],s[2],s[3],s[4],s[5],s[6]);                                  
              
              node_original_num[i]=atoi(s[2]);
              
              if(strlen(s[3])>1)
              {
                 strcpy(s[6],s[5]);
                 strcpy(s[5],s[4]);
                                
                 sscanf(s[3],"0%s",s[4]);
              }
 
//              printf("s3=%s strlen=%d s4=%s \n",s[3],strlen(s[3]),s[4]);
                          
              node1[i]=atof(s[4]);
              node2[i]=atof(s[5]);
              node3[i]=atof(s[6]);
              
 //             printf(" s[1]=%s s[2]=%s s[4]=%s s[5]=%s s[6]=%s \n",s[1],s[2],s[4],s[5],s[6]);
                 
              i++;                  
              
              if(i==MAX){break;}               
        }
        if(strstr(string,"CBAR")!=NULL) 
        {
              sscanf(string,"%s %s %s %s %s",s[1],s[2],s[3],s[4],s[5]);
              elem_n1[j]=atoi(s[4]);
              elem_n2[j]=atoi(s[5]);                                             
              j++;   
              
              if(j==MAX){break;}                                 
        } 
        if(strstr(string,"SPC1")!=NULL) 
        {
//              printf(" %s \n",string);                          
                                        
              sscanf(string,"%s %s %s %s",s[1],s[2],s[3],s[4]);
              
              if(strstr(s[3],"1")!=NULL) 
              {constraint[k][0]=1;}
               
              if(strstr(s[3],"2")!=NULL) 
              {constraint[k][1]=1;}             
               
              if(strstr(s[3],"3")!=NULL) 
              {constraint[k][2]=1;}             
               
              if(strstr(s[3],"4")!=NULL) 
              {constraint[k][3]=1;}
              
              if(strstr(s[3],"5")!=NULL) 
              {constraint[k][4]=1;}              
              
              if(strstr(s[3],"6")!=NULL) 
              {constraint[k][5]=1;}
                                    
              constraint_node[k]=atoi(s[4]);  
                                  
//              printf(" constraint_node[%ld]=%ld \n",k,constraint_node[k]);                    
                                                         
              k++;   
              
              if(k==MAX){break;}                                 
        }                                        
         
    }
    ntotal=i;
    etotal=j;
    ctotal=k;
    
    printf("\n  ntotal=%ld \t etotal=%ld \t ctotal=%ld \n",ntotal,etotal,ctotal);

    long n1,n2;
    
    for(i=0;i<ntotal;i++)
    { 
         fprintf(pFile[1],"%g \t %g \t %g\n",node1[i],node2[i],node3[i]);                 
    }
    for(i=0;i<etotal;i++)
    {
         for(j=0;j<ntotal;j++)
         {
              if(elem_n1[i]==node_original_num[j])
              {n1=j+1;}
              
              if(elem_n2[i]==node_original_num[j])
              {n2=j+1;}                            
         }                
         fprintf(pFile[2],"%ld \t %ld \n",n1,n2);                           
    }   
    for(i=0;i<ctotal;i++)
    {
         for(j=0;j<ntotal;j++)
         {
              if(constraint_node[i]==node_original_num[j])
              {
                  n1=j+1;
                  
                  for(k=0;k<6;k++)
                  {
                       if(  constraint[i][k] != 0 )
                       {         
                           fprintf(pFile[3],"%ld \t %ld \n",n1,k+1);
                       }            
                  }
                  break;
              }                           
         }                       
    }   
    
//*****************************************************************
    
    for(i=0;i<=3;i++)
    {
       fclose(pFile[i]);
    }
    
    printf("\n\n Output Files: \n\n");
    
    for(i=1;i<=3;i++)
    {
       printf("   %s\n",filename[i]);
    }
    
   	printf("\n\n Press any key to exit.\n");
	getch();

	exit(1);
}	
void files(void)
{
      printf("\n Enter the input filename \n");
    scanf("%s", filename[0]);

	pFile[0]=fopen(filename[0], "rb");


	while(pFile[0] == NULL )
	{
		printf("\n Failed to open file: %s \n", filename[0]);
		printf("\n Please enter the input filename: \n");

		scanf("%s",filename[0]);

		pFile[0] = fopen(filename[0], "rb");

	}
	printf(" File: %s opened. \n", filename[0]);

    strcpy(filename[1],"grids.out"); 
    strcpy(filename[2],"elements.out");   
    strcpy(filename[3],"constraints.out");   
       
    for(i=1;i<=3;i++)
    {
       pFile[i] = fopen(filename[i], "w");
    }
}

