One external library is NetCDF version 3. We've also got the option of using NetCDF version 4, though we are so far not using its nifty new features, such as parallel I/O for parallel jobs. We also migrated to the Fortran 90 interface, which consists of a library and one or two module files. See makefile for how to tell ROMS where these are located. You will have to use a copy of the library and module files which was compiled using the same compiler you are using to compile ROMS - this is especially true for the module files.
Model Coupling Toolkit
We used the Model Coupling Toolkit (MCT; http://www-unix.mcs.anl.gov/mct/; Larson, et al., 2004; Jacob et al., 2005) to couple ROMS with SWAN (Warner et al., in prep), and ROMS to WRF. MCT is an open-source software library, distributed as a set of Fortran90 modules for constructing a coupled model system from individual component models. Each component model has its own grid and runs on its own set of processors. The MCT provides protocols for decomposition and allocation of model grids among different processors, efficient transfer of data fields between the different models, and interpolation algorithms for the data fields that are transferred. SWAN sends to ROMS arrays of wave height, wavelength, average wave periods at the surface and near the bottom, wave propagation direction, near-bottom orbital velocity, and wave-energy dissipation rate. ROMS provides to SWAN arrays of water depth, sea-surface elevation, and current velocity. Data exchange between SWAN and ROMS occurs at user-defined synchronization intervals. The frequency of data exchange depends on the application. If the exchanged fields fluctuate rapidly, more frequent synchronization is required. However, data exchange increases run time, so experience is required to determine the optimum synchronization interval for each application.