Buona progettazione per codice di fisica computazionale modulare in Fortran

1

Attualmente sto lavorando su un codice di fisica computazionale in Fortran. In sintesi, il codice esegue le seguenti operazioni:

  • Inizializza
  • Ciclo fino al completamento
    • Soluzione avanzata nel tempo
    • Forse scrivi l'output

Vogliamo supportare diversi moduli di fisica, che risolvono equazioni diverse. Sto pensando al seguente progetto, che si basa molto sui puntatori di funzione:

  • Genera un modello per un modulo di fisica, che contiene le definizioni per le procedure che potrebbero essere richieste e memorizza i puntatori a queste procedure. Ad esempio, ci sarebbero delle routine per l'inizializzazione, il time stepping e la produzione di output speciali.
  • Ogni modulo fisico definisce quindi le proprie procedure (e alcuni dati, che possono essere comodamente archiviati in un modulo Fortran)
  • All'inizio del codice, viene attivato un modulo, che imposta i puntatori del modello alle procedure del modulo

La motivazione dietro l'approccio sopra è che cambiare i moduli richiede solo un singolo cambiamento nel codice (attivarne uno diverso) e che manteniamo il codice relativamente semplice (senza astrazioni complesse, eredità e altre caratteristiche orientate agli oggetti).

Questo sarebbe considerato un buon progetto per un codice non orientato agli oggetti?

    
posta Jannis Teunissen 18.10.2016 - 15:14
fonte

1 risposta

2

Quello che stai descrivendo rientra nell'intestazione generale di Iniezione di dipendenza, altrimenti noto come Inversione del controllo. Questa è una tecnica eccezionalmente potente ampiamente utilizzata nelle lingue derivate dal C ma sfortunatamente meno in Fortran.

L'idea generale è di scrivere moduli in modo che condividano le interfacce comuni e siano altrimenti ignoranti l'uno dell'altro, e quindi di assemblare un programma in esecuzione incollando insieme un insieme scelto di tali moduli. Può anche essere usato un framework comune per gestire i parametri di configurazione e / o un linguaggio di configurazione (come XML). A volte i moduli sono costruiti come plug-in o librerie dinamiche.

Il piano sembra mettere troppa decisione al livello del modulo, dove è meglio al livello più alto. L'uso specifico di modelli e puntatori potrebbe essere solo un approccio, ma piuttosto dipendere dal dialetto scelto. Consiglierei alcune letture su IOC prima di andare troppo oltre in quella traccia.

    
risposta data 20.10.2016 - 15:28
fonte

Leggi altre domande sui tag