source: lmdz_wrf/WRFV3/lmdz/solarlong.F90 @ 1

Last change on this file since 1 was 1, checked in by lfita, 10 years ago
  • -- --- Opening of the WRF+LMDZ coupling repository --- -- -

WRF: version v3.3
LMDZ: version v1818

More details in:

File size: 3.6 KB
Line 
1      SUBROUTINE solarlong(pday,psollong,pdist_sol)
2
3      USE ioipsl
4
5      IMPLICIT NONE
6
7!c=======================================================================
8!c
9!c   Objet:
10!c   ------
11!c
12!c      Calcul de la distance soleil-planete et de la declinaison
13!c   en fonction du jour de l'annee.
14!c
15!c
16!c   Methode:
17!c   --------
18!c
19!c      Calcul complet de l'elipse
20!c
21!c   Interface:
22!c   ----------
23!c
24!c      Uncommon comprenant les parametres orbitaux.
25!c
26!c   Arguments:
27!c   ----------
28!c
29!c   Input:
30!c   ------
31!c   pday          jour de l'annee (le jour 0 correspondant a l'equinoxe)
32!c   lwrite        clef logique pour sorties de controle
33!c
34!c   Output:
35!c   -------
36!c   pdist_sol     distance entre le soleil et la planete
37!c                 ( en unite astronomique pour utiliser la constante
38!c                  solaire terrestre 1370 Wm-2 )
39!c   pdecli        declinaison ( en radians )
40!c
41!c=======================================================================
42!c-----------------------------------------------------------------------
43!c   Declarations:
44!c   -------------
45
46#include "planete.h"
47#include "YOMCST.h"
48      include 'iniprint.h'
49
50!c arguments:
51!c ----------
52
53      REAL pday,pdist_sol,pdecli,psollong
54      LOGICAL lwrite
55
56!c Local:
57!c ------
58
59      REAL zanom,xref,zx0,zdx,zteta,zz,pi
60      INTEGER iter
61      REAL :: pyear_day,pperi_day
62      REAL :: jD_eq, jD_peri
63      LOGICAL,SAVE :: first=.TRUE.
64!$OMP THREADPRIVATE(first)
65
66!c-----------------------------------------------------------------------
67!c calcul de l'angle polaire et de la distance au soleil :
68!c -------------------------------------------------------
69
70!c   Initialisation eventuelle:
71      if(first) then
72        call ioget_calendar(pyear_day)
73        call ymds2ju(2000, 3, 21, 0., jD_eq)
74        call ymds2ju(2001, 1, 4, 0., jD_peri)
75        pperi_day = jD_peri - jD_eq
76        pperi_day = R_peri + 180.
77        write(lunout,*)' Number of days in a year = ',pyear_day
78!c         call iniorbit(249.22,206.66,669.,485.,25.2)
79         call iniorbit(152.59,146.61,pyear_day,pperi_day,R_incl)
80         first=.FALSE.
81      endif
82
83!c  calcul de l'zanomalie moyenne
84
85      zz=(pday-peri_day)/year_day
86      pi=2.*asin(1.)
87      zanom=2.*pi*(zz-nint(zz))
88      xref=abs(zanom)
89
90!c  resolution de l'equation horaire  zx0 - e * sin (zx0) = xref
91!c  methode de Newton
92
93!      zx0=xref+e_elips*sin(xref)
94      zx0=xref+R_ecc*sin(xref)
95      DO 110 iter=1,10
96!         zdx=-(zx0-e_elips*sin(zx0)-xref)/(1.-e_elips*cos(zx0))
97         zdx=-(zx0-R_ecc*sin(zx0)-xref)/(1.-R_ecc*cos(zx0))
98         if(abs(zdx).le.(1.e-7)) goto 120
99         zx0=zx0+zdx
100110   continue
101120   continue
102      zx0=zx0+zdx
103      if(zanom.lt.0.) zx0=-zx0
104
105!c zteta est la longitude solaire
106
107!      zteta=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.))
108      zteta=2.*atan(sqrt((1.+R_ecc)/(1.-R_ecc))*tan(zx0/2.))
109
110      psollong=zteta-timeperi
111
112      IF(psollong.LT.0.) psollong=psollong+2.*pi
113      IF(psollong.GT.2.*pi) psollong=psollong-2.*pi
114
115      psollong = psollong * 180. / pi
116
117!c distance soleil
118
119      pdist_sol = (1-R_ecc*R_ecc)                                                    &
120       &      /(1+R_ecc*COS(pi/180.*(psollong-(R_peri+180.0))))
121!      pdist_sol = (1-e_elips*e_elips)
122!     &      /(1+e_elips*COS(pi/180.*(psollong-(R_peri+180.0))))
123!c-----------------------------------------------------------------------
124!c   sorties eventuelles:
125!c   ---------------------
126
127!c     IF (lwrite) THEN
128!c        PRINT*,'jour de l"annee   :',pday
129!c        PRINT*,'distance au soleil (en unite astronomique) :',pdist_sol
130!c        PRINT*,'declinaison (en degres) :',pdecli*180./pi
131!c     ENDIF
132
133      RETURN
134      END
Note: See TracBrowser for help on using the repository browser.