A parallel program is usually written using either data parallelism or task parallelism. With data parallelism, each processor executes the same code but operates on different data, whereas in task parallelism the program is divided into tasks, and each task is executed on a separate processor. Task and data parallelism have complementary strengths that are appropriate for different problems. However, some programs can benefit from their integration. One key problem with an integrated approach is the processor assignment problem, which is how to assign the different processors to tasks. Determining a good processor assignment is complex and often requires significant experimentation. We have developed a tool called TAP for executing integrated parallel programs with user defined processor assignments. This thesis describes the user interface and implementation details of TAP. We also discuss how the framework was used to study the behavior of PHOENIX, a scientific stellar atmospheric code.