ORCA

Descrição

De acordo com a página do ORCA, ORCA é um pacote de software de química quântica que fornece métodos avançados nas áreas de teoria do funcional da densidade (DFT) e métodos baseados em função de onda correlacionada. É amplamente utilizado em química computacional.

Versões Disponíveis

  • orca/4.0.1 (default)

  • orca/4.2.1

  • orca/5.0.3

  • orca/5.0.4

  • orca/6.0.0

  • orca/6.0.1

  • orca/6.1.0

Carregando o Módulo

# Carregar ORCA
module load orca/6.1.0

# Verificar instalação
orca --version

Submissão de Jobs Seriais

submit_orca_serial.sh
#!/bin/bash
#SBATCH -J orca_serial
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 24:00:00
#SBATCH --mem=8G

export INPUT="water.inp"
export OUTPUT="water.out"

module load orca/6.1.0

job-nanny orca water.inp

Submissão de Jobs Paralelos (OpenMP)

submit_orca_omp.sh
#!/bin/bash
#SBATCH -J orca_omp
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G

export INPUT="benzene.inp"
export OUTPUT="benzene.out"

module load orca/6.1.0

# ORCA usa threads automaticamente
job-nanny orca benzene.inp

Nota

O número de threads deve ser especificado no arquivo de entrada ORCA usando a diretiva %pal nprocs.

Submissão de Jobs MPI

submit_orca_mpi.sh
#!/bin/bash
#SBATCH -J orca_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=14
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=4G

export INPUT="large.inp"
export OUTPUT="large.out"

module load orca/6.1.0
module load openmpi/4.1.8

# ORCA chama mpirun internamente, não usar mpirun explicitamente
job-nanny $ORCA_BIN large.inp

Importante

ORCA gerencia a execução MPI internamente. Não use mpirun diretamente, bastando usar apenas $ORCA_BIN large.inp. O número de processos deve ser especificado no arquivo de entrada.

É possível que ocorra falha no Orca ao utilizar paralelização MPI com 2 ou mais nós. Neste caso, uma possível solução seria criar um arquivo contendo o nomes dos nós através do comando srun hostname -s | sort -u > hosts.$SLURM_JOB_ID:

submit_orca_mpi.sh
#!/bin/bash
#SBATCH -J orca_mpi
#SBATCH -N 2
#SBATCH --ntasks-per-node=14
#SBATCH -t 72:00:00
#SBATCH --mem-per-cpu=4G

export INPUT="large.inp"
export OUTPUT="large.out"

module load orca/6.1.0
module load openmpi/4.1.8

srun hostname -s | sort -u > hosts.$SLURM_JOB_ID

# ORCA chama mpirun internamente, não usar mpirun explicitamente
job-nanny $ORCA_BIN large.inp

Exemplo de Arquivo de Entrada

water.inp
! RHF SVP OPT

%pal
  nprocs 8  ! Número de threads/processos
  end

%base "water"

* xyz 0 1
O    0.000000    0.000000    0.000000
H    0.000000    0.757000    0.586000
H    0.000000   -0.757000    0.586000
*

Cálculo DFT com Otimização

submit_orca_dft.sh
#!/bin/bash
#SBATCH -J orca_dft
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 48:00:00
#SBATCH --mem=32G

export INPUT="dft_opt.inp"
export OUTPUT="dft_opt.out"

module load orca/6.1.0

job-nanny orca dft_opt.inp
dft_opt.inp
! B3LYP DEF2-TZVP OPT FREQ

%pal
  nprocs 8
  end

%maxcore 4000

%scf
  maxiter 500
  tole 1e-6
  end

* xyz 0 1
C    0.000000    0.000000    0.000000
C    1.400000    0.000000    0.000000
H   -0.550000    0.940000    0.000000
H   -0.550000   -0.940000    0.000000
H    1.950000    0.940000    0.000000
H    1.950000   -0.940000    0.000000
*

Cálculo de Propriedades (NMR, TD-DFT)

submit_orca_props.sh
#!/bin/bash
#SBATCH -J orca_props
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 36:00:00
#SBATCH --mem=32G

export INPUT="nmr.inp"
export OUTPUT="nmr.out"

module load orca/6.1.0

job-nanny orca nmr.inp
nmr.inp
! B3LYP DEF2-TZVP NMR

%pal
  nprocs 8
  end

%eprnmr
  nuclei = all C {shift}
  nuclei = all H {shift}
  end

* xyz 0 1
C    0.000000    0.000000    0.000000
H    1.089000    0.000000    0.000000
H   -0.363000    1.026000    0.000000
H   -0.363000   -0.513000   -0.889000
H   -0.363000   -0.513000    0.889000
*
td.inp
! B3LYP DEF2-TZVP TDDFT

%pal
  nprocs 8
  end

%tddft
  nroots 10
  end

* xyz 0 1
C    0.000000    0.000000    0.000000
C    1.400000    0.000000    0.000000
H   -0.550000    0.940000    0.000000
H   -0.550000   -0.940000    0.000000
H    1.950000    0.940000    0.000000
H    1.950000   -0.940000    0.000000
*

Job Array para Varredura de Parâmetros

submit_orca_array.sh
#!/bin/bash
#SBATCH -J orca_array
#SBATCH --array=1-5
#SBATCH -N 1
#SBATCH -c 8
#SBATCH -t 24:00:00
#SBATCH --mem=16G

PARAMS=(
    "B3LYP"
    "PBE0"
    "M06"
    "wB97X"
    "TPSS"
)

METHOD=${PARAMS[$SLURM_ARRAY_TASK_ID-1]}
export INPUT="template.inp"
export OUTPUT="${METHOD}/"

module load orca/6.1.0

mkdir -p ${METHOD}
cd ${METHOD}

# Modificar método no arquivo de entrada
sed "s/FUNCTIONAL/${METHOD}/g" ../template.inp > input.inp

job-nanny orca input.inp

Análise de Resultados

analyze_orca.sh
#!/bin/bash
#SBATCH -J analyze_orca
#SBATCH -N 1
#SBATCH -n 1
#SBATCH -t 00:30:00
#SBATCH --mem=2G

# Extrair energia final
grep "FINAL SINGLE POINT ENERGY" *.out | awk '{print $6}' > energies.txt

# Extrair geometria otimizada
for out in *.out; do
    echo "Geometria otimizada para $out:" >> optimized.txt
    awk '/CARTESIAN COORDINATES/,/CARTESIAN COORDINATES/ {
        if(NF==4 && $1!="CARTESIAN") print $0
    }' $out >> optimized.txt
    echo "" >> optimized.txt
done

# Extrair frequências vibracionais
grep "FREQUENCIES IN CM" -A 5 *.out > frequencies.txt

# Extrair orbital HOMO/LUMO
grep "HOMO" *.out | awk '{print $3, $5}' > homo_lumo.txt

# Extrair gaps
grep "GAP" *.out | awk '{print $3}' > gaps.txt

# Extrair tempos de excitação (TD-DFT)
grep "STATE" *.out | grep -v "TOTAL" > excitations.txt

Referências

Ver também