Designing Scientific Applications on GPUs