void LBM::geometry_file_in_VTK( ){

	char buffer1[256];
	int x,y,z;

	snprintf(buffer1, sizeof(buffer1), "LBM2_%s_geometry.vtk", case_name.c_str());
	ofstream VTK_file(buffer1);

	VTK_file<<"# vtk DataFile Version 3.0"<< endl;
	VTK_file<<"vtk output"<< endl;
	VTK_file<<"ASCII"<< endl;

	int next_line_counter=0;

	//coordinates
	VTK_file<<"DATASET STRUCTURED_GRID"<< endl;
	VTK_file<<"DIMENSIONS "<< lx <<" "<< ly <<" " << lz << endl;
	VTK_file<<"POINTS " << lx*ly*lz <<" " STRINGIFY_MACRO(FLOATING) << endl;

	for (z = 0 ; z< lz ; ++z)
		for (y = 0 ; y< ly ; ++y)
			for (x = 0 ; x< lx ; ++x){
				VTK_file << x << "\t" << y << "\t" << "\t" << z << "\t";
				++next_line_counter;
				if(next_line_counter%9==0)
					VTK_file << endl;
			}

	VTK_file<< endl << endl;

	//print Obstacles
	VTK_file<<"POINT_DATA "<< lx*ly*lz << endl;
	VTK_file<<"SCALARS Obstacles int"<< endl;
	VTK_file<<"LOOKUP_TABLE default"<< endl;
	next_line_counter=0;
	for (z = 0 ; z< lz ; ++z){
		for (y = 0 ; y< ly ; ++y){
			for (x = 0 ; x< lx ; ++x){
				//.........if obstacle node, nothing is to do ...
				VTK_file <<  obstacles[index(z,y,x)] << "\t";

				++next_line_counter;
				if(next_line_counter%9==0)
					VTK_file << endl;
			}
		}
	}
	VTK_file<< endl << endl;

	VTK_file.close();
	cout << "geometry file exported!" << endl;

}
/*! \brief Compiles nbnxn kernels for OpenCL GPU given by \p mygpu
 *
 * With OpenCL, a call to this function must precede nbnxn_gpu_init().
 *
 * Doing bFastGen means only the requested kernels are compiled,
 * significantly reducing the total compilation time. If false, all
 * OpenCL kernels are compiled.
 *
 * A fatal error results if compilation fails.
 *
 * \param[inout] nb  Manages OpenCL non-bonded calculations; compiled kernels returned in dev_info members
 *
 * Does not throw
 */
void
nbnxn_gpu_compile_kernels(gmx_nbnxn_ocl_t *nb)
{
    char                      gpu_err_str[STRLEN];
    gmx_bool                  bFastGen = TRUE;
    cl_device_id              device_id;
    cl_context                context;
    cl_program                program;
    char                      runtime_consts[256];

    if (getenv("GMX_OCL_NOFASTGEN") != NULL)
    {
        bFastGen = FALSE;
    }

    device_id        = nb->dev_info->ocl_gpu_id.ocl_device_id;
    context          = nb->dev_rundata->context;

    /* Here we pass macros and static const int variables defined in include
     * files outside the nbnxn_ocl as macros, to avoid including those files
     * in the JIT compilation that happens at runtime.
     */
    sprintf(runtime_consts,
            "-DCENTRAL=%d -DNBNXN_GPU_NCLUSTER_PER_SUPERCLUSTER=%d -DNBNXN_GPU_CLUSTER_SIZE=%d -DNBNXN_GPU_JGROUP_SIZE=%d -DNBNXN_AVOID_SING_R2_INC=%s %s",
            CENTRAL,                                    /* Defined in ishift.h */
            c_nbnxnGpuNumClusterPerSupercluster,        /* Defined in nbnxn_pairlist.h */
            c_nbnxnGpuClusterSize,                      /* Defined in nbnxn_pairlist.h */
            c_nbnxnGpuJgroupSize,                       /* Defined in nbnxn_pairlist.h */
            STRINGIFY_MACRO(NBNXN_AVOID_SING_R2_INC)    /* Defined in nbnxn_consts.h */
                                                        /* NBNXN_AVOID_SING_R2_INC passed as string to avoid
                                                           floating point representation problems with sprintf */
            , (nb->bPrefetchLjParam) ? "-DIATYPE_SHMEM" : ""
            );

    /* Need to catch std::bad_alloc here and during compilation string
       handling. */
    try
    {
        std::string defines_for_kernel_types =
            make_defines_for_kernel_types(bFastGen,
                                          nb->nbparam->eeltype,
                                          nb->nbparam->vdwtype);

        cl_int cl_error = ocl_compile_program(default_source,
                                              auto_vendor_kernels,
                                              defines_for_kernel_types.c_str(),
                                              gpu_err_str,
                                              context,
                                              device_id,
                                              nb->dev_info->vendor_e,
                                              &program,
                                              runtime_consts);
        if (cl_error != CL_SUCCESS)
        {
            gmx_fatal(FARGS, "Failed to compile NBNXN kernels for GPU #%s: %s",
                      nb->dev_info->device_name,
                      gpu_err_str);
        }
    }
    GMX_CATCH_ALL_AND_EXIT_WITH_FATAL_ERROR;

    nb->dev_rundata->program = program;
}
const char* __asan_default_options() {
    return STRINGIFY_MACRO(ASAN_DEFAULT_OPTIONS);
}