SCIENTIFIC SOFTWARE DESIGN THROUGH SCIENTIFIC COMPUTING PATTERNS