HyPar  1.0
Finite-Difference Hyperbolic-Parabolic PDE Solver on Cartesian Grids
BCInitialize.c File Reference

Initialize boundary-conditions-related function pointers. More...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <boundaryconditions.h>

Go to the source code of this file.

Functions

int BCInitialize (void *b, int flag_gpu)
 

Detailed Description

Initialize boundary-conditions-related function pointers.

Author
Debojyoti Ghosh, Youngdae Kim

Definition in file BCInitialize.c.

Function Documentation

◆ BCInitialize()

int BCInitialize ( void *  b,
int  flag_gpu 
)

Assign the function pointers for boundary condition application depending on the boundary type, for a given boundary object

Parameters
bBoundary object of type DomainBoundary
flag_gpuFlag to indicate if GPU is being used

Definition at line 12 of file BCInitialize.c.

14 {
15  DomainBoundary *boundary = (DomainBoundary*) b;
16 
17 #if defined(HAVE_CUDA)
18  if (flag_gpu) {
19 
20  if (!strcmp(boundary->bctype,_PERIODIC_)) {
21  boundary->BCFunctionU = gpuBCPeriodicU;
22  } else if (!strcmp(boundary->bctype,_SLIP_WALL_)) {
23  boundary->BCFunctionU = gpuBCSlipWallU;
24  } else {
25  fprintf(stderr,"[GPU] Error in BCInitialize(): \"%s\" is not a supported boundary condition.\n",
26  boundary->bctype);
27  return 1;
28  }
29 
30  } else {
31 #endif
32 
33  if (!strcmp(boundary->bctype,_PERIODIC_ )) boundary->BCFunctionU = BCPeriodicU;
34  else if (!strcmp(boundary->bctype,_EXTRAPOLATE_ )) boundary->BCFunctionU = BCExtrapolateU;
35  else if (!strcmp(boundary->bctype,_DIRICHLET_ )) boundary->BCFunctionU = BCDirichletU;
36  else if (!strcmp(boundary->bctype,_REFLECT_ )) boundary->BCFunctionU = BCReflectU;
37  else if (!strcmp(boundary->bctype,_SPONGE_ )) boundary->BCFunctionU = BCSpongeUDummy;
38  else if (!strcmp(boundary->bctype,_NOSLIP_WALL_ )) boundary->BCFunctionU = BCNoslipWallU;
39  else if (!strcmp(boundary->bctype,_SLIP_WALL_ )) boundary->BCFunctionU = BCSlipWallU;
40  else if (!strcmp(boundary->bctype,_THERMAL_SLIP_WALL_ )) boundary->BCFunctionU = BCThermalSlipWallU;
41  else if (!strcmp(boundary->bctype,_THERMAL_NOSLIP_WALL_ )) boundary->BCFunctionU = BCThermalNoslipWallU;
42  else if (!strcmp(boundary->bctype,_SW_SLIP_WALL_ )) boundary->BCFunctionU = BCSWSlipWallU;
43  else if (!strcmp(boundary->bctype,_SUBSONIC_OUTFLOW_ )) boundary->BCFunctionU = BCSubsonicOutflowU;
44  else if (!strcmp(boundary->bctype,_SUBSONIC_INFLOW_ )) boundary->BCFunctionU = BCSubsonicInflowU;
45  else if (!strcmp(boundary->bctype,_SUBSONIC_AMBIVALENT_ )) boundary->BCFunctionU = BCSubsonicAmbivalentU;
46  else if (!strcmp(boundary->bctype,_SUPERSONIC_OUTFLOW_ )) boundary->BCFunctionU = BCSupersonicOutflowU;
47  else if (!strcmp(boundary->bctype,_SUPERSONIC_INFLOW_ )) boundary->BCFunctionU = BCSupersonicInflowU;
48  else if (!strcmp(boundary->bctype,_TURBULENT_SUPERSONIC_INFLOW_ )) boundary->BCFunctionU = BCTurbulentSupersonicInflowU;
49  else if (!strcmp(boundary->bctype,_NO_FLUX_BC_ )) boundary->BCFunctionU = BCNoFluxU;
50  else {
51  fprintf(stderr,"Error in BCInitialize(): \"%s\" is not a supported boundary condition.\n",
52  boundary->bctype);
53  return(1);
54  }
55 
56 #if defined(HAVE_CUDA)
57  }
58 #endif
59 
60  return 0;
61 }
#define _SUPERSONIC_INFLOW_
int BCSupersonicInflowU(void *, void *, int, int, int *, int, double *, double)
int(* BCFunctionU)(void *, void *, int, int, int *, int, double *, double)
#define _SUBSONIC_AMBIVALENT_
int BCNoFluxU(void *, void *, int, int, int *, int, double *, double)
Definition: BCNoFlux.c:22
int BCSpongeUDummy(void *, void *, int, int, int *, int, double *, double)
Definition: BCSponge.c:73
int gpuBCPeriodicU(void *, void *, int, int, int *, int, double *, double)
#define _DIRICHLET_
#define _THERMAL_SLIP_WALL_
#define _THERMAL_NOSLIP_WALL_
#define _SPONGE_
Structure containing the variables and function pointers defining a boundary.
#define _NO_FLUX_BC_
int BCPeriodicU(void *, void *, int, int, int *, int, double *, double)
Definition: BCPeriodic.c:19
int BCThermalNoslipWallU(void *, void *, int, int, int *, int, double *, double)
int BCSlipWallU(void *, void *, int, int, int *, int, double *, double)
Definition: BCSlipWall.c:22
int BCSubsonicAmbivalentU(void *, void *, int, int, int *, int, double *, double)
int BCNoslipWallU(void *, void *, int, int, int *, int, double *, double)
Definition: BCNoslipWall.c:20
int BCReflectU(void *, void *, int, int, int *, int, double *, double)
Definition: BCReflect.c:14
#define _SW_SLIP_WALL_
int BCSubsonicInflowU(void *, void *, int, int, int *, int, double *, double)
char bctype[_MAX_STRING_SIZE_]
int BCSWSlipWallU(void *, void *, int, int, int *, int, double *, double)
Definition: BCSWSlipWall.c:21
#define _SUBSONIC_INFLOW_
int BCSubsonicOutflowU(void *, void *, int, int, int *, int, double *, double)
#define _EXTRAPOLATE_
#define _REFLECT_
#define _SUBSONIC_OUTFLOW_
int BCDirichletU(void *, void *, int, int, int *, int, double *, double)
Definition: BCDirichlet.c:13
int gpuBCSlipWallU(void *, void *, int, int, int *, int, double *, double)
int BCSupersonicOutflowU(void *, void *, int, int, int *, int, double *, double)
#define _NOSLIP_WALL_
#define _SUPERSONIC_OUTFLOW_
int BCExtrapolateU(void *, void *, int, int, int *, int, double *, double)
Definition: BCExtrapolate.c:13
int BCThermalSlipWallU(void *, void *, int, int, int *, int, double *, double)
int BCTurbulentSupersonicInflowU(void *, void *, int, int, int *, int, double *, double)
#define _SLIP_WALL_
#define _PERIODIC_
#define _TURBULENT_SUPERSONIC_INFLOW_