<?php
namespace Airavata\Model\AppCatalog\Parallelism;

/**
 * Autogenerated by Thrift Compiler (0.9.3)
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 *  @generated
 */
use Thrift\Base\TBase;
use Thrift\Type\TType;
use Thrift\Type\TMessageType;
use Thrift\Exception\TException;
use Thrift\Exception\TProtocolException;
use Thrift\Protocol\TProtocol;
use Thrift\Protocol\TBinaryProtocolAccelerated;
use Thrift\Exception\TApplicationException;


/**
 * Enumeration of application parallelism supported by Airavata
 * 
 * SERIAL:
 *  Single processor applications without any parallelization.
 * 
 * MPI:
 *  Messaging Passing Interface.
 * 
 * OPENMP:
 *  Shared Memory Implementtaion.
 * 
 * OPENMP_MPI:
 *  Hybrid Applications.
 * 
 */
final class ApplicationParallelismType {
  const SERIAL = 0;
  const MPI = 1;
  const OPENMP = 2;
  const OPENMP_MPI = 3;
  const CCM = 4;
  const CRAY_MPI = 5;
  static public $__names = array(
    0 => 'SERIAL',
    1 => 'MPI',
    2 => 'OPENMP',
    3 => 'OPENMP_MPI',
    4 => 'CCM',
    5 => 'CRAY_MPI',
  );
}


