SET(GFS_phys_source_code ${GFS_PHYS_SRC}/physcons.f
                        ${GFS_PHYS_SRC}/funcphys.f
                        ${GFS_PHYS_SRC}/machine.f
                        ${GFS_PHYS_SRC}/mersenne_twister.f
                        ${GFS_PHYS_SRC}/physparam.f
                        ${GFS_PHYS_SRC}/namelist_soilveg.f
                        ${GFS_PHYS_SRC}/set_soilveg.f
                        ${GFS_PHYS_SRC}/nuopc_physics.F90
                        ${GFS_PHYS_SRC}/grrad.f
                        ${GFS_PHYS_SRC}/rad_initialize.f
                        ${GFS_PHYS_SRC}/radlw_main.f
                        ${GFS_PHYS_SRC}/radlw_param.f
                        ${GFS_PHYS_SRC}/radlw_datatb.f
                        ${GFS_PHYS_SRC}/radiation_astronomy.f
                        ${GFS_PHYS_SRC}/iounitdef.f
                        ${GFS_PHYS_SRC}/radiation_gases.f
                        ${GFS_PHYS_SRC}/ozne_def.f
                        ${GFS_PHYS_SRC}/radiation_aerosols.f
                        ${GFS_PHYS_SRC}/radsw_main.f
                        ${GFS_PHYS_SRC}/radsw_param.f
                        ${GFS_PHYS_SRC}/radsw_datatb.f
                        ${GFS_PHYS_SRC}/gfs_phy_tracer_config.f
                        ${GFS_PHYS_SRC}/radiation_surface.f
                        ${GFS_PHYS_SRC}/radiation_clouds.f
                        ${GFS_PHYS_SRC}/module_bfmicrophysics.f
                        ${GFS_PHYS_SRC}/rascnvv2.f
                        ${GFS_PHYS_SRC}/gbphys.f
                        ${GFS_PHYS_SRC}/module_nst_water_prop.f
                        ${GFS_PHYS_SRC}/module_nst_parameters.f
                        ${GFS_PHYS_SRC}/module_nst_model.f
                        ${GFS_PHYS_SRC}/cs_conv.f
                        ${GFS_PHYS_SRC}/calpreciptype.f
                        ${GFS_PHYS_SRC}/cnvc90.f
                        ${GFS_PHYS_SRC}/dcyc2.pre.rad.f
                        ${GFS_PHYS_SRC}/dcyc2.f
                        ${GFS_PHYS_SRC}/get_prs.f
                        ${GFS_PHYS_SRC}/tracer_const_h.f
                        ${GFS_PHYS_SRC}/gscond.f
                        ${GFS_PHYS_SRC}/gscondp.f
                        ${GFS_PHYS_SRC}/gsmddrive.f
                        ${GFS_PHYS_SRC}/gwdc.f
                        ${GFS_PHYS_SRC}/gwdps.f
                        ${GFS_PHYS_SRC}/ideaca.f
                        ${GFS_PHYS_SRC}/lrgsclr.f
                        ${GFS_PHYS_SRC}/mfdeepcnv.f
                        ${GFS_PHYS_SRC}/mfshalcnv.f
                        ${GFS_PHYS_SRC}/moninedmf.f
                        ${GFS_PHYS_SRC}/moninshoc.f
                        ${GFS_PHYS_SRC}/moninq.f
                        ${GFS_PHYS_SRC}/moninp1.f
                        ${GFS_PHYS_SRC}/moninp.f
                        ${GFS_PHYS_SRC}/mfpbl.f
                        ${GFS_PHYS_SRC}/mstcnv.f
                        ${GFS_PHYS_SRC}/precpd.f
                        ${GFS_PHYS_SRC}/precpdp.f
                        ${GFS_PHYS_SRC}/precpd_shoc.f
                        ${GFS_PHYS_SRC}/progt2.f
                        ${GFS_PHYS_SRC}/rayleigh_damp.f
                        ${GFS_PHYS_SRC}/progtm_module.f
                        ${GFS_PHYS_SRC}/sascnv.f
                        ${GFS_PHYS_SRC}/sascnvn.f
                        ${GFS_PHYS_SRC}/sfc_diff.f
                        ${GFS_PHYS_SRC}/sfc_nst.f
                        ${GFS_PHYS_SRC}/sfc_ocean.f
                        ${GFS_PHYS_SRC}/sfc_drv.f
                        ${GFS_PHYS_SRC}/sfc_land.f
                        ${GFS_PHYS_SRC}/sfc_cice.f
                        ${GFS_PHYS_SRC}/sfc_sice.f
                        ${GFS_PHYS_SRC}/sfc_diag.f
                        ${GFS_PHYS_SRC}/date_def.f
                        ${GFS_PHYS_SRC}/sflx.f
                        ${GFS_PHYS_SRC}/shalcnv.f
                        ${GFS_PHYS_SRC}/shalcv.f
                        ${GFS_PHYS_SRC}/shalcv_opr.f
                        ${GFS_PHYS_SRC}/mstadbtn.f
                        ${GFS_PHYS_SRC}/mstadb.f
                        ${GFS_PHYS_SRC}/gcm_shoc.f
                        ${GFS_PHYS_SRC}/tridi2t3.f
                        ${GFS_PHYS_SRC}/module_cu_gf_driver.f
                        ${GFS_PHYS_SRC}/module_cu_gf_deep.f
                        ${GFS_PHYS_SRC}/module_cu_gf_sh.f
                        ${GFS_PHYS_SRC}/h2ointerp.f
                        ${GFS_PHYS_SRC}/h2o_def.f
                        ${GFS_PHYS_SRC}/h2ophys.f
                        ${GFS_PHYS_SRC}/ozinterp.f
                        ${GFS_PHYS_SRC}/ozphys.f
                        ${GFS_PHYS_SRC}/ozphys_2015.f
                        ${GFS_PHYS_SRC}/m_micro_driver.f
                        ${GFS_PHYS_SRC}/aer_cloud.f
                        ${GFS_PHYS_SRC}/cldmacro.f
                        ${GFS_PHYS_SRC}/cldwat2m_micro.f
                        ${GFS_PHYS_SRC}/wv_saturation.f
#                        ${GFS_PHYS_SRC}/gocart_tracer_config.f
)
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
  # gfortran
  ADD_COMPILE_OPTIONS(-cpp -Wuninitialized)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/physcons.f ${GFS_PHYS_SRC}/funcphys.f  ${GFS_PHYS_SRC}/module_nst_parameters.f ${GFS_PHYS_SRC}/cs_conv.f ${GFS_PHYS_SRC}/calpreciptype.f ${GFS_PHYS_SRC}/m_micro_driver.f PROPERTIES COMPILE_FLAGS -ffree-form)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_bfmicrophysics.f ${GFS_PHYS_SRC}/gbphys.f ${GFS_PHYS_SRC}/gsmddrive.f ${GFS_PHYS_SRC}/sfc_diff.f ${GFS_PHYS_SRC}/sfc_diag.f ${GFS_PHYS_SRC}/sflx.f PROPERTIES COMPILE_FLAGS -fdefault-real-8)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_nst_model.f PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -ffree-form")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_nst_water_prop.f ${GFS_PHYS_SRC}/gcm_shoc.f PROPERTIES COMPILE_FLAGS "-ffree-line-length-none -fdefault-real-8 -ffree-form")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_cu_gf_driver.f ${GFS_PHYS_SRC}/module_cu_gf_deep.f ${GFS_PHYS_SRC}/module_cu_gf_sh.f PROPERTIES COMPILE_FLAGS "-ffree-line-length-none -fdefault-real-8 -ffree-form")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/mersenne_twister.f PROPERTIES COMPILE_FLAGS "-fdefault-real-8 -fno-range-check")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/aer_cloud.f ${GFS_PHYS_SRC}/wv_saturation.f ${GFS_PHYS_SRC}/cldwat2m_micro.f PROPERTIES COMPILE_FLAGS "-DNEMS_GSM")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/cldmacro.f PROPERTIES COMPILE_FLAGS "-DNEMS_GSM -fdefault-real-8")
elseif (Fortran_COMPILER_NAME MATCHES "ifort.*")
  # ifort (untested)
  ADD_COMPILE_OPTIONS(-fpp)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/physcons.f ${GFS_PHYS_SRC}/funcphys.f  ${GFS_PHYS_SRC}/module_nst_parameters.f ${GFS_PHYS_SRC}/cs_conv.f ${GFS_PHYS_SRC}/calpreciptype.f ${GFS_PHYS_SRC}/m_micro_driver.f PROPERTIES COMPILE_FLAGS -free)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_bfmicrophysics.f ${GFS_PHYS_SRC}/gbphys.f ${GFS_PHYS_SRC}/gsmddrive.f ${GFS_PHYS_SRC}/sfc_diff.f ${GFS_PHYS_SRC}/sfc_diag.f ${GFS_PHYS_SRC}/sflx.f PROPERTIES COMPILE_FLAGS -r8)
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_nst_model.f PROPERTIES COMPILE_FLAGS "-r8 -free")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_nst_water_prop.f ${GFS_PHYS_SRC}/gcm_shoc.f PROPERTIES COMPILE_FLAGS "-extend-source 132 -r8 -free")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/module_cu_gf_driver.f ${GFS_PHYS_SRC}/module_cu_gf_deep.f ${GFS_PHYS_SRC}/module_cu_gf_sh.f PROPERTIES COMPILE_FLAGS "-r8 -free")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/mersenne_twister.f PROPERTIES COMPILE_FLAGS "-r8 -ftz")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/aer_cloud.f ${GFS_PHYS_SRC}/wv_saturation.f ${GFS_PHYS_SRC}/cldwat2m_micro.f PROPERTIES COMPILE_FLAGS "-DNEMS_GSM")
  SET_SOURCE_FILES_PROPERTIES(${GFS_PHYS_SRC}/cldmacro.f PROPERTIES COMPILE_FLAGS "-DNEMS_GSM -r8")
elseif (Fortran_COMPILER_NAME MATCHES "g77")
  # g77
else (Fortran_COMPILER_NAME MATCHES "gfortran.*")
  message ("CMAKE_Fortran_COMPILER full path: " ${CMAKE_Fortran_COMPILER})
  message ("Fortran compiler: " ${Fortran_COMPILER_NAME})
  message ("This program has only been compiled with gfortran and ifort. If another compiler is needed, the appropriate flags must be added in /src/nems_trunk_atmos/phys/CMakeLists.txt")
endif (Fortran_COMPILER_NAME MATCHES "gfortran.*")

INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/w3nco_v2.0.6)
#INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/${NEMS_SRC}/${GOCART_PATH})
ADD_LIBRARY(gfs_phys STATIC ${GFS_phys_source_code})
#TARGET_LINK_LIBRARIES(gfs_phys w3 gocart)
TARGET_LINK_LIBRARIES(gfs_phys w3)
