Articles of fortran

Enviando arrays 2D em Fortran com MPI_Gather

Eu quero enviar 2d pedaços de dados usando MPI_GATHER.Por exemplo, eu tenho 2×3 matrizes em cada nó e eu quero array 8×3 na raiz, se eu tiver 4 nós. para matrizes de 1d MPI_GATHER ordenam os dados de acordo com as classificações do MPI, mas, para os dados do 2d, criam confusão. Qual é a […]

Passando a function externa de múltiplas variables ​​como uma function de uma variável em Fortran

Estou tentando usar rotinas no QUADPACK para realizar integração numérica. As rotinas esperam que as funções sejam passadas como REAL,EXTERNAL , então eu não tenho a liberdade de usar pointers ou qualquer outra coisa. É possível aliasar uma function f(x,a,b,…) como sendo uma function f(x) para a rotina que espera uma function de x apenas? […]

Por que os elementos de uma matriz são formatados como zeros quando são multiplicados por 1/2 ou 1/3?

Estou escrevendo os elementos de uma matriz da seguinte forma: write(6,'(i4,200(1x,e15.7))’)Jtot0, (a*PJjv(i,Jtot0,j,iv),i=1,nenerdif,100) onde a é uma constante. No entanto, quando esta constante é igual a 1/2 ou 1/3, a saída é zeros e, se for igual a 1, tudo corre bem. Os elementos da matriz são real*8 . Como posso superar isso, dando que sou […]

Como alias um nome de function em Fortran

Não tenho certeza se o título está bem colocado. Sugestões bem-vindas. Aqui está o que eu quero fazer. Verifique uma condição e, em seguida, decida qual function usar em um loop. Por exemplo: if (a < 0) then loop_func = func1 else loop_func = func2 endif Eu posso então usar loop_func como um ponteiro ao […]

Uso correto de módulos, sub-rotinas e funções em Fortran

Eu aprendi recentemente sobre blocos de interface ao adicionar uma function ao meu programa Fortran. Tudo funciona de maneira agradável e organizada, mas agora quero adicionar uma segunda function ao bloco de interface. Aqui está o meu bloco de interface: interface function correctNeighLabel (A,i,j,k) integer :: correctNeighLabel integer, intent(in) :: i,j,k integer,dimension(:,:,:),intent(inout) :: A end […]

Chamando o código de 32 bits do processo de 64 bits

Eu tenho um aplicativo que estamos tentando migrar para 64 bits de 32 bits. É .NET, compilado usando os sinalizadores x64. No entanto, temos um grande número de DLLs escritas no FORTRAN 90 compilado para 32 bits. As funções nas DLLs FORTRAN são bastante simples: você coloca dados, você extrai dados; nenhum estado de qualquer […]

Computando o produto cruzado de dois vetores em Fortran 90

Eu gostaria de calcular o produto cruzado de dois vetores em Fortran 90. Por exemplo, em palavras, o produto vetorial de (1, 2, 3) e (4, 5, 6) é (-3, 6, -3) em coordenadas cartesianas. Eu escrevi o seguinte código (programa principal seguido por definição de function): PROGRAM crosstest IMPLICIT NONE INTEGER, DIMENSION(3) :: m, […]

Definições provisórias em C99 e vinculação

Considere o programa C composto de dois arquivos, f1.c: int x; f2.c: int x=2; Minha leitura do parágrafo 6.9.2 da norma C99 é que esse programa deve ser rejeitado. Na minha interpretação de 6.9.2, a variável x é provisoriamente definida em f1.c , mas essa definição provisória se torna uma definição real no final da […]

Por que falha de segmentação está acontecendo neste código openmp?

programa principal: program main use omp_lib use my_module implicit none integer, parameter :: nmax = 202000 real(8) :: e_in(nmax) = 0.D0 integer i call omp_set_num_threads(2) !$omp parallel default(firstprivate) !$omp do do i=1,2 print *, e_in(i) print *, eTDSE(i) end do !$omp end do !$omp end parallel end program main módulo: module my_module implicit none integer, […]

Converte números inteiros em sequências para criar nomes de arquivos de saída em tempo de execução

Eu tenho um programa em Fortran que salva os resultados em um arquivo. No momento eu abro o arquivo usando OPEN (1, FILE = ‘Output.TXT’) No entanto, agora quero executar um loop e salvar os resultados de cada iteração nos arquivos ‘Output1.TXT’ , ‘Output2.TXT’ , ‘Output3.TXT’ e assim por diante. Existe uma maneira fácil em […]