Início do Programa de DM

Em princípio, os programas para realizar algum tipo de simulação necessita de dados de entrada, alguns somente de controle, outros somente coordenadas iniciais ou alguns com informações combinadas. É importante pensar em um programa que tenha um caráter genérico de entrada de dados, dentro dessa generalidade é importante que o programa leia os dados de entrada de um arquivo. O porque desse esquema se baseia no fato de que as simulações podem levar um longo tempo para serem finalizadas ou então curtos intervalos de tempo, mas várias simulações com vários intervalos de tempos. No ambiente unix-like (linux) temos uma ferramenta importante e poderosa que nos permite automatizar uma série de tarefas a serem realizadas (programa a serem rodados), mas para isso precisamos de um programa (feito em fortran ou em c/c++) que permite essa automatização.

No caso específico de DM necessitamos das coordendas iniciais e também de um arquivo de controle. Para leitura do arquivo de coordendas utilizaremos o formato xyz que é um formato utilizado por vários programas que também realizam DM e que visualizam a trajetória (uma sequência de arquivos xyz) como os programas xmakemol [22], vmd [23], gopenmol [24], etc. O arquivo de controle da DM faremos de acordo com as nossas necessidades.

O arquivo xyz conforme o programa anterior que gera as coordenadas é composta por três partes. A primeira é o número total de átomos do arquivo que está localizado na primeira linha do arquivo, a segunda é uma linha de comentário localizado na segunda linha do arquivo e a terceira e última é a sequência de posições atômicas em que cada linha possui quatro colunas contendo o rótulo do átomo e as coordenadas x, y, e z. Um exemplo pode ser visto abaixo:


\begin{lstlisting}
310
linha de comentario
Ar 7.167486 26.499595 28.546332
Ar 1...
...Ar 5.317546 22.036176 24.344641
Ar 5.236997 27.417759 20.470945
\end{lstlisting}

Para ler o arquivo de coordendas, é recomendado que utilizemos o recurso de alocação dinâmica de memória, assim não precisamos compilar o programa todas as vezes que trocarmos a quantidade de átomos que desejarmos estudar. Parte do programa poderia ser feito da seguinte forma:


\begin{lstlisting}
! IMPORTANTE COLOCAR ESSAS VARIAVEIS DENTRO DE UM MODULE
inte...
...TENDO PARA METROS
m(i) = 6.633526d-27 ! PESO EM KG
end do
!...
\end{lstlisting}

O programa será simples e os controles tambéms serão simples, mas com uma base bastante sólida para um programa mais complexo e destinado à pesquisa científica. Teremos como dados de controle as dimensões da caixa (em angstrons), temperatura desejada (em Kelvin), número de passos total (número inteiro), intervalo de tempo de integração (real), o intervalo que serão escritos os dados de energia e a trajetória (inteiro) e o intervalo em que serão reescaladas as velocidades (inteiro).

O arquivo de controle poderia ser da seguinte maneira:


\begin{lstlisting}
30.d0 30.d0 30.d0
300.d0
1000
1.d0
10
20
13
\par
[1] Dimensoe...
...ar as velocidades
[7] Semente para distribuicao das velocidades
\end{lstlisting}

Parte do código para leitura desses dados poderia ser da seguinte maneira:


\begin{lstlisting}
! IMPORTANTE COLOCAR ESSAS VARIAVEIS DENTRO DE UM MODULE
! DI...
...ARA METROS
read(21,*) nw
read(21,*) nb
read(21,*) isemente
!...
\end{lstlisting}

Nestes primeiros passos da construção do programa de DM, vimos como gerar e ler os arquivos contendo as coordendas e também como ler o arquivo de controle. Na figura 6.1 é apresentado um esquema básico do funcionamento do programa de DM. É praticamente impossível desenvolver algo desta dimensão se não tivermos pelo menos uma idéia de como irá funcionar o programa. É muito interessante que haja um questionamento para cada pedaço do fluxograma e como poderia ser transformar em um código computacional.

Figura: Fluxograma básico do programa de Dinêmica Molecular.
Image fluxo_dm

Com base no fluxograma a idéia do programa principal de MD poderia assumir a forma abaixo, contendo várias subrotinas, utilizando o compartilhamento de variáveis module e a alocação dinâmica de memória:


\begin{lstlisting}
!...
! LENDO CONTRLE DA SIMULACAO
call r_control
! LENDO COOR...
...ico = 0
else
banho_termico = banho_termico + 1
end if
end do
\end{lstlisting}

Fernando Sato 2017-08-02