Un codice ottario a Fortran


10

Sono nuovo di informatica scientifica. Sto cercando un'implementazione Fortran (preferibilmente f90) di un Octree.

Il mio problema richiede un Octree che divide il mio dominio fino a quando non ci sono più di alcune particelle N (o fonti in cui conosco il valore di densità che può essere inserito in un metodo di equazione integrale per risolvere un'equazione come l'equazione di Laplace) in qualsiasi casella.

Tutto quello che ho potuto trovare era questa implementazione C ++ . Voglio sapere se ci sono già librerie Fortran esistenti che posso usare.

Inoltre, saranno apprezzati buoni consigli cartacei sulle implementazioni di Octree in Fortran che possono essere utilizzati in modo che l'applicazione dei metodi di equazione integrale rapida sulla casella computazionale sia apprezzata!


Prova BoxLib. Secondo il manuale esiste la versione Fortran 90 pura. Vedi ccse.lbl.gov/BoxLib/BoxLibUsersGuide.pdf
stali

Risposte:


9

Non ho esperienza con Octrees, ma ogni volta che c'è una bella libreria C ++ che voglio usare in Fortran, scrivo semplicemente un semplice driver C, in genere alcune funzioni C che fanno esattamente ciò di cui ho bisogno. Quindi li chiamo da Fortran usando il modulo iso_c_binding. Questo ha il grande vantaggio di riutilizzare una libreria ben collaudata con una comunità attorno.

Per informazioni su come usare iso_c_binding, ho scritto alcune informazioni qui:

http://fortran90.org/src/best-practices.html#interfacing-with-c

queste informazioni particolari servono per chiamare Fortran da C. Vedo che dovrei aggiornarlo. Ecco il mio codice in cui chiamo libreria C ++ da Fortran, il primo link è il semplice driver C, il secondo link è un'interfaccia Fortran e quindi lo chiamo semplicemente come qualsiasi altra subroutine Fortran:

https://github.com/certik/hfsolver/blob/master/src/qc_libint.cpp

https://github.com/certik/hfsolver/blob/master/src/qc.f90


6

Sembra che tu sia pronto a usare Fortran. Gli octrees, se implementati in modo efficiente, sono strutture dati piuttosto complesse e, come tali, più adatte ai linguaggi di programmazione che hanno un supporto maggiore per questo, come C / C ++. Esistono diverse implementazioni di altissima qualità in C / C ++ che è possibile utilizzare.


Grazie per la tua risposta! Ma i metodi integrali veloci che devo usare sono scritti in Fortran. Sarebbe naturale scrivere anche il codice Octree in Fortran.
rivendell

Quali metodi integrali veloci? Sono per lo più tutti racchiusi in lingue di livello superiore, che avvolgono anche in particolare octrees. . .
meawoppl,

Quale supporto per implementazioni octree efficienti manca nella (moderna) Fortran rispetto a C? L'unico aspetto negativo che conosco è che mancano numeri interi senza segno, quindi è necessario scrivere esplicitamente alcune operazioni bit per bit.
Jannis Teunissen,

@JannisTeunissen - non è che Fortran 200x non abbia modi per creare strutture di dati complesse, è più su quanto sia facile (o meno). C ++, per esempio, ha std::map, std::multimap, std::vector, std::sort, e così via e così via, tutti indipendenti genericamente disponibile, dal tipo di dati sottostante essere memorizzati. Non c'è dubbio che puoi fare tutto questo anche in Fortran oggi, ma richiede giorni e settimane di lavoro che potresti utilizzare in modo produttivo per lavorare effettivamente sulla tua applicazione, piuttosto che sulle strutture di dati sottostanti.
Wolfgang Bangerth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.