source: trunk/LMDZ.TITAN/libf/phytitan/profile.F @ 1000

Last change on this file since 1000 was 904, checked in by slebonnois, 12 years ago

SL: stupid bug in Titan rcm1d/profile...

File size: 5.8 KB
RevLine 
[894]1      SUBROUTINE profile(unit,nlev,dzst,pres,temp)
[887]2      IMPLICIT NONE
3c=======================================================================
4c     Subroutine utilisee dans le modele 1-D  "rcm1d"
5c     pour l'initialisation du profil atmospherique
6c=======================================================================
7c
8c   VERSION VENUS
9c
10c   differents profils d'atmospheres. T=f(z)
11c   entree:
[894]12c     unit    unite de lecture de "rcm1d.def"
[887]13c     nlev    nombre de niveaux (nlev=llm+1, surf + couches 1 a llm)
14c     dzst    dz/T (avec dz = epaisseur de la couche en m)
[894]15c     pres    pressure profile
[887]16c     ichoice choix de l'atmosphere:
17c             1 Temperature constante
18c             2 profil Huygens lisse
19c             3
20c             4
21c             5
22c             6 T constante + perturbation gauss (level) (christophe 10/98)
23c             7 T constante + perturbation gauss   (km)  (christophe 10/98)
24c             8 Lecture du profile dans un fichier ASCII (profile)
25c     tref    temperature de reference
26c     isin    ajout d'une perturbation (isin=1)
27c     pic     pic perturbation gauss pour ichoice = 6 ou 7
28c     largeur largeur de la perturbation gauss pour ichoice = 6 ou 7
29c     hauteur hauteur de la perturbation gauss pour ichoice = 6 ou 7
30c
31c   sortie:
32c     temp    temperatures en K
33c     
34c=======================================================================
35c-----------------------------------------------------------------------
36c   declarations:
37c   -------------
38
39c   arguments:
40c   ----------
41
42       INTEGER nlev, unit
[894]43       REAL dzst(nlev),pres(nlev),temp(nlev)
[887]44
45c   local:
46c   ------
47
48      INTEGER il,ichoice,isin,iter
49      REAL pi
50      REAL tref,t1,t2,t3,ww
51      REAL pic,largeur
52      REAL hauteur,tmp
53      REAL zkm(nlev)    ! altitude en km
[894]54      real a1,b1,c1,a2,b2,c2
[887]55
56      isin = 0
57
58c-----------------------------------------------------------------------
59c   choix du profil:
60c   ----------------
61
62c la lecture se fait dans le rcm1d.def, ouvert par rcm1d.F
63      READ(unit,*)
64      READ(unit,*)
65      READ(unit,*)
66      READ(unit,*) ichoice
67      READ(unit,*) tref
68      READ(unit,*) isin
69      READ(unit,*) pic
70      READ(unit,*) largeur
71      READ(unit,*) hauteur
72
73c-----------------------------------------------------------------------
74c   ichoice=1 temperature constante:
75c   --------------------------------
76
77      IF(ichoice.EQ.1) THEN
78         temp(1) = tref
79         zkm(1)  = 0.0
80         DO il=2,nlev
81            temp(il)= tref
82            zkm(il) = zkm(il-1)+temp(il)*dzst(il)/1000.
83         ENDDO
84
85c-----------------------------------------------------------------------
86c   ichoice=2 Huygens lisse:
87c   ------------------------
88
89      ELSE IF(ichoice.EQ.2) THEN
[894]90       a1 =       142.1
91       b1 =      -21.45
92       c1 =       40.11
93       a2 =       106.3
94       b2 =       3183.
95       c2 =       4737.
96       DO il=1,nlev
[904]97         temp(il)=a1*exp(-((pres(il)-b1)/c1)**2.)
98     .          + a2*exp(-((pres(il)-b2)/c2)**2.)
[894]99       ENDDO
100       zkm(1)  = 0.0
101       DO il=2,nlev
102          zkm(il) = zkm(il-1)+(temp(il-1)+temp(il))/2.*dzst(il)/1000.
103       ENDDO
[887]104
105c-----------------------------------------------------------------------
106c   ichoice=3
107c   ----------------------------
108
109      ELSE IF(ichoice.EQ.3) THEN
110       print*,"Profil T a faire..."
111       stop
112
113c-----------------------------------------------------------------------
114c   ichoice=4 :
115c   ------------------
116
117      ELSE IF(ichoice.EQ.4) THEN
118         print*,"Cas non defini..."
119         print*,"Stop dans profile.F"
120         STOP
121
122c-----------------------------------------------------------------------
123c   ichoice=5 :
124c   ----------------
125
126      ELSE IF(ichoice.EQ.5) THEN
127         print*,"Cas non defini..."
128         print*,"Stop dans profile.F"
129         STOP
130
131c-----------------------------------------------------------------------
132c   ichoice=6
133c   ---------
134
135      ELSE IF(ichoice.EQ.6) THEN
136      temp(1) = tref
137      zkm(1)  = 0.0
138      DO il=2,nlev
139        tmp=il-pic
140        temp(il)= tref + hauteur*exp(-tmp*tmp/largeur/largeur)
141        zkm(il) = zkm(il-1)+temp(il)*dzst(il)/1000.
142      ENDDO
143
144
145c-----------------------------------------------------------------------
146c   ichoice=7
147c   ---------
148
149      ELSE IF(ichoice.EQ.7) THEN
150      temp(1) = tref
151      zkm(1)  = 0.0
152      DO il=2,nlev
153        zkm(il) = zkm(il-1)+tref*dzst(il)/1000. ! approx
154        tmp=zkm(il)-pic
155        temp(il)= tref + hauteur*exp(-tmp*tmp*4/largeur/largeur)
156        zkm(il) = zkm(il-1)+(temp(il-1)+temp(il))/2.*dzst(il)/1000.
157      ENDDO
158
159c-----------------------------------------------------------------------
160c   ichoice=8
161c   ---------
162
163      ELSE IF(ichoice.GE.8) THEN
164      OPEN(11,file='profile',status='old',form='formatted',err=101)
165      DO il=1,nlev
166        READ (11,*) temp(il)
167      ENDDO
168      zkm(1) = 0.0
169      DO il=2,nlev
170        zkm(il) = zkm(il-1)+(temp(il-1)+temp(il))/2.*dzst(il)/1000.
171      ENDDO
172
173      GOTO 201
174101   STOP'fichier profile inexistant'
175201   CONTINUE
176      CLOSE(10)
177
178c-----------------------------------------------------------------------
179
180      ENDIF
181
182c-----------------------------------------------------------------------
183c   rajout eventuel d'une perturbation:
184c   -----------------------------------
185
186      IF(isin.EQ.1) THEN
187         pi=2.*ASIN(1.)
188         DO il=1,nlev
189        temp(il)=temp(il)+(1.-1000./(1000+zkm(il)*zkm(il)))*(
190     s      6.*SIN(zkm(il)*pi/6.)+9.*SIN(zkm(il)*pi/10.3) )
191         ENDDO
192      ENDIF
193
194
195c-----------------------------------------------------------------------
196c   Ecriture du profil de temperature dans un fichier profile.out
197c   -------------------------------------------------------------
198
199
200c     OPEN(12,file='profile.out')
201c         DO il=1,nlev
202c            write(12,*) temp(il)
203c           write(12,*) temp(il),zkm(il)
204c         ENDDO
205c     CLOSE(12)
206
207      RETURN
208      END
Note: See TracBrowser for help on using the repository browser.