int BSSCR_create_execute_script( void )
{
       int argc;
        char **args;
        int i;
        PetscViewer viewer, viewer_dated;
        time_t      currTime;
        struct tm*  timeInfo;
        int         adjustedYear;
        int         adjustedMonth;
        char        *filename;


        /* get file name with date */
        currTime = time( NULL );
        timeInfo = localtime( &currTime );
        /* See man localtime() for why to adjust these */
        adjustedYear = 1900 + timeInfo->tm_year;
        adjustedMonth = 1 + timeInfo->tm_mon;
        /* Format; name-YYYY.MM.DD-HH.MM.SS.sh */
        asprintf( &filename, "%s-%.4d.%.2d.%.2d-%.2d.%.2d.%.2d.%s",
                        "execute-job",
                        adjustedYear, adjustedMonth, timeInfo->tm_mday,
                        timeInfo->tm_hour, timeInfo->tm_min, timeInfo->tm_sec ,
                        "sh" );

        PetscViewerASCIIOpen( PETSC_COMM_SELF, filename, &viewer_dated );


        /* get file name without */
        PetscViewerASCIIOpen( PETSC_COMM_SELF, "execute-job.sh", &viewer );


        /* ouput what the command line arguments were */
        PetscGetArgs( &argc, &args );

        for( i=0; i<argc; i++ ) {
                PetscViewerASCIIPrintf( viewer, "%s ", args[i] );
                PetscViewerASCIIPrintf( viewer_dated, "%s ", args[i] );
        }


        Stg_PetscViewerDestroy(&viewer);
        Stg_PetscViewerDestroy(&viewer_dated);
        free( filename );


        return 0;

}
void bsscr_dirwriteVec(Vec V, char name[], char dir[], char message[]){
    PetscViewer             vec_view_file;
    char str[100];
    PetscTruth dump=PETSC_FALSE;
    PetscOptionsGetTruth( PETSC_NULL ,"-dump_matvec", &dump, 0 );
    if(dump){
    if( V != NULL ) {
	PetscPrintf( PETSC_COMM_WORLD,"%s \n",message);
	PetscObjectSetName((PetscObject)V,name);
	sprintf(str,"%s%svectorBin",dir,name);
	PetscViewerBinaryOpen( PETSC_COMM_WORLD, str, FILE_MODE_WRITE, &vec_view_file );
	PetscViewerSetFormat( vec_view_file, PETSC_VIEWER_NATIVE );
	VecView( V, vec_view_file );
	Stg_PetscViewerDestroy(&vec_view_file );
	sprintf(str,"%s%svector.m",dir,name);
	PetscViewerASCIIOpen( PETSC_COMM_WORLD, str, &vec_view_file );
	PetscViewerSetFormat( vec_view_file, PETSC_VIEWER_ASCII_MATLAB );
	VecView( V, vec_view_file );
	Stg_PetscViewerDestroy(&vec_view_file );
    }
    }
}
void bsscr_writeMat(Mat K, char name[], char message[]){
    PetscViewer             mat_view_file;
    char str[100];
    PetscTruth dump=PETSC_FALSE;
    PetscOptionsGetTruth( PETSC_NULL ,"-dump_matvec", &dump, 0 );
    if(dump){
    if( K != NULL ) {
	PetscPrintf( PETSC_COMM_WORLD,"%s \n",message);
	PetscObjectSetName((PetscObject)K,name);
	sprintf(str,"%smatrixBin",name);
	PetscViewerBinaryOpen( PETSC_COMM_WORLD, str, FILE_MODE_WRITE, &mat_view_file );
	PetscViewerSetFormat( mat_view_file, PETSC_VIEWER_NATIVE );
	MatView( K, mat_view_file );
	Stg_PetscViewerDestroy(&mat_view_file );
	sprintf(str,"%smatrix.m",name);
	PetscViewerASCIIOpen( PETSC_COMM_WORLD, str, &mat_view_file );
	PetscViewerSetFormat( mat_view_file, PETSC_VIEWER_ASCII_MATLAB );
	MatView( K, mat_view_file );
	Stg_PetscViewerDestroy(&mat_view_file );
    }
    }
}
PetscErrorCode BSSCR_StokesCreateOperatorSummary( Mat K, Mat G, Mat C, Vec f, Vec h, const char filename[] )
{
	MPI_Comm comm;
	PetscViewer v;
	char op_name[PETSC_MAX_PATH_LEN];	
	PetscTruth flg;
	
	PetscObjectGetComm( (PetscObject)K, &comm );
	PetscViewerASCIIOpen( comm, filename, &v );
	
	BSSCR_GeneratePetscHeader_for_viewer( v );
	PetscViewerASCIIPrintf( v, "\nInput matrices:\n");
	PetscViewerASCIIPushTab(v);
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_A11",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "A11: %s\n", op_name );	}
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_A12",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "A12: %s\n", op_name );	}
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_A22",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "A22: %s\n", op_name );	}
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_Smat",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "Smat: %s\n", op_name );	}
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_b1",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "b1: %s\n", op_name );	}
	
	PetscOptionsGetString( PETSC_NULL,"-stokes_b2",op_name,PETSC_MAX_PATH_LEN-1,&flg );
	if (flg) {	PetscViewerASCIIPrintf( v, "b2: %s\n", op_name );	}
	
	PetscViewerASCIIPopTab(v);
	PetscViewerASCIIPrintf( v, "\n");
	
	BSSCR_MatInfoLog(v,K,"stokes_A11");			PetscViewerASCIIPrintf( v, "\n");
	
	BSSCR_MatInfoLog(v,G,"stokes_A12");			PetscViewerASCIIPrintf( v, "\n");
	if (C) { BSSCR_MatInfoLog(v,C,"stokes_A22"); 		PetscViewerASCIIPrintf( v, "\n");	}	
	
	BSSCR_VecInfoLog(v,f,"stokes_b1");			PetscViewerASCIIPrintf( v, "\n");
	BSSCR_VecInfoLog(v,h,"stokes_b2");			PetscViewerASCIIPrintf( v, "\n");
	
	Stg_PetscViewerDestroy(&v );
	
	PetscFunctionReturn(0);
}