2017-07-10 1 views
0

permet d'appeler notre code principal qui prend nécessite une fonction f(x), Main.f90 et codes sources S01.f90, S02.f90, etc. qui ont différentes formes de f(x). Je voudrais avoir Main.f90 sortie les données qu'il calcule basé sur le f(x) de Sxx.f90 pour aller dans un dossier "Sxx".Fichier Compilé comme nom de dossier, Fortran

Je compile à travers un fichier bat comme gfortran -o RunMe.exe Sxx.f90 Main.f90. Au début, il semble que le code devrait être conscient de ses composants compilés, mais non seulement je ne sais pas comment faire, je crois qu'il y a probablement une bien meilleure façon.

Jusqu'à présent, j'ai mon code écrit à l'endroit où je lui donne un nom de dossier d'un .txt, mais encore une fois, je voudrais qu'il prenne simplement ce qui est déjà connu du code source.

S'il y a d'autres suggestions, veuillez les mentionner! Cela ne doit pas nécessairement être exactement comme je l'ai dit. Voici l'essentiel: Calcul, Blueprint, Résultats. Je veux un calcul dans un dossier père, et des dossiers filles, nommés d'après Blueprints, avec des résultats à l'intérieur basés sur ces Blueprints. Les Blueprints peuvent aller dans ces dossiers de fille, ou dans leur propre dossier. Quoi de plus simple! Merci!

+1

connaissez-vous [Prétraitement] (https://gcc.gnu.org/onlinedocs/gfortran/Preprocessing-and-conditional-compilation.html)? Cela semblerait être la façon la plus facile de faire exactement ce que vous voulez, mais peut-être pas le meilleur. (Je pense que le "meilleur" moyen serait d'avoir le module contenu dans 'Sxx.f90' (vous utilisez des modules, n'est-ce pas), fournissez une chaîne' name' Si chacun de vos blueprints fournit un 'nom', Ensuite, le principal peut simplement utiliser le nom pertinent.En allant plus loin, vous pourriez utiliser un type dérivé pour fournir une fonction et un nom dans un paquet). –

+0

Je ne sais pas sur le pré-traitement. J'utilise des modules. J'ai pensé à avoir le nom dans la source externe, mais je ne savais pas trop comment le faire. Peut-être comme une simple fonction avec retour de chaîne ... Je ne suis pas sûr de ce que vous voulez dire par rapport au type dérivé. –

+0

Je voudrais avoir un 'character (len = *), paramètre, public :: modName =" Sxx "' déclaration dans la première partie du module, donc vous pouvez faire quelque chose comme 'use Sxx, only: modName' dans' Main.f90'. –

Répondre

0

Que diriez-vous simplement de générer plusieurs exécutables en fonction de quel Sxx.f90 particulier a été utilisé pour la construction? Par exemple,

gfortran -o RunMe01.exe S01.f90 Main.f90 
gfortran -o RunMe02.exe S02.f90 Main.f90 
+0

Bien sûr, mais cela ne fait pas nécessairement le tri des sorties. De plus, mon 'main.f90' ne prend pas beaucoup de temps à compiler, donc la recompilation ne me dérange pas. C'est plus propre sur mes annuaires aussi. –