Changeset 1384 for trunk/LMDZ.GENERIC/libf/phystd/iniorbit.F
- Timestamp:
- Mar 4, 2015, 5:00:33 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.GENERIC/libf/phystd/iniorbit.F
r1308 r1384 4 4 USE planete_mod, only: apoastr, periastr, year_day, obliquit, 5 5 & peri_day, e_elips, p_elips, timeperi 6 use comcstfi_mod, only: pi 6 7 IMPLICIT NONE 7 8 8 c======================================================================= 9 c 10 c Auteur: 11 c ------- 12 c Frederic Hourdin 22 Fevrier 1991 13 c 14 c Objet: 15 c ------ 16 c Initialisation du sous programme orbite qui calcule 17 c a une date donnee de l'annee de duree year_day commencant 18 c a l'equinoxe de printemps et dont le periastre se situe 19 c a la date peri_day, la distance au soleil et la declinaison. 20 c 21 c Interface: 22 c ---------- 23 c - Doit etre appele avant d'utiliser orbite. 24 c - initialise une partie du common planete_mod 25 c 26 c Arguments: 27 c ---------- 28 c 29 c Input: 30 c ------ 31 c apoastr \ apoastron and periastron of the orbit in AU 32 c periastr / 33 c 34 c======================================================================= 35 36 c----------------------------------------------------------------------- 37 c Declarations: 38 c ------------- 39 40 !#include "planete.h" 41 #include "comcstfi.h" 9 !======================================================================= 10 ! Initialisation of orbital parameters (stored in planete_h module) 11 !======================================================================= 42 12 43 13 c Arguments: 44 14 c ---------- 45 15 46 REAL papoastr,pperiastr,pyear_day,pperi_day,pobliq16 REAL,INTENT(IN) :: papoastr,pperiastr,pyear_day,pperi_day,pobliq 47 17 48 18 c Local: … … 80 50 81 51 82 PRINT*,' Periastron in AU ',periastr83 PRINT*,' Apoastron in AU ',apoastr84 PRINT*,' Obliquity in degrees :',obliquit52 PRINT*,'iniorbit: Periastron in AU ',periastr 53 PRINT*,'iniorbit: Apoastron in AU ',apoastr 54 PRINT*,'iniorbit: Obliquity in degrees :',obliquit 85 55 86 56 … … 88 58 p_elips=0.5*(periastr+apoastr)*(1-e_elips*e_elips) 89 59 90 print*,' e_elips',e_elips91 print*,' p_elips',p_elips60 print*,'iniorbit: e_elips',e_elips 61 print*,'iniorbit: p_elips',p_elips 92 62 93 c-----------------------------------------------------------------------94 c calcul de l'angle polaire et de la distance au soleil:95 c-------------------------------------------------------63 !----------------------------------------------------------------------- 64 ! compute polar angle and distance to the Sun: 65 ! ------------------------------------------------------- 96 66 97 c calcul de l'zanomalie moyenne 67 ! compute mean anomaly zanom 98 68 99 69 zz=(year_day-pperi_day)/year_day 100 70 zanom=2.*pi*(zz-nint(zz)) 101 71 zxref=abs(zanom) 102 PRINT*,' zanom ',zanom72 PRINT*,'iniorbit: zanom ',zanom 103 73 104 c resolution de l'equation horaire zx0 - e * sin (zx0) = zxref 105 c methode de Newton 74 ! solve equation zx0 - e * sin (zx0) = zxref for eccentric anomaly zx0 75 ! using Newton method 106 76 107 77 zx0=zxref+e_elips*sin(zxref) 108 DO 110iter=1,10078 DO iter=1,100 109 79 zdx=-(zx0-e_elips*sin(zx0)-zxref)/(1.-e_elips*cos(zx0)) 110 if(abs(zdx).le.(1.e-12)) goto 12080 if(abs(zdx).le.(1.e-12)) exit 111 81 zx0=zx0+zdx 112 110 continue 113 120 continue 82 ENDDO 83 114 84 zx0=zx0+zdx 115 85 if(zanom.lt.0.) zx0=-zx0 116 PRINT*,'zx0 ',zx0 117 118 c zteta est la longitude solaire 86 PRINT*,'iniorbit: zx0 ',zx0 119 87 120 88 timeperi=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.)) 121 PRINT*,'Solar longitude of periastron timeperi = ',timeperi 89 PRINT*,'iniorbit: Perihelion solar long. Ls (deg)=', 90 & 360.-timeperi*180./pi 122 91 123 RETURN124 92 END
Note: See TracChangeset
for help on using the changeset viewer.