#include "hip/hip_runtime.h"
//-------Boundary condition --------------------------------------------------------
#include "stdlib.h"
#include "stdio.h"
#include "parameters.h"
#include "utility.h"
#include "OCFD_boundary_Liftbody3D.h"
#include "OCFD_boundary_compression_conner.h"

#include "cuda_commen.h"
#include "cuda_utility.h"
#include "commen_kernel.h"
#include "parameters_d.h"

#ifdef __cplusplus
extern "C"{
#endif

void OCFD_bc()
{
	
	//---------------------------------------------------
    switch(IBC_USER){
        case 124:
		if(Init_stat == 0){
    		bc_user_Liftbody3d_simple();
    	}else{
    		bc_user_Liftbody3d();
    	}
		break;

		case 108:
		bc_user_Compression_conner();
		break;

		default:
		break;
	}

	//--------------------------------------------
	if (npx == 0)
	{	
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(0 , 0 , 0) , dim3(1 , ny , nz) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , 1 , ny , nz);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}
	if (npx == NPX0 - 1)
	{
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(nx-1 , 0 , 0) , dim3(nx , ny , nz) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , 1 , ny , nz);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}
	//------------------------------
	if (npy == 0)
	{
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(0 , 0 , 0) , dim3(nx , 1 , nz) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , nx , 1 , nz);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}

	if (npy == NPY0 - 1)
	{
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(0 , ny-1 , 0) , dim3(nx , ny , nz) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , nx , 1 , nz);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}
	//--------------------------
	if (npz == 0)
	{
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(0 , 0 , 0) , dim3(nx , ny , 1) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , nx , ny , 1);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}

	if (npz == NPZ0 - 1)
	{
		dim3 griddim , blockdim;
		cudaJobPackage job( dim3(0 , 0 , nz-1) , dim3(nx , ny , nz) );

		cal_grid_block_dim(&griddim , &blockdim , BlockDimX , BlockDimY , BlockDimZ , nx , ny , 1);
		hipLaunchKernelGGL(pri_to_cons_kernel, dim3(griddim ), dim3(blockdim), 0, 0, *pf_d , *pd_d , *pu_d , *pv_d , *pw_d , *pT_d , job);
	}
}


#ifdef __cplusplus
}
#endif
