Changeset 4190 for dynamico_lmdz/simple_physics/phyparam
- Timestamp:
- Dec 20, 2019, 12:07:05 AM (5 years ago)
- Location:
- dynamico_lmdz/simple_physics/phyparam
- Files:
-
- 7 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
dynamico_lmdz/simple_physics/phyparam/param/iniorbit.F
r4176 r4190 1 1 SUBROUTINE iniorbit 2 2 $ (paphelie,pperiheli,pyear_day,pperi_day,pobliq) 3 USE astronomy 3 4 IMPLICIT NONE 4 5 … … 32 33 33 34 c----------------------------------------------------------------------- 34 c Declarations:35 c -------------36 37 #include "comorbit.h"38 35 39 36 c Arguments: … … 56 53 peri_day=pperi_day 57 54 58 pi=2.*asin(1.)59 55 PRINT*,'Perihelie en Mkm ',periheli 60 56 PRINT*,'Aphelise en Mkm ',aphelie 61 57 PRINT*,'obliquite en degres :',obliquit 62 unitastr=149.597927 58 63 59 e_elips=(aphelie-periheli)/(periheli+aphelie) 64 60 p_elips=0.5*(periheli+aphelie)*(1-e_elips*e_elips)/unitastr -
dynamico_lmdz/simple_physics/phyparam/param/iniphyparam.F
r4189 r4190 11 11 use comsaison 12 12 USE geometry_mod, ONLY : longitude,latitude,cell_area 13 USE phys_const, ONLY : pi,rad,g,r,cpp,rcp,dtphys,unjours,mugaz13 USE phys_const, ONLY : rad,g,r,cpp,rcp,dtphys,unjours,mugaz 14 14 USE planet, ONLY : coefir, coefvis 15 USE planet, ONLY : aphelie, periheli, peri_day, obliquit, year_day15 USE astronomy 16 16 USE vdif_mod, ONLY : lmixmin, emin_turb 17 17 IMPLICIT NONE … … 197 197 coslon(:)=cos(long(:)) 198 198 199 pi=2.*asin(1.)200 199 prad=rad 201 200 pg=g -
dynamico_lmdz/simple_physics/phyparam/param/orbite.F
r4176 r4190 1 1 SUBROUTINE orbite(pls,pdist_sol,pdecli) 2 USE astronomy 2 3 IMPLICIT NONE 3 4 … … 32 33 c ------------- 33 34 34 #include "comorbit.h"35 36 35 c arguments: 37 36 c ---------- -
dynamico_lmdz/simple_physics/phyparam/param/paramdef.F
r4189 r4190 3 3 USE vdif_mod, ONLY : lmixmin, emin_turb 4 4 USE planet, ONLY : coefir, coefvis 5 USE planet, ONLY : aphelie, periheli, obliquit, peri_day, year_day5 USE astronomy 6 6 IMPLICIT NONE 7 7 c----------------------------------------------------------------------- … … 20 20 character str1*1 21 21 INTEGER ig,ierr 22 real zz,z1,z2 ,pi22 real zz,z1,z2 23 23 24 24 REAL I_mer,I_ter,z0_mer,z0_ter … … 29 29 c----------------------------------------------------------------------- 30 30 31 pi=2.*asin(1.)32 31 year_day=360. 33 32 periheli=173. -
dynamico_lmdz/simple_physics/phyparam/param/phyparam.F
r4188 r4190 12 12 USE phys_const 13 13 USE planet 14 USE astronomy 14 15 USE vdif_mod, ONLY : vdif 15 c 16 c 16 17 IMPLICIT NONE 17 18 c======================================================================= -
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.