3dNwarpApply, I believe, is the only program that will handle multiple grids for the warps. Both 3dNwarpCat and 3dNwarpCalc require the same grid for combinations of warp datasets. There, not only should the grid be the same, but the extents of the dataset should be the same. 3dNwarpApply will create a common space in memory that covers all input datasets, and that can consume quite a bit of memory if datasets are far apart and small voxels. One alternative is to resample the warps to the other grid assuming the datasets overlap completely. Then concatenate by simply adding the deformation distances. You can also compute the warps starting with an @Align_Centers step first to get the most overlap of the grids. That will make the procedure faster and less memory intensive too. In all cases, it's best to compare your results with the 3dNwarpApply results.