Python Poisson solver on curvilinear 2-D grid

# Calcifer

Under construction

Calcifer is a Poisson-like PDE finite difference solver on 2-D structured I.J Grids. Grids are curvilinear.

• create a Geometry object.
• define the computational Domain, based upon this Geometry.
• Solve the problem. Heat conduction is solver in HeatSolve from Calcifer.

## Thermal diffusion, solver by calcifer.

A thermal diffusion test with calcifer is done like this:

from calcifer_pde.domain import Domain
from calcifer_pde.geometry import Square

def heat_solve(dom, k_coeff=1.0):
init_field = np.random.random_sample(dom.shp1d)
sterm_l = np.zeros_like(dom.lapl)
sterm_r = np.zeros(dom.shp1d)
# Left Hand Side
lhs_csr = dom.lapl * k_coeff + sterm_l
# Right-Hand Side
rhs_csr = np.zeros(dom.shp1d) + sterm_r
lhs_csr_bc, rhs_csr_bc, grad_n_bc = apply_bc(dom, lhs_csr, rhs_csr)

out_1d, info = scp.linalg.bicgstab(lhs_csr_bc, rhs_csr_bc, x0=init_field)
if info == 0:
print(".   ^_^ Resolution succesfull.")
elif info > 0:
print(".   t(-_-t) Resolution failed.")
else:
print(".   =_= Convergence not reached.")
temp = out_1d.reshape(dom.shp2d)
return temp

geo = Square(nx=80, ny=100, len_x=1.0, len_y=1.0)
dom = Domain(geo)
dom.switch_bc_vmax_neuman(0.0)
dom.switch_bc_vmin_neuman(0.0)
dom.switch_bc_umin_dirichlet(200.0)
dom.switch_bc_umax_dirichlet(100.0)
sol = heat_solve(dom, k_coeff=22.0)

One can solve an other PDE by creating a different problem than heat solve