[table of contents] [master index] [comments] [modules] [programs] [variables] [types] [procedures]
MODULE
response_mod
PURPOSE
Calculate the linear self-consistent field or random phase
approximation (RPA) for the linear susceptibility of a periodic
phase. As in the RPA for a homogeneous liquid, the calculation
requires a calculation of the linear response function for a
gas of non-interacting chains, from which we then calculate the
corresponding response function for an incompressible liquid.
Each calculation is carried out for a wavevector k in the first
Brillouin zone (FBZ). For each k, we calculate a matrix response
in which each row describes a response of the monomer concentrations
of the Bloch form exp{ik.r}d_rho(r) to a specific perturbation of
the form exp{ik.r} d_omega(r), where d_rho(r) and d_omega(r) have
the periodicity of the unperturbed lattice. The perturbations and
response matrices are represented in a basis of symmetry adapted
basis functions, which is constructed from the space group labeled
by varial k_group.
Symmetry adapted basis functions, if used, are superpositions of
reciprocal lattice vectors that are related by elements of a user
specified group. This group (which is specified by module variable
k_group) must be a subgroup of the "little group" associated with
wavevector k. The little group of k is the subgroup of elements
of the space group of the unperturbed crystal that leaves a
function e{ik.r} invariant. In the current implementation, each
basis function must be invariant under the action of all of the
elements of group k_group (i.e., must correspond to an irreducible
representation of k_group in which each element is represented
by the identity).
COMMENT
The current implementation is limited to systems containing only
two types of monomer (N_monomer=2), and unperturbed structures
with inversion symmetry. This allows investigation of the stability
of all of the known equilibrium phases of diblock copolymer melts.
For unperturbed crystals with inversion symmetry, it may be shown
by considering the perturbation theory used to calculate the ideal
gas response that the elements of the response matrix S(G,G';k) for
an ideal gas are real in a basis of reciprocal vectors. The same
statement then also applies to the corresponding response matrix
for an incompressible liquid. The response matrix remains real for
any representation of the response in terms of basis functions that
are superpositions of plane waves in which the coefficient of each
plane wave is real. The basis functions used in this calculation
have this property. The current implementation of the code is
restricted to unperturbed crystals with inversion symmetry by the
fact that, to save memory, the response functions Smm, Spm, Spp
have been declared to be real, rather than complex arrays. The
generalization would be straightforward, and would approximately
double the amount of memory required by the code.
SOURCE
module response_mod
use const_mod
use io_mod
use field_io_mod
use string_mod
use chain_mod
use chemistry_mod
use fft_mod
use extrapolate_mod
use response_step_mod
use group_mod, only : operator(.dot.)
use grid_mod, only : ngrid, ksq_grid, omega_grid, rho_grid
use grid_basis_mod
use unit_cell_mod, only : G_basis,R_basis
use basis_mod, only : which_wave, sort, N_wave, N_star, wave, &
make_basis, release_basis
!use group_rep_mod
implicit none
private
public :: k_group
public :: response_startup
public :: response_sweep
VARIABLE
character(60) k_group - subgroup used to generate basis functions.
Group name or name of file containing group
PURPOSE
Subgroup used to construct symmetrized basis functions. Must be
a subgroup of the little group of k. All basis functions are
invariant under the chosen subgroup. (We have not implemented
construction of basis functions for other types of irreducible
representation).
SUBROUTINE
response_startup(N_grids, ds, order)
PURPOSE
(1) allocate memory needed by module variables
(2) release the basis of the full space group
(3) generate symmetrized basis function from k_group
ARGUMENTS
integer N_grids(3) - grid dimensions
real(long) ds - chain step
integer order - extrapolation order w.r.t. chain steps
COMMENT
character* k_group - subgoup used to generate basis function
SOURCE
subroutine response_startup(N_grids, ds, order) integer, intent(IN) :: N_grids(:) real(long), intent(IN) :: ds integer, intent(IN) :: order
SUBROUTINE
response_sweep(output_prefix)
PURPOSE
sweep over a range of k values and calculate the response
functions.
ARGUMENTS
integer N_grids(3) - grid dimensions
character* ouput_prefix - output_directory
SOURCE
subroutine response_sweep(Ngrid,output_prefix) implicit none integer, intent(IN) :: Ngrid(3) character(len=60), intent(IN) :: output_prefix