[ Home ] [ News ] [ Contact ] [ Search ]

 ==> Download Software
 nextnano³ documentation

 Copyright notice
 About us
 Useful Links
 Publications
 
 * password protected

 

 
 

Poisson block (solve Poisson problem)

SUBROUTINE poisson_block solves the Poisson problem.

When called, this subroutine solves the Poisson problem for the Fermi levels given in MODULE fermi_level.
The solution is written to phiV in MODULE potentials.

This subroutine is mainly steered by the following variables in MODULE control_poisson:

built_inL = .TRUE.  --> The routine poisson_block calculates the built-in potential.
            .FALSE. --> The routine poisson_block calculates the potential;
                        the built-in potential is assumed to exist in
                        BuiltInPotentialV in MODULE potentials.


classL    = .TRUE.  --> The routines poisson_block and solve_current_problem (solve_current_problem1D)
                        calculate the potentials assuming a pure classical treatment.
            .FALSE. --> The routines poisson_block and solve_current_problem (solve_current_problem1D)
                        calculate the potentials as specified in input file.

 

The subroutine can be split into three parts:
   1. Define Poisson problem
   2. Solve nonlinear Poisson equation
   3. Deallocate Poisson clusters and arrays

 

1. Define Poisson problem

First define poisson Problem.

 CALL define_poisson_clusters
 CALL poissonmatrix3D
 CALL set_dirichlet_poisson
 CALL
scale_poisson

Here the Poisson matrix is defined. First, all information about boundary conditions (Poisson clusters) is allocated [CALL define_poisson_clusters].

Then the Poisson matrix is set up [CALL poissonmatrix3D].

Finally, Dirichlet boundary conditions are defined [CALL set_dirichlet_poisson].

In 1D the Poisson problem is scaled by 1.
In 3D and 2D the Poisson problem is scaled, as described in MODULE numeric_control:

Linear Poisson:
------------
Note: Using SI system has the effect that in equation

         PoissonM * xV = bV

both sides (i.e.
PoissonM and bV) are scaled by a factor about 10-22 in 3D (2D: 10-12).
We have noticed that the conjugate gradient method in templates does not work well within that regime.
Therefore both sides are scaled by a factor scale_poisson.
To be specific, all elements of
PoissonM and bV are scaled AFTER definition of Dirichlet boundary conditions in subroutine scale_poisson.
scale-poisson = 1.0d18 has been proved to be adequate in 3D (2D: 1.0d9).
This value should not be altered but can be specified in $numeric-control.

 

2. Solve nonlinear Poisson equation

  IF (classL) THEN
     CALL non_linear_poisson('class') !
classical Poisson equation
  ELSE
     CALL non_linear_poisson('fully') !
quantum-mechanical Schrödinger-Poisson equation
  END IF

 

3. Deallocate Poisson clusters and arrays

  CALL deallocate_poisson

When leaving poisson_block, all arrays and pointers which have been allocated in the meantime, are  deallocated. So the allocation status is the same as before.

 


OBJECT: Poisson Block

This program part considers the quasi Fermi levels in the module 'fermi_level' as being fixed and solves for this the Schrödinger and Poisson equation self-consistently. The potential in the module 'potentials' is being adjusted correspondingly.

More details are available on how to solve the Poisson problem.

OBJECT: Define Poisson Problem

More details are available on how to setup the Poisson problem.

OBJECT: Nonlinear Poisson

More details are available for the nonlinear Poisson equation.

OBJECT: Deallocate Poisson

 

   
Last modified: 09-Jun-2011