diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e8fc58..6039cfb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,26 +1,30 @@ +##### Modifiable options that control version of code ###################### + +option(USE_FFT3 "Use the fft3_mod file (and FFT3.0). Else, use fft2_mod" ON) +option(USE_DEVEL "Use the -D DEVEL option with the Fortran preprocessor" OFF) +option(BUILD_DMG "Build a DMG based application for OSX clients" OFF) + +############################################################################ + IF (USE_INTEL) set (CMAKE_C_COMPILER "icc") set (CMAKE_CXX_COMPILER "icpc") ENDIF (USE_INTEL) - -# CMakeLists files in this project can -# refer to the root source directory of the project as ${PSCF_SOURCE_DIR} and -# to the root binary directory of the project as ${PSCF_BINARY_DIR}. cmake_minimum_required (VERSION 2.8.11) project (PSCF Fortran) #### Based on https://cmake.org/Wiki/CMakeForFortranExamplea #### enable_language (Fortran) -option(USE_FFT3 "Use the fft3_mod file (and FFT3.0). Otherwise, use fft2_mod (and FFTW2)" ON) -option(USE_DEVEL "Use the -D DEVEL option with the Fortran preprocessor" OFF) -option(BUILD_DMG "Build a DMG based application for OSX clients" OFF) +# CMakeLists files in this project refer to the root source directory +# of the project as ${PSCF_SOURCE_DIR} and to the root build/binary +# directory of the project as ${PSCF_BINARY_DIR}. # Add our extra Find*.cmake modules LIST(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake/") -# make sure that the default is a RELEASE +# Make sure that the default is a RELEASE if (NOT CMAKE_BUILD_TYPE) set (CMAKE_BUILD_TYPE RELEASE CACHE STRING "Choose the type of build, options are: None Debug Release." @@ -30,12 +34,13 @@ endif (NOT CMAKE_BUILD_TYPE) # default installation #get_filename_component (default_prefix ".." ABSOLUTE) #set (CMAKE_INSTALL_PREFIX ${default_prefix} CACHE STRING -# "Choose the installation directory; by default it installs in the NORMA directory." +# "Choose the install prefix; by default it installs in the NORMA directory." # FORCE) -# FFLAGS depend on the compiler +# Identify fortran compiler name get_filename_component (Fortran_COMPILER_NAME ${CMAKE_Fortran_COMPILER} NAME) +# Set compiler flags depend on the compiler if (Fortran_COMPILER_NAME MATCHES "gfortran.*") # gfortran set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -ffree-form") @@ -44,10 +49,6 @@ elseif (Fortran_COMPILER_NAME MATCHES "ifort.*") # ifort (untested) set (CMAKE_Fortran_FLAGS_RELEASE "-O3 -free") set (CMAKE_Fortran_FLAGS_DEBUG "-free -O0 -g") -elseif (Fortran_COMPILER_NAME MATCHES "g77") - # g77 - set (CMAKE_Fortran_FLAGS_RELEASE "-funroll-all-loops -fno-f2c -O3 -m32") - set (CMAKE_Fortran_FLAGS_DEBUG "-fno-f2c -O0 -g -m32") else (Fortran_COMPILER_NAME MATCHES "gfortran.*") message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER}) message ("Fortran compiler: " ${Fortran_COMPILER_NAME}) @@ -57,12 +58,21 @@ else (Fortran_COMPILER_NAME MATCHES "gfortran.*") endif (Fortran_COMPILER_NAME MATCHES "gfortran.*") #### End based on https://cmake.org/Wiki/CMakeForFortranExamplea #### +if (USE_DEVEL) + set (DEVEL "-DDEVEL=1") +endif (USE_DEVEL) -# Recurse into the "PSCF" subdirectory. This does not actually -# cause another cmake executable to run. The same process will walk through -# the project's entire directory structure. -add_subdirectory (src) +if (BUILD_DMG) + set (BUILD_MACOSX_BUNDLE "MACOSX_BUNDLE") + set (MACOSX_BUNDLE_EXT ".app") +endif (BUILD_DMG) +set(FORPEDO ${CMAKE_SOURCE_DIR}/tools/python/preprocess-0.6.1/preprocess.py) + +find_package(LAPACK) + +# Recurse into the "src" subdirectory. +add_subdirectory (src) # Setup the packaging set(CPACK_PACKAGE_NAME "pscf") diff --git a/make/INSTALL b/make/INSTALL index 167075d..ba2a95a 100644 --- a/make/INSTALL +++ b/make/INSTALL @@ -58,7 +58,6 @@ defined in config.mk, enter: 6. If desired, to remove all of the files generated by compilation from the make/ directory, enter: - > make clean To remove any files that were created by the "make install" command, diff --git a/make/Makefile b/make/Makefile index 57670a7..8ed9c9b 100644 --- a/make/Makefile +++ b/make/Makefile @@ -54,17 +54,21 @@ pscf.f90: $(SRC)/pscf.fp.f90 # ====== Install ================================================= BIN_DIR=$(INSTALL)/bin -PYTHON_DIR=$(INSTALL)/lib/python2.7/site-packages +PYTHON_DIR=$(INSTALL)/lib/python2.7/site-packages/pscf +MATLAB_DIR=$(INSTALL)/lib/matlab install: pscf mkdir -p $(BIN_DIR) cp pscf $(BIN_DIR)/pscf cp $(REPO)/tools/bin/pscf-env $(BIN_DIR) cp $(REPO)/tools/bin/pscf-read-sweep $(BIN_DIR) - mkdir -p $(PYTHON_DIR)/pscf - cp $(REPO)/tools/python/pscf/*.py $(PYTHON_DIR)/pscf + mkdir -p $(PYTHON_DIR) + cp $(REPO)/tools/python/pscf/*.py $(PYTHON_DIR) + mkdir -p $(MATLAB_DIR) + cp $(REPO)/tools/matlab/*.m $(MATLAB_DIR) uninstall: rm -rf $(BIN_DIR)/pscf* - rm -rf $(PYTHON_DIR)/pscf/* + rm -rf $(PYTHON_DIR)/* + rm -rf $(MATLAB_DIR)/* diff --git a/make/modules.mk b/make/modules.mk index a012aa8..feb5159 100644 --- a/make/modules.mk +++ b/make/modules.mk @@ -1,4 +1,3 @@ -# ====== Modules ================================================= # Utility modules @@ -23,7 +22,7 @@ grid_mod.o: $(SRC)/grid_mod.f90 const_mod.o\ $(FFT_FILE).o: $(SRC)/$(FFT_FILE).f90 const_mod.o $(F90) $(FAST) -c $(SRC)/$(FFT_FILE).f90 -# crystallography modules +# Crystallography modules group_mod.o: $(SRC)/group_mod.f90 const_mod.o version_mod.o $(F90) $(FAST) -c $(SRC)/group_mod.f90 @@ -51,7 +50,7 @@ field_io_mod.o: $(SRC)/field_io_mod.f90 const_mod.o io_mod.o\ $(FFT_FILE).o grid_basis_mod.o $(F90) $(FAST) -c $(SRC)/field_io_mod.f90 -# scft modules +# SCFT modules chemistry_mod.o: $(SRC)/chemistry_mod.f90 const_mod.o io_mod.o $(F90) $(FAST) -c $(SRC)/chemistry_mod.f90 @@ -76,7 +75,7 @@ spinodal_mod.o: $(SRC)/spinodal_mod.f90 const_mod.o io_mod.o\ response_pd_mod.o chemistry_mod.o $(F90) $(FAST) -c $(SRC)/spinodal_mod.f90 -# iteration modules +# Iteration modules iterate_mod.f90: $(SRC)/iterate_mod.fp.f90 $(FORPEDO) $(DEVEL) $(SRC)/iterate_mod.fp.f90 > iterate_mod.f90 @@ -95,7 +94,8 @@ sweep_mod.o: $(SRC)/sweep_mod.f90 const_mod.o io_mod.o\ chemistry_mod.o unit_cell_mod.o basis_mod.o $(F90) $(FAST) -c $(SRC)/sweep_mod.f90 -# response directory +# Linear response modules + response_step_mod.o: $(SRC)/response_step_mod.f90\ chemistry_mod.o $(FFT_FILE).o $(F90) $(FAST) -c $(SRC)/response_step_mod.f90 diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4e3c107..1b32072 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,40 +1,28 @@ -# TODO: move these options to the top file - -if (USE_FFT3) - set (FFT_FILE fft3_mod.f90) - find_package(FFTW) -else (USE_FFT3) - set (FFT_FILE fft2_mod.f90) - find_package(FFTW) -endif (USE_FFT3) - -if (USE_DEVEL) - set (DEVEL "-DDEVEL=1") -endif (USE_DEVEL) - -if (BUILD_DMG) - set (BUILD_MACOSX_BUNDLE "MACOSX_BUNDLE") - set (MACOSX_BUNDLE_EXT ".app") -endif (BUILD_DMG) - -set(FORPEDO ${CMAKE_SOURCE_DIR}/tools/python/preprocess-0.6.1/preprocess.py) - -find_package(LAPACK) +# Preprocess scf_mod module add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/scf_mod.f90 COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/scf_mod.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/scf_mod.f90 DEPENDS scf_mod.fp.f90 ) +# Preprocess iterate_mod module add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/iterate_mod.f90 COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/iterate_mod.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/iterate_mod.f90 DEPENDS iterate_mod.fp.f90 ) -# Create a library called "pscf_lib", which includes module source files. -# The extension is already found. Any number of sources could be listed here. +# Choose version of wrapper for FFTW library +if (USE_FFT3) + set (FFT_FILE fft3_mod.f90) + find_package(FFTW) +else (USE_FFT3) + set (FFT_FILE fft2_mod.f90) + find_package(FFTW) +endif (USE_FFT3) + +# Create library called "pscf_lib" that contains all module files. add_library(pscf_lib const_mod.f90 io_mod.f90 @@ -61,35 +49,37 @@ add_library(pscf_lib spinodal_mod.f90 ) -# Ensure that linker can find any headers or fortram *.mod module files, -# including preprocessor geneerated sources placed in the build directory. -# This is the in-core source dir +# Add source and build directories to list of include directories +# used when building pscf_lib. We add the build directory to ensure +# that the compiler/archiver can find fortran module (*.mod) files +# and preprocessor generated source (*.f90) files, all of which are +# placed in the build directory. + +# Add the source directory. target_include_directories (pscf_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) -# This is the out-of-source build dir, with generated sources + +# Add the out-of-source build dir target_include_directories (pscf_lib PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) -# Link to FFTW and Lapack libraries +# Link pscf_lib to FFTW and Lapack libraries target_link_libraries(pscf_lib LINK_PUBLIC ${FFTW_LIBRARIES} ${LAPACK_LIBRARIES}) - -### PREPROCESS THE MAIN FILE ### +# Preprocess the main pscf program add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/pscf.f90 COMMAND ${FORPEDO} ${DEVEL} ${CMAKE_CURRENT_SOURCE_DIR}/pscf.fp.f90 > ${CMAKE_CURRENT_BINARY_DIR}/pscf.f90 DEPENDS pscf.fp.f90 ) +# Build executable pscf from pscf.f90 add_executable(pscf ${BUILD_MACOSX_BUNDLE} WIN32 ${CMAKE_CURRENT_BINARY_DIR}/pscf.f90 ) -set(APPS ${CMAKE_CURRENT_BINARY_DIR}/pscf${MACOSX_BUNDLE_EXT}) -set(DIRS "") - -# TODO: clean up these links target_link_libraries(pscf LINK_PUBLIC pscf_lib) +# Install target install(TARGETS pscf BUNDLE DESTINATION . COMPONENT Runtime RUNTIME DESTINATION bin COMPONENT Runtime @@ -97,6 +87,9 @@ install(TARGETS pscf ARCHIVE DESTINATION lib/static COMPONENT Runtime ) +set(APPS ${CMAKE_CURRENT_BINARY_DIR}/pscf${MACOSX_BUNDLE_EXT}) +set(DIRS "") + if (BUILD_DMG) # Copy libraries into the DMG INSTALL(CODE " @@ -106,8 +99,3 @@ if (BUILD_DMG) " COMPONENT Runtime) endif (BUILD_DMG) -#install(TARGETS pscf -# RUNTIME DESTINATION bin -# LIBRARY DESTINATION lib -# ARCHIVE DESTINATION lib/static -#) diff --git a/src/README b/src/README index af1bcdd..9711219 100644 --- a/src/README +++ b/src/README @@ -1,214 +1,218 @@ +======================================================================== +Source File Name Conventions: -File Name Conventions: + Files named _mod.f90 are Fortran 90 module source files + Files named .fp.f90 are preprocessor input files. - Files named _mod.f90 are Fortran 90 modules - Files named .fp.f90 are preprocessor input files. - - The un-preprocessed version of the main program is src/pscf.fp.f90. + The un-preprocessed version of the main program is src/pscf.fp.f90. A corresponding compilable fortran program is generated by applying - a preprocessor script, which installs the resulting program in the - build directory. See the end of this file for a discussion of the + a preprocessor script, which installs the resulting program in the + build directory. See the end of this file for a discussion of the use of a preprocessor. -Main Program: +======================================================================== +Source Files: pscf.fp.f90 - Main program (preprocessor input file). Used to generate the + Main program (preprocessor input file). Used to create a compilable fortran file pscf.f90 in the build directory. Utility Modules: -======= -const_mod.f - Defines global variable dim (= # dimensions of space) and +---------------- + +const_mod.f90 + Defines global variable dim (= # dimensions of space) and parameter long (=real kind for double precision). Used by all other modules. -io_mod.f +io_mod.f90 Defines generic interfaces for parameter input and output. -field_io_mod.f - Routines to input and output fields, as lists of coefficients +field_io_mod.f90 + Routines to input and output fields, as lists of coefficients of symmetry-adapted basis functions. -string_mod.f +string_mod.f90 Utilities to convert integers to strings. Used in io formats. -version_mod - Defines a version_type derived type, with major and minor +version_mod.f90 + Defines a version_type derived type, with major and minor integer version numbers, and routines to read and write this. Version numbers are used to specify file format versions. FFT grid Modules: +---------------- -fft3_mod.f - Fortran 90 wrappers for FFTW Fourier transform functions, +fft3_mod.f90 + Fortran 90 wrappers for FFTW Fourier transform functions, for FFTW version 3 (Either this or fft2_mod.f90 is linked) -fft2_mod.f +fft2_mod.f90 Fortran 90 wrappers for FFTW Fourier transform functions, for FFTW version 2 (Either this or fft3_mod.f90 is linked) -grid_mod.f +grid_mod.f90 Defines scf data structures on an FFT grid, and routines to allocate, deallocate, and manipulate these structures. - Defines ngrid, rho_grid, omega_grid, and ksq_grid. Also - contains several functions for manipulating single FFT + Defines ngrid, rho_grid, omega_grid, and ksq_grid. Also + contains several functions for manipulating single FFT wavevectors, including norm, G_to_fft and G_to_bz. Crystallography Modules: +------------------------ -unit_cell_mod.f - Creates Bravais and reciprocal basis vectors, using user - supplied name of crystal system and cell parameters. Defines - data structures specifying cell parameters, Bravais and - reciprocal lattice basis vectors, and some related quantities. +unit_cell_mod.f90 + Creates Bravais and reciprocal basis vectors, using user + supplied name of crystal system and cell parameters. Defines + data structures specifying cell parameters, Bravais and + reciprocal lattice basis vectors, and some related quantities. -group_mod.f - Defines derived types and operations for space group +group_mod.f90 + Defines derived types and operations for space group symmetries and space groups -space_groups_mod.f - Routine space_groups creates space group specified by user - by name or number, using look-up table of all 230 3D space - groups, 17 2D plane groups, and 2 1D groups. +space_groups_mod.f90 + Routine space_groups creates space group specified by user + by name or number, using look-up table of all 230 3D space + groups, 17 2D plane groups, and 2 1D groups. -basis_mod.f +basis_mod.f90 Module to construct basis functions for periodic crystal. - Defines data structures describing reciprocal wavevectors and - stars. Contains routines to generate reciprocal wavevectors, + Defines data structures describing reciprocal wavevectors and + stars. Contains routines to generate reciprocal wavevectors, to group them into stars of wavevectors related by symmetry, and to calculate coefficients of plane waves in symmetry - adapted basis functions. A discussion of the data structures + adapted basis functions. A discussion of the data structures and conventions used in basis_mod is given within a long - comment within basis_mod, which is reproduced in the - developer/api documentation for the module. + comment within basis_mod, which is reproduced in the + developer/api documentation for the module. -grid_basis_mod.f +grid_basis_mod.f90 Contains routines to convert between representations of a field as a 1D array of coefficients of symmetry-adpated basis functions and as a set of values defined at points - on a regular grid. + on a regular grid. -Self-Consistent Field Modules: +Self-consistent field modules: +------------------------------ -chemistry_mod.f - Defines data structures required to specify chemistry of an +chemistry_mod.f90 + Defines data structures required to specify chemistry of an incompressible polymer blend (chi, Kuhn lengths, block lengths, - molecular volume fractions etc.), and routines to input and - output this data. + molecular volume fractions etc.), and routines to input and + output this data. -chain_mod.f +chain_mod.f90 Defines a derived type chain_type that contains the - q(r,s) =qf and q^{+}(r,s) =qr functions for a chain, and - information about discretization in r and s. Also defines - arrays of chain_types and subroutines to allocate and - destroy these arrays. + q(r,s) =qf and q^{+}(r,s) =qr functions for a chain, and + information about discretization in r and s. Also defines + arrays of chain_types and subroutines to allocate and + destroy these arrays. -step_mod.f +step_mod.f90 Contains routines to solve diffusion equation by the - pseudo-spectral method, and to calculate monomer + pseudo-spectral method, and to calculate monomer concentration fields, the free and energy, and stress. Note: scf/scf_mod.fp.f90 is a preprocessor input file, which is used to generate file scf_mod.f90 in the build directory. - -scf_mod.fp.f +scf_mod.fp.f90 Contains routines to solve diffusion equation by the - pseudo-spectral method, and to calculate monomer + pseudo-spectral method, and to calculate monomer concentration fields, the free and energy, and stress. - Note: scf_mod.fp.f is a preprocessor input file, which - is used to generate file scf_mod.f in the build directory. + Note: scf_mod.fp.f90 is a preprocessor input file, which + is used to generate file scf_mod.f90 in the build directory. -scf/chain_mod.f90 +chain_mod.f90 Defines a derived type chain_type that contains the - q(r,s) =qf and q^{+}(r,s) =qr functions for a chain, and - information about discretization in r and s. Also defines - arrays of chain_types and subroutines to allocate and - destroy these arrays. + q(r,s) =qf and q^{+}(r,s) =qr functions for a chain, and + information about discretization in r and s. Also defines + arrays of chain_types and subroutines to allocate and + destroy these arrays. Iteration Modules: +------------------ -iterate_mod.fp.f - Iterates scf equations to convergence. Currently contains - Newton-Raphson (NR) algorithm for both fixed and variable - unit cells. Note: File iterate_mod.fp.f90 is a preprocessor - input file, which is used to generate file iterate_mod.f90 - in the build directory. +iterate_mod.fp.f90 + Iterates scf equations to convergence. + Note: iterate_mod.fp.f90 is a preprocessor input file, which + is used to generate file iterate_mod.f90 in the build directory. -sweep_mod - Used to conduct a "sweep" along a path through the space +sweep_mod.f90 + Used to conduct a "sweep" along a path through the space of SCF input parameters (i.e., chi, block_lengths, etc). - Implements 1st and 2nd order continuation of solutions + Implements 1st and 2nd order continuation of solutions along such a path. -respond_pd_mod.f +respond_pd_mod.f90 Calculate response of periodic structures in form needed to construct approximate Jacobian for quasi-Newton method in - iterate_mod.f + iterate_mod.f90 Linear Response Modules: +------------------------ -response_mod.f +response_mod.f90 Module for calculating SCF linear response of period structure -response_step_mod.f - Routines to integrate inhomogeneous PDE required in the ideal +response_step_mod.f90 + Routines to integrate inhomogeneous PDE required in the ideal gas perturbation theory -extrapolate_mod.f - Implements extrapolation with respect to contour length step - size ds. +extrapolate_mod.f90 + Implements extrapolation with respect to contour length step + size ds. + +======================================================================== +Preprocessor Usage ---------------------------------------------------------------------- -! Preprocessor Usage ! ---------------------------------------------------------------------- + Several fortran files are generated by applying a python + preprocessor script named FORPEDO to corresponding preprocessor + input files. This script is included as part of the pscf package + in a subdirectory of the tools/python directory. - Several fortran files are generated by applying a python - preprocessor script named FORPEDO to corresponding preprocessor - input files. This script is included as part of the pscf package - in a subdirectory of the tools/python directory. - The relevant preprocesor input files are: - src/pscf.fp.f90 - src/iterate_mod.fp.f90 - src/scf_mod.fp.f90 + src/pscf.fp.f90 + src/iterate_mod.fp.f90 + src/scf_mod.fp.f90 These are fortran files that contain preprocessor directives that - control conditional compilation of some sections of code. The - FORPEDO preprocessor is used here in manner similar to the use - of the standard C preprocessor to control conditional compilation - in C and C++ programs. Preprocessing each of these files generates - a Fortran file with the same name as the preprocessor input file - without the .fp. string. The resulting fortran files are thus named: - - build/scf.f90 - build/iterate_mod.f90 - build/scf_mod.f90 - - These preprocessed fortran files installed in the build directory - from which make is invoked, rather than in the src/ directory. If - pscf is built using the simple makefile that is provided in the - pscf/make directory, then these files are installed in the - pscf/make directory. If pscf is built out-of-source using cmake, - by invoking cmake and make from a build directory outside the - pscf/ directory tree, then these fortran files will be installed - in that build directory tree. - - An external script is used for preprocessing because Fortran - (unlike C) does not provide a standard preprocessor. The use of - a preprocessor makes it easier for developers to maintain code - that contains experimental features that are not yet ready to be - released as part of a stable version, without maintaining separate - development and release version. Sections of code containing - features that are not ready for prime time are surrounded by + control conditional compilation of some sections of code. The + FORPEDO preprocessor is used here in manner similar to the use + of the standard C preprocessor to control conditional compilation + in C and C++ programs. Preprocessing each of these files generates + a Fortran file with the same name as the preprocessor input file + without the ".fp." string. The resulting fortran files are thus + named: + + build/scf.f90 + build/iterate_mod.f90 + build/scf_mod.f90 + + These preprocessed fortran files installed in the build directory + from which make is invoked, rather than in the src/ directory. If + pscf is built using the simple makefile that is provided in the + pscf/make directory, then the build directory is the directory + pscf/make. If pscf is built out-of-source using cmake, by invoking + cmake and make from a build directory outside the pscf/ directory + tree, then these fortran files will be installed in that build + directory tree. + + An external script is used for preprocessing because Fortran + (unlike C) does not provide a standard preprocessor. The use of + a preprocessor makes it easier for developers to maintain code + that contains experimental features that are not yet ready to be + released as part of a stable version, without maintaining separate + development and release version. Sections of code containing + features that are not ready for prime time are surrounded by conditional compilation directives and are excluded from release - versions of the corresponding fortran files. + versions of the corresponding fortran files. - If the *.fp.f90 preprocessor files are modified, and the program - is then recompiled using either cmake or the make file in the - pscf/make directory, then the *.f90 fortran files will be regenerated - regenerated as part of the build process. When compiled with make - in the src/make directory, the src/make/*.f90 fortran files are also + If the *.fp.f90 preprocessor files are modified, and the program + is then recompiled using either cmake or the make file in the + pscf/make directory, then the *.f90 fortran files will be automatically + regenerated as part of the build process. When compiled with make in + the make directory, the generated make/*.f90 fortran files are also removed by the 'make clean' command.