[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