Hjälp om Fortran90

From Stellarium Wiki
Revision as of 22:09, 11 January 2014 by Lakrits (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Den här sidan är avsedd som hjälp i skapandet av en neptunisk satellitefemerid m.h.a. Le Guyaders och Jerome Berthiers dataset, som finns att hämta från ftp://ftp.imcce.fr/pub/ephem/satel/neptuno/.

Den svenska versionen erbjuder inget annat än en översättning av den engelska originaltexten. Alla diskussioner eller frågor bör hållas inom den internationella gemenskaper, d.v.s på engelska. På den engelskspråkiga versionen av det här avsnittet (Help with Fortran90) finns en diskussionssida, där du kan ställa frågor, skriva in behjälplig information eller komma med förslag i ämnet: klicka på fliken Discussion uppe till vänster på sidan för att komma dit.

Följande text är en slags problembeskrivning, som tar upp fördelarna och begränsningarna med ett par av de kodspråk som kan användas.


Contents

Första försöket: f77

Öppna filen Config.mk och ersätt däri FC = xlf med FC = f77 och skriv "make". Du kommer att se massor av fel i stil med

isat_d.f: In subroutine `isatd':
isat_d.f:1353: 
   210     format(8x,' Dernier pas:',d23.16)'
                                           ^
Invalid form for FORMAT statement at (^)

Enligt min åsikt är orsaken till de här felmeddelandena att koden inte är kompatibel med FORTRAN77. Jag försökte att överbrygga detta problem genom att korrigera källkoden, eftersom det är så många felmeddelanden om felaktigt format. För att hitta indatafilerna som jag ändrade i fs2fd.f, ändra:

infile  = trim(dir_s)//trim(fil_s)
outfile = trim(dir_d)//trim(fil_d)

till

infile  = './data/Nsat-fs.dat'
outfile = './data/Nsat-fd.dat'

Samma sak i ins_d.f:

theofile = './data/Nsat-fd.dat'

I ins_d.f var jag dessutom tvungen att flytta avsnittet

LOGICAL FIRST
DATA FIRST/.TRUE./

och placera det efter textblocket COMMON:

COMMON/STCOMX/KM,BARY,PVSUN
LOGICAL FIRST
DATA FIRST/.TRUE./

FORTRAN77 verkar inte ha stöd för matriser med variabel storlek, så i isat_d.f var jag tvungen att ersätta

dimension tp(np),up(np),cp(3,np),aia(4)

på rad 183 med

dimension tp(100000),up(100000),cp(3,100000),aia(4)

Detsamma gäller raderna 2455 och 2456. På rad 2408 tog jag bort definitionen av w(3,np,0:nd). Därefter kompilerades källkoden till en körbar fil kallad "ilgs_d", för versionen med dubbel precision (_d). Versionen med fyrdubbel precision bör kallas "ilgs_q" (_q efter engelskans "quadruple" för fyrdubbel). Hursomhelst misslyckades körningen av den körbara filen, med följande utdataresultat (fichier är franska för fil):

       ________________________________________
                                               
          Fichier ./data/Nsat-fd.dat              
       ________________________________________

open: No such file or directory
apparent state: unit 12 named /DATA/DE403/de403.unx
last format: list io
lately reading direct unformatted external IO
Aborted

Andra försöket: f2c

Mitt försök att använda f2c gav samma resultat som med f77. Jag hade hoppats att få en bättre inblick genom att läsa C-koden, men det fick jag tyvärr inte. Däremot fungerade det utmärkt att använda f2c med IMCCE:s övriga program i Fortran. Det gav mig en bättre förståelse för programmen och jag lyckades skapa funktionsdugliga körbara filer. Men inte den här gången, alltså.

Sammanfattning

Om filen ./data/Nsat-fd.dat finns, så refererar kanske felet till filen /DATA/DE403/de403.unx, som förvisso saknas i mitt system. Dessutom vet jag inte var jag kan få tag i den. På ftp://ssd.jpl.nasa.gov/pub/eph/planets/bsp/DE403.BSP hittade jag filen för Sparc-arkitektur; för i386 verkar den inte längre vara tillgänglig, men den kan skapas från DE403.BSP.

Men innan jag går vidare med ytterligare försök skulle jag vilja fråga en FORTRAN-programmerare om den här programvaran. Som jag förstår saker och ting, rätta mig gärna om jag har fel, så är det på det här viset:

1) Programvaran är en numerisk integrator för en fysisk modell av Neptunus-systemet. Så länge planetpositionerna för en viss period är kända kan de neptuniska satelliternas positioner beräknas genom numerisk integrering. Datum utanför intervallet 1800-2050 utgör inget problem om planetpositionerna enligt DE403 ersätts av VSOP87 eller motsvarade.

2) Det är därför möjligt att skapa en stor tabell med varje satellits position och hastighet över en lång tidsperiod, t.ex. år 1500-2500. Det är också det huvudsakliga målet med databearbetningen. När jag väl har tabellen använder jag frekvensanalysmodeller för att skapa poissonfördelningar och liknande, som sedan kan inkluderas i Stellarium.

Mitt problem är att jag varken talar franska eller FORTRAN, så jag har ingen aning om vad som försiggår inuti programvaran och skulle därför uppskatta all hjälp som erbjuds mig. Du kan kontakta mig genom att:

- e-posta mig på johannes (punkt) gajdosik (snabel-a) gmx (punkt) at,

- skriva ett inlägg på forumet, eller

- skriva någonting på den här wikisidan.

Jag ber om ursäkt för att jag tidigare skrev "If you do not mind I would prefer to be contacted by email, please write the words 'stellarium' and 'fortran' into the subject line." Det var en riktigt dålig idé, eftersom det skapade massor av arbetsposter på ämnet för gemenskapen. Så vi håller oss till den här wikin.

Med vänliga hälsningar,

Johannes 14:38, 1 maj 2007 (PDT)

--

Hej! Jag är en fransk programmerare, men tyvärr ingen FORTRAN-programmerare, som skulle vilja hjälpa till om jag kan. Jag har börjat läsa en handledning i Fortran och planerar att testa lf95 som Fortran-kompilerare, eftersom det är den som används i Linux Config.mk som kommer med neptunopaketet. Tyvärr har jag inte mycket ledig tid nuförtiden. Jag hör av mig om jag lyckas med något, hör av dig om du har frågor. Blakbear.

--

Hej Blackbear, tusen tack för den erbjudna hjälpen! Först såg jag inte att du hade skrivit i wikin, eftersom bevakningsfunktionen inte verkar fungera för mig. Om du får en förståelse för koden eller kan svara på mina frågor, 1) eller 2), var vänlig skicka mig ett e-brev, det är den enklaste kommunikationsvägen. Johannes

--

Hej, Johannes. Jag kunde bygga ilgs3_d m.h.a. g77 och köra den utan fel. Men jag kunde inte undersöka om det resultatet var rätt eller felaktigt. Skall jag rapportera mitt tillvägagångssätt? (på den här sidan? eller via e-post?) Jag återger ett excerpt av utdatan (en smula formaterad), istället för att besvara dina frågor.

       (  1)  Date: 0.2378496500000000E+07
       Nombre maximum d"enregistrements = 22829
       Intervalle cherché =                  1
       Temps initial d"intégration =  0.2378496500000000E+07
       Intervalle d"intégration =     0.0000000000000000E+00
       Pas d"intégration =            0.0000000000000000E+00
       Temps final d"intégration =    0.2378496500000000E+07
       ___________________________________________________
       Résultats
       ----------
                     Triton
       (  1)  Date: 0.2378496500000000E+07
       v0(1,1,0) =-0.2019388268736855E-04
       v0(2,1,0) = 0.1722904160856275E-02
       v0(3,1,0) = 0.1629414715885055E-02
       v0(1,1,1) = 0.2533936570868142E-02
       v0(2,1,1) =-0.4058902541155617E-04
       v0(3,1,1) = 0.7430677191550270E-04

Förresten, när du skapade de403.unx, varför konverterade du inte från unxpXXXX.403 eller ascpXXXX.403?--Sigma 06:10, 9 maj 2007 (PDT)

--

Samma här, jag lyckades kompilera ilgs3_d med lf95, men jag kan inte ge dig några resultat ännu, så Sigma verkar ha nått längre. För tillfället kan jag inte verifiera mitt e-postkonto och därför heller inte använda det, men fråga mig gärna om du behöver hjälp med översättning från franska till engelska. Blakbear.

--

Jag lade upp diff-filer på nätet: för ins3_d.f,ins8_d.f och isat8_d.f. Ledsen, jag kunde inte överföra de403.unx, eftersom filen var för stor (ca. 9 MB gzippad). Och ilgs8_d gick inte att köra. Det kan finnas en ledtråd till 8 satellitkoder i LISETMOI och README. Undersök dem. Min engelska är tyvärr svag och jag kan dessutom inte läsa franska. orz--Sigma 20:41, 10 maj 2007 (PDT)

--

Hej! Jag har lyckats kompilera och köra både ilgs3_d och ilgs8_d, med vissa resultat och problem vid testning med senare datum. Men det verkar åtminstone fungera för startdatumet.
Alla ändringar jag har gjort för att få ilgs8_d att fungera har redan påpekats av Johannes: felaktig formatering med ' där det inte borde finnas och felaktiga sökvägar, där . saknas och det därför inte går att komma åt den aktuella mappen. Jag har använt unxp1950.403, som jag hittade på JPL:s FTP (ftp://ssd.jpl.nasa.gov/pub/eph/export/unix/), som fått ett nytt namn i de403.unx.
Jag kommer att skapa ett arkiv med alla filer som jag har använt och göra det tillgängligt ikväll, så att vem som helst kan testa det.

--Blakbear 13:56, 11 maj 2007 (PDT)

Resultat

Tusen tack, allihop, för er hjälp! Förutom informationen i wikin har jag fått e-brev som beskriver hur man skapar de403.unx. Ni lyckades sannerligen bättre än jag med programmet. Nu återstår bara problemet med att skapa efemeriddata över ett tillräckligt långt tidsspann, t.ex. år 1500-2500. Filen Nsat-fd.dat tillhandahåller inte ingångsvärden för hela perioden, men jag tror inte att ytterligare sådana behövs. Istället borde isat_d och ilgs_d innehålla en numerisk modell och en integrator som kan skapa data för en godtycklig tidsperiod, förutsatt att planetpositionerna är kända. Det leder till följande fråga:

Förstår någon av er innehållet i isat_d.f och ilgs_d.f? Var är integratorn, var är den numeriska modellen och från vilken punkt behövs planetpositionerna för att beräkna planetperturbationen? Det är här kunskaper i franska språket kan vara till nytta, för jag förstår inte kommentarerna eller funktions- och variabelnamnen. För mig framstår dessa bara som meningslösa bokstavsgyttringar.

Tack återigen, --Johannes 09:44, 14 maj 2007 (PDT)

Personal tools
Namespaces
Variants
Actions
in this wiki
other languages
Toolbox