Changeset 4190 for dynamico_lmdz/simple_physics/phyparam/physics
- Timestamp:
- Dec 20, 2019, 12:07:05 AM (6 years ago)
- Location:
- dynamico_lmdz/simple_physics/phyparam/physics
- Files:
-
- 2 edited
- 1 moved
-
astronomy.F90 (moved) (moved from dynamico_lmdz/simple_physics/phyparam/param/solarlong.F) (1 diff)
-
phys_const.F90 (modified) (1 diff)
-
planet.F90 (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
dynamico_lmdz/simple_physics/phyparam/physics/astronomy.F90
r4178 r4190 1 SUBROUTINE solarlong(pday,psollong) 2 IMPLICIT NONE 1 MODULE astronomy 2 IMPLICIT NONE 3 SAVE 3 4 4 c======================================================================= 5 c 6 c Objet: 7 c ------ 8 c 9 c Calcul de la distance soleil-planete et de la declinaison 10 c en fonction du jour de l'annee. 11 c 12 c 13 c Methode: 14 c -------- 15 c 16 c Calcul complet de l'elipse 17 c 18 c Interface: 19 c ---------- 20 c 21 c Uncommon comprenant les parametres orbitaux. 22 c 23 c Arguments: 24 c ---------- 25 c 26 c Input: 27 c ------ 28 c pday jour de l'annee (le jour 0 correspondant a l'equinoxe) 29 c lwrite clef logique pour sorties de controle 30 c 31 c Output: 32 c ------- 33 c pdist_sol distance entre le soleil et la planete 34 c ( en unite astronomique pour utiliser la constante 35 c solaire terrestre 1370 Wm-2 ) 36 c pdecli declinaison ( en radians ) 37 c 38 c======================================================================= 39 c----------------------------------------------------------------------- 40 c Declarations: 41 c ------------- 5 REAL :: aphelie, periheli, year_day, peri_day, obliquit, & 6 timeperi, e_elips,p_elips 7 REAL, PARAMETER :: unitastr=149.597927, & ! millions of km 8 pi=2.*ASIN(1.) 9 CONTAINS 10 11 SUBROUTINE solarlong(pday,psollong) 42 12 43 #include "comorbit.h" 13 !======================================================================= 14 ! Calcul de la distance soleil-planete et de la declinaison 15 ! en fonction du jour de l'annee. 16 ! 17 ! Methode: 18 ! -------- 19 ! Calcul complet de l'ellipse 20 ! 21 ! Input: 22 ! ------ 23 ! pday jour de l'annee (le jour 0 correspondant a l'equinoxe) 24 ! lwrite clef logique pour sorties de controle 25 ! 26 ! Output: 27 ! ------- 28 ! pdist_sol distance entre le soleil et la planete 29 ! ( en unite astronomique pour utiliser la constante 30 ! solaire terrestre 1370 Wm-2 ) 31 ! pdecli declinaison ( en radians ) 32 ! 33 !======================================================================= 44 34 45 c arguments: 46 c ---------- 35 USE planet 36 REAL, INTENT(IN) :: pday 37 REAL, INTENT(OUT) :: psollong 38 LOGICAL, PARAMETER :: lwrite=.TRUE. 39 REAL pdist_sol, pdecli 47 40 48 REAL pday,pdist_sol,pdecli,psollong 49 LOGICAL lwrite 41 ! Local: 42 ! ------ 43 REAL zanom,xref,zx0,zdx,zteta,zz 44 INTEGER iter 50 45 51 c Local: 52 c ------ 46 !-------------------------------------------------------- 47 ! calcul de l'angle polaire et de la distance au soleil : 48 ! ------------------------------------------------------- 53 49 54 REAL zanom,xref,zx0,zdx,zteta,zz 55 INTEGER iter 50 ! calcul de l'zanomalie moyenne 56 51 52 zz=(pday-peri_day)/year_day 53 zanom=2.*pi*(zz-nint(zz)) 54 xref=abs(zanom) 57 55 58 c----------------------------------------------------------------------- 59 c calcul de l'angle polaire et de la distance au soleil : 60 c ------------------------------------------------------- 61 62 c calcul de l'zanomalie moyenne 63 64 zz=(pday-peri_day)/year_day 65 zanom=2.*pi*(zz-nint(zz)) 66 xref=abs(zanom) 67 68 c resolution de l'equation horaire zx0 - e * sin (zx0) = xref 69 c methode de Newton 70 71 zx0=xref+e_elips*sin(xref) 72 DO 110 iter=1,10 73 zdx=-(zx0-e_elips*sin(zx0)-xref)/(1.-e_elips*cos(zx0)) 74 if(abs(zdx).le.(1.e-7)) goto 120 75 zx0=zx0+zdx 76 110 continue 77 120 continue 78 zx0=zx0+zdx 79 if(zanom.lt.0.) zx0=-zx0 80 81 c zteta est la longitude solaire 82 83 zteta=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.)) 84 85 psollong=zteta-timeperi 86 87 IF(psollong.LT.0.) psollong=psollong+2.*pi 88 IF(psollong.GT.2.*pi) psollong=psollong-2.*pi 89 c----------------------------------------------------------------------- 90 c sorties eventuelles: 91 c --------------------- 92 93 IF (lwrite) THEN 94 PRINT*,'jour de l"annee :',pday 95 PRINT*,'distance au soleil (en unite astronomique) :',pdist_sol 96 PRINT*,'declinaison (en degres) :',pdecli*180./pi 97 ENDIF 98 99 RETURN 100 END 56 ! resolution de l'equation horaire zx0 - e * sin (zx0) = xref 57 ! methode de Newton 58 59 zx0=xref+e_elips*sin(xref) 60 DO iter=1,10 61 zdx=-(zx0-e_elips*sin(zx0)-xref)/(1.-e_elips*cos(zx0)) 62 zx0=zx0+zdx 63 END DO 64 zx0=zx0+zdx 65 if(zanom.lt.0.) zx0=-zx0 66 67 ! zteta est la longitude solaire 68 69 zteta=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.)) 70 71 psollong=zteta-timeperi 72 73 IF(psollong.LT.0.) psollong=psollong+2.*pi 74 IF(psollong.GT.2.*pi) psollong=psollong-2.*pi 75 !----------------------------------------------------------------------- 76 ! sorties eventuelles: 77 ! --------------------- 78 79 IF (lwrite) THEN 80 PRINT*,'jour de l"annee :',pday 81 PRINT*,'distance au soleil (en unite astronomique) :',pdist_sol 82 PRINT*,'declinaison (en degres) :',pdecli*180./pi 83 ENDIF 84 85 END SUBROUTINE solarlong 86 87 END MODULE astronomy -
dynamico_lmdz/simple_physics/phyparam/physics/phys_const.F90
r4183 r4190 1 1 MODULE phys_const 2 2 3 REAL pi,rad,g,r,cpp,rcp,dtphys,unjours,mugaz,omeg3 REAL rad,g,r,cpp,rcp,dtphys,unjours,mugaz,omeg 4 4 5 5 END MODULE phys_const -
dynamico_lmdz/simple_physics/phyparam/physics/planet.F90
r4189 r4190 3 3 SAVE 4 4 5 REAL :: aphelie, periheli, year_day, peri_day, obliquit, & 6 coefvis, coefir 5 REAL :: coefvis, coefir 7 6 8 7 END MODULE planet
Note: See TracChangeset
for help on using the changeset viewer.
