# Computação científica

A ciência computacional, também conhecida como computação científica, é um campo de rápido crescimento que usa recursos de computação avançados para entender e resolver problemas complexos. É uma área da ciência que abrange muitas disciplinas, mas em sua essência, envolve o desenvolvimento de modelos e simulações para entender os sistemas naturais.
* Algoritmos (numéricos e não numéricos): modelos matemáticos, modelos computacionais e simulações de computador desenvolvidos para resolver problemas de ciência (por exemplo, biológicos, físicos e sociais), engenharia e humanidades
* Hardware de computador que desenvolve e otimiza o hardware de sistema avançado, firmware, rede e componentes de gerenciamento de dados necessários para resolver problemas exigentes computacionalmente
* A infraestrutura de computação que dá suporte tanto à resolução de problemas da ciência e da engenharia quanto ao desenvolvimento da ciência da computação e da informação
No uso prático, é tipicamente a aplicação de simulação de computador e outras formas de computação a partir de análise numérica e ciência da computação teórica para resolver problemas em várias disciplinas científicas. O campo é diferente da teoria e da experiência de laboratório, que são as formas tradicionais de ciência e engenharia. A abordagem da computação científica é obter entendimento, principalmente por meio da análise de modelos matemáticos implementados em computadores. Cientistas e engenheiros desenvolvem programas de computador, softwares aplicativos, que modelam os sistemas em estudo e executam esses programas com vários conjuntos de parâmetros de entrada. A essência da computação científica é a aplicação de algoritmos numéricos e/ou matemática computacional. Em alguns casos, esses modelos requerem uma grande quantidade de cálculos (geralmente de ponto flutuante) e geralmente são executados em supercomputadores ou plataformas de computação distribuída.

## O cientista computacional

O termo cientista computacional é usado para descrever alguém hábil em computação científica. Essa pessoa geralmente é um cientista, um engenheiro ou um matemático aplicado que aplica a computação de alto desempenho de maneiras diferentes para fazer avançar o estado da arte em suas respectivas disciplinas aplicadas em física, química ou engenharia.
A computação científica é agora comumente considerada um terceiro modo de ciência, complementando e adicionando à experimentação/observação e teoria (veja a imagem à direita). Aqui, definimos um sistema como uma fonte potencial de dados, um experimento como um processo de extração de dados de um sistema exercendo-o por meio de suas entradas e um modelo (M) para um sistema (S) e um experimento (E) como qualquer coisa ao qual E pode ser aplicado a fim de responder a perguntas sobre S. Um cientista computacional deve ser capaz de:
* reconhecer problemas complexos
* conceitualizar adequadamente o sistema que contém esses problemas
* projetar uma estrutura de algoritmos adequados para estudar este sistema: a simulação
* escolher uma infraestrutura de computação adequada (computação paralela/computação em grade/supercomputadores)
* deste modo, maximizar o poder computacional da simulação
* avaliar em que nível o resultado da simulação se assemelha aos sistemas: o modelo é validado
* ajustar a conceituação do sistema em conformidade
* repetir o ciclo até que um nível adequado de validação seja obtido: os cientistas computacionais confiam que a simulação gere resultados adequadamente realistas para o sistema, nas condições estudadas
Na verdade, um esforço substancial em ciências computacionais tem sido dedicado ao desenvolvimento de algoritmos, à implementação eficiente em linguagens de programação e à validação de resultados computacionais. Uma coleção de problemas e soluções em computação científica pode ser encontrada em Steeb, Hardy, Hardy e Stoop (2004).
Filósofos da ciência abordaram a questão de em que grau a computação científica se qualifica como ciência, entre eles Humphreys e Gelfert. Eles abordam a questão geral da epistemologia: como podemos obter um insight a partir dessas abordagens da computação científica. Tolk usa esses insights para mostrar as restrições epistemológicas da pesquisa de simulação baseada em computador. Como a computação científica usa modelos matemáticos que representam a teoria subjacente de forma executável, em essência, eles aplicam modelagem (construção de teoria) e simulação (implementação e execução). Embora a simulação e a computação científica sejam nossas maneiras mais sofisticadas de expressar nosso conhecimento e compreensão, elas também vêm com todas as restrições e limites já conhecidos para soluções computacionais.

## Aplicações da computação científica

Os domínios de problema para ciência computacional/computação científica incluem:

### Computação científica preditiva

A computação científica preditiva é uma disciplina científica que visa a formulação, calibração, solução numérica e validação de modelos matemáticos projetados para prever aspectos específicos de eventos físicos, dadas as condições iniciais e de contorno e um conjunto de parâmetros de caracterização e incertezas associadas. Em casos típicos, a declaração preditiva é formulada em termos de probabilidades. Por exemplo, dado um componente mecânico e uma condição de carregamento periódico, “a probabilidade é de (por exemplo) 90% de que o número de ciclos na falha (Nf) estará no intervalo N1<Nf<N2”.

### Sistemas complexos urbanos

Em 2015, mais da metade da população mundial vivia em cidades. Em meados do século 21, estima-se que 75% da população mundial será urbana. Esse crescimento urbano está focado nas populações urbanas de países em desenvolvimento, onde os moradores das cidades mais que dobrarão, passando de 2,5 bilhões em 2009 para quase 5,2 bilhões em 2050. Cidades são sistemas enormes e complexos criados por humanos, feitos de humanos e governados por humanos. Tentar prever, compreender e de alguma forma moldar o desenvolvimento das cidades no futuro requer pensamento complexo e requer modelos computacionais e simulações para ajudar a mitigar desafios e possíveis desastres. O foco da pesquisa em sistemas complexos urbanos é, por meio de modelagem e simulação, construir uma maior compreensão da dinâmica das cidades e ajudar na preparação para a urbanização que se aproxima.

### Finanças computacionais

Nos mercados financeiros de hoje, grandes volumes de ativos interdependentes são negociados por um grande número de participantes do mercado que interagem em diferentes locais e fusos horários. Seu comportamento é de complexidade sem precedentes e a caracterização e medição do risco inerente a este conjunto altamente diversificado de instrumentos é tipicamente baseada em modelos matemáticos e computacionais complicados. A resolução desses modelos exatamente e de forma fechada, mesmo no nível de um único instrumento, normalmente não é possível e, portanto, temos que procurar algoritmos numéricos eficientes. Isso se tornou ainda mais urgente e complexo recentemente, já que a crise de crédito demonstrou claramente o papel dos efeitos em cascata que vão de instrumentos únicos a carteiras de instituições únicas, e até mesmo à rede de negociação interconectada. Compreender isso requer uma abordagem multiescala e holística, em que fatores de risco interdependentes, como risco de mercado, crédito e liquidez, são modelados simultaneamente e em diferentes escalas interconectadas.

### Biologia computacional

Novos desenvolvimentos em biotecnologia estão revolucionando a biologia e a pesquisa biomédica. Exemplos dessas técnicas são sequenciamento de alto rendimento, PCR quantitativo de alto rendimento, imageamento intracelular, hibridização in situ da expressão gênica, técnicas de imageamento tridimensional como microscopia de fluorescência de folha de luz e projeção óptica, tomografia (micro)-computadorizada. Dada a enorme quantidade de dados complicados gerados por essas técnicas, sua interpretação significativa e até mesmo seu armazenamento constituem grandes desafios que exigem novas abordagens. Indo além das abordagens atuais de bioinformática, a biologia computacional precisa desenvolver novos métodos para descobrir padrões significativos nesses grandes conjuntos de dados. A reconstrução de redes de genes baseada em modelos pode ser usada para organizar os dados de expressão de genes de uma forma sistemática e para orientar a coleta de dados futuros. Um grande desafio aqui é entender como a regulação gênica controla processos biológicos fundamentais, como a biomineralização e embriogênese. Os subprocessos como a regulação gênica, moléculas orgânicas interagindo com o processo de deposição de minerais, processos celulares, fisiologia e outros processos nos níveis dos tecidos e do ambiente estão ligados. Em vez de serem dirigidas por um mecanismo de controle central, a biomineralização e a embriogênese podem ser vistas como um comportamento emergente resultante de um sistema complexo no qual vários subprocessos em escalas temporais e espaciais muito diferentes (variando de nanômetro e nanossegundos a metros e anos) estão conectado em um sistema multiescala. Uma das poucas opções disponíveis para entender tais sistemas é desenvolver um modelo multiescala do sistema.

### Teoria de sistemas complexos

Usando a teoria da informação, dinâmica de não equilíbrio e simulações explícitas, a teoria dos sistemas computacionais tenta descobrir a verdadeira natureza dos sistemas adaptativos complexos.

### Computação científica em engenharia

A engenharia e ciência computacional (CSE) é uma disciplina relativamente nova que lida com o desenvolvimento e aplicação de modelos computacionais e simulações, muitas vezes juntamente com computação de alto desempenho, para resolver problemas físicos complexos que surgem na análise de engenharia e design (engenharia computacional) bem como fenômenos naturais (ciência computacional). A CSE foi descrita como a "terceiro forma de descoberta" (depois da teoria e da experimentação). Em muitos campos, a simulação por computador é parte integrante e, portanto, essencial para os negócios e a pesquisa. A simulação por computador possibilita a entrada em campos que são inacessíveis para a experimentação tradicional ou onde a realização de pesquisas empíricas tradicionais é proibitivamente cara. A CSE não deve ser confundida com ciência da computação pura, nem com engenharia da computação, embora um amplo domínio na primeira seja usado na CSE (por exemplo, certos algoritmos, estruturas de dados, programação paralela, computação de alto desempenho) e alguns problemas da última possam ser modelados e resolvidos com métodos da CSE (como área de aplicação).

## Métodos e algoritmos

Os algoritmos e métodos matemáticos usados em computação científica são variados. Os métodos comumente aplicados incluem:
* Computação algébrica, incluindo a computação simbólica em campos tais como a estatística, solução de equações, álgebra, cálculo, geometria, álgebra linear, análise tensorial (álgebra multilinear), otimização
* Análise numérica, incluindo a obtenção de derivadas por diferenças finitas
** Aplicação da série de Taylor como série convergente e assintótica
** Cálculo de derivadas por diferenciação automática (AD)
** Método de elementos finitos para a resolução de EDP
** Aproximações de ordem elevada por série de Taylor e extrapolação de Richardson
** Métodos de integração sobre uma malha uniforme: regra do retângulo (também chamada de regra do ponto médio), regra dos trapézios, regra de Simpson
** Métodos de Runge-Kutta para resolução de equações diferenciais ordinárias
** Método de Newton
* Transformada Discreta de Fourier
* Métodos de Monte Carlo
* Álgebra linear numérica, incluindo algoritmos de decomposição e de autovalores
* Programação linear
* Ramificar e cortar
* Ramificar e limitar
* Dinâmica molecular, dinâmica molecular de Car–Parrinello
* Mapeamento do espaço
* Métodos de passo de tempo para sistemas dinâmicos
Tanto historicamente como na atualidade, o Fortran continua popular para a maioria das aplicações de computação científica. Entre as linguagens de programação e sistemas algébricos computacionais comumente usados para os aspectos mais matemáticos de aplicações de computação científica estão: GNU Octave, Haskell, Julia, Maple, Mathematica, MATLAB, Python (com biblioteca SciPy de terceiros), Perl (com biblioteca PDL de terceiros),$^[$ R, Scilab, e TK Solver. Os aspectos computacionalmente mais intensivos da computação científica costumam usar alguma variação de C ou Fortran e bibliotecas de álgebra otimizadas, como BLAS ou LAPACK. Além disso, a computação paralela é amplamente utilizada na computação científica para obter soluções de grandes problemas em um período de tempo razoável. Nesta estrutura, o problema é abordado de uma das seguintes formas: dividindo-o em muitos núcleos de um único nó de CPU (como com OpenMP), dividindo-o em muitos nós de CPU interligados em rede (como com MPI) ou é executando-o em uma ou mais GPUs (normalmente usando um CUDA ou OpenCL ).
Os programas de aplicação de computação científica frequentemente modelam condições do mundo real que mudam com o tempo, tais como clima, fluxo de ar ao redor de um avião, distorções do corpo de automóveis em um acidente, o movimento das estrelas em uma galáxia, um dispositivo explosivo, etc. Esses programas podem criar uma 'malha lógica' na memória do computador em que cada item corresponde a uma área no espaço e contém informações sobre esse espaço relevantes para o modelo. Por exemplo, em modelos meteorológicos, cada item pode ter um quilômetro quadrado; com a elevação do solo, direção do vento atual, umidade, temperatura, pressão, etc. O programa calcularia o próximo estado provável com base no estado atual, em passos de tempo simulados, resolvendo equações diferenciais que descrevem como o sistema opera; e repetiria o processo para calcular o próximo estado.

## Conferências e periódicos

No ano de 2001, foi organizada pela primeira vez a Conferência Internacional em Computação Científica (ICCS). Desde então, ela é organizada anualmente. A ICCS é uma conferência de nível A na classificação CORE.
O periódico internacional Journal of Computational Science publicou sua primeira edição em maio de 2010. Uma nova iniciativa foi lançada em 2012, o Journal of Open Research Software. Em 2015, o ReScience C dedicado à replicação de resultados computacionais foi iniciado no GitHub.

## Educação

Em algumas instituições, uma especialização em computação científica pode ser obtida como um "menor" em outro programa (que pode estar em níveis variados). No entanto, existem cada vez mais programas de bacharelado, mestrado e doutorado em computação científica. O programa de mestrado conjunto em ciência da computação da Universidade de Amsterdã e da Vrije Universiteit em computação científica foi oferecido pela primeira vez em 2004. Neste programa, os alunos:
* aprendem a construir modelos computacionais a partir de observações da vida real;
* desenvolvem habilidades para transformar esses modelos em estruturas computacionais e realizar simulações em grande escala;
* aprendem a teoria que dará uma base sólida para a análise de sistemas complexos;
* aprendem a analisar os resultados de simulações em um laboratório virtual usando algoritmos numéricos avançados.
George Mason University foi um dos pioneiros a oferecer um programa de doutorado multidisciplinar em Ciências da Computação e Informática em 1992, que se concentrou em uma série de áreas de especialidade, incluindo bioinformática, química computacional, sistemas terrestres e mudanças globais, matemática computacional, física computacional, ciências espaciais e estatísticas computacionais
A escola de ciências computacionais e integrativas da Universidade de Jawaharlal Nehru (antiga Escola de Tecnologia da Informação) também oferece um programa de mestrado para computação científica com duas especialidades, a saber - Biologia Computacional e Sistemas Complexos.

## Áreas relacionadas

* Bioinformática
* Dinâmica molecular de Car-Parrinello
* Quimioinformática
* Quimiometria
* Arqueologia computacional
* Astrofísica computacional
* Biologia computacional
* Química computacional
* Ciência dos materiais computacional
* Economia computacional
* Eletromagnetismo computacional
* Engenharia computacional
* Finanças computacionais
* Dinâmica de fluidos computacional
* Forense computacional
* Geofísica computacional
* História computacional
* Informática computacional
* Inteligência computacional
* Direito computacional
* Lingüística computacional
* Matemática computacional
* Mecânica computacional
* Neurociência computacional
* Física de partículas computacional
* Física computacional
* Sociologia computacional
* Estatística computacional
* Sustentabilidade computacional
* Álgebra computacional
* Simulação de computador
* Modelagem financeira
* Sistema de informações geográficas (GIS)
* Computação de alto desempenho
* Aprendizado de máquina
* Análise de redes
* Neuroinformática
* Álgebra linear numérica
* Previsão numérica do tempo
* Reconhecimento de padrões
* Visualização científica
* Simulação