CoMPhy Lab blogs

PDF version

After examining the implementation of heat conduction problems in both vanilla C and Basilisk, several significant advantages of using Basilisk become apparent. This document outlines these benefits to help new users understand why Basilisk is a powerful tool for computational fluid dynamics (CFD) simulations.

1. Simplified Domain and Grid Management

Vanilla C:

  • Requires manual definition of grid points, cell spacings, and domain extents
  • Needs explicit calculation of physical coordinates for each point
  • Requires manual array allocation and deallocation

Basilisk:

  • Simple declaration of domain parameters (L0, X0, N)
  • Automatic grid generation and management
  • No need for explicit memory allocation/deallocation for grid points

2. Declarative Boundary Conditions

Vanilla C:

  • Requires explicit functions to apply boundary conditions
  • Boundary conditions must be repeatedly applied during solution
  • Error-prone due to manual indexing

Basilisk:

  • Declarative boundary conditions using a simple, intuitive syntax:
    T[left] = dirichlet(0.0);
    T[right] = dirichlet(1.0);
  • Applied automatically during computation

3. Event-Based Programming Model

Vanilla C:

  • Procedural, sequential code execution
  • Complex control flow for time-stepping, initialization, and output
  • Difficult to separate logical components

Basilisk:

  • Event-based programming model that separates concerns:
    • event init for initialization
    • event integration/marching for time stepping
    • event end for final output
  • Events can be scheduled to occur at specific times or intervals
  • Cleaner, more modular code structure

4. Automatic Time Step Management

Vanilla C:

  • Manual implementation of time step calculations
  • Explicit checks to ensure numerical stability (CFL condition)
  • Manual logic to hit specific output times exactly

Basilisk:

  • Automatic time step management with dtnext(DT)
  • Built-in tools for maintaining numerical stability
  • Events can be scheduled at specific times with t += tsnap

5. Stencil Operations and Spatial Discretization

Vanilla C:

  • Explicit array indexing for neighbor access
  • Manual implementation of finite difference/volume stencils
  • Error-prone due to index arithmetic

Basilisk:

  • Intuitive stencil notation: T[1], T[-1] for neighbors
  • foreach() iterator for grid traversal without manual indexing
  • Automatic handling of boundary conditions during stencil operations

6. Reduced Boilerplate Code

Vanilla C:

  • Lengthy implementations even for simple problems
  • Requires explicit implementations of utility functions
  • Verbose memory management

Basilisk:

  • Significantly shorter code for equivalent functionality
  • Built-in functions for common operations
  • Less cognitive load due to reduced complexity

7. Scalar Field Declaration and Management

Vanilla C:

  • Manual array allocation for each field
  • Explicit memory management to prevent leaks
  • No standard methods for field operations

Basilisk:

  • Simple scalar field declaration: scalar T[]
  • Automatic memory management
  • Built-in methods for field operations

8. Flux Computation and Conservative Formulation

Vanilla C:

  • Manual flux computation at interfaces
  • Error-prone implementation of conservation laws
  • Complex indexing for interface values

Basilisk:

  • Simplified flux computation with stencil notation
  • Natural expression of conservation laws
  • Automatic handling of flux boundary conditions

9. Extensibility and Library Integration

Vanilla C:

  • Limited reusability of code components
  • Need to reimplement common algorithms
  • Difficult to extend to more complex problems

Basilisk:

  • Modular design allows easy extension
  • Rich library of pre-implemented physics modules
  • Natural pathway to more complex simulations

Conclusion

The Basilisk computational environment provides significant advantages over vanilla C for fluid dynamics simulations. By abstracting away the implementation details of grid management, boundary conditions, and numerical methods, Basilisk allows researchers and engineers to focus on the physics of their problems rather than the computational details. This leads to more readable, maintainable, and correct code with significantly less development effort.

The comparison of the heat conduction examples shows that equivalent problems can be solved with much less code in Basilisk, while simultaneously providing a more intuitive and robust framework for extending to more complex physical phenomena.