source: trunk/LMDZ.COMMON/libf/dynphy_lonlat/phytitan.old/start2archive.F @ 2226

Last change on this file since 2226 was 1443, checked in by emillour, 9 years ago

Titan and Venus GCMs:
Follow-up to the changes in dynamics/physics interface: ener.h, logic.h, serre.h and temps.h are now modules.
EM

File size: 12.0 KB
Line 
1c=======================================================================
2      PROGRAM start2archive
3c=======================================================================
4c
5c
6c   Date:    01/1997
7c   ----
8c
9c   Version Venus: 09/2007
10c           Titan: 02/2009
11c
12c   Objet:   Passage des  fichiers netcdf d etat initial "start" et
13c   -----    "startphy" a un fichier netcdf unique "start_archive"
14c
15c=======================================================================
16
17      USE filtreg_mod
18      USE infotrac
19      USE control_mod
20      use cpdet_mod, only: tpot2t,ini_cpdet
21      use exner_hyb_m, only: exner_hyb
22      use exner_milieu_m, only: exner_milieu
23      USE comconst_mod
24      USE comvert_mod, ONLY: ap,bp,presnivs,pa,preff,nivsigs,nivsig,
25     .                       aps,bps,scaleheight,pseudoalt,
26     .                       disvert_type,pressure_exner
27      USE logic_mod, ONLY: iflag_trac
28
29      implicit none
30
31#include "dimensions.h"
32#include "paramet.h"
33#include "comdissnew.h"
34#include "comgeom.h"
35#include "description.h"
36#include "dimsoil.h"
37#include "netcdf.inc"
38
39c-----------------------------------------------------------------------
40c   Declarations
41c-----------------------------------------------------------------------
42
43c variables dynamiques du GCM
44c -----------------------------
45      REAL vcov(ip1jm,llm),ucov(ip1jmp1,llm) ! vents covariants
46      REAL teta(ip1jmp1,llm)                    ! temperature potentielle
47      REAL, ALLOCATABLE, DIMENSION(:,:,:):: q! champs advectes
48      REAL pks(ip1jmp1)                      ! exner (f pour filtre)
49      REAL pk(ip1jmp1,llm)
50      REAL pkf(ip1jmp1,llm)
51      REAL alpha(iip1,jjp1,llm),beta(iip1,jjp1,llm)
52      REAL phis(ip1jmp1)                     ! geopotentiel au sol
53      REAL masse(ip1jmp1,llm)                ! masse de l'atmosphere
54      REAL ps(ip1jmp1)                       ! pression au sol
55      REAL p3d(iip1, jjp1, llm+1)            ! pression aux interfaces
56     
57c Variable Physiques (grille physique)
58c ------------------------------------
59      integer ngridmx,nlayermx
60      parameter (ngridmx=(2+(jjm-1)*iim - 1/jjm))
61      parameter (nlayermx=llm)
62
63      real rlat(ngridmx),rlon(ngridmx)
64      REAL tsurf(ngridmx),tsoil(ngridmx,nsoilmx)
65      REAL albe(ngridmx),radsol(ngridmx),sollw(ngridmx)
66      real solsw(ngridmx),dlw(ngridmx)
67      REAL zmea(ngridmx), zstd(ngridmx)
68      REAL zsig(ngridmx), zgam(ngridmx), zthe(ngridmx)
69      REAL zpic(ngridmx), zval(ngridmx)
70     
71      INTEGER start,length
72      PARAMETER (length = 100)
73      REAL tab_cntrl_fi(length) ! tableau des parametres de startfi
74      REAL tab_cntrl_dyn(length) ! tableau des parametres de start
75      INTEGER*4 day_ini_fi
76
77c Variable naturelle / grille scalaire
78c ------------------------------------
79      REAL T(ip1jmp1,llm),us(ip1jmp1,llm),vs(ip1jmp1,llm)
80      REAL tsurfS(ip1jmp1),tsoilS(ip1jmp1,nsoilmx)
81      real rlatS(ip1jmp1),rlonS(ip1jmp1)
82      real albeS(ip1jmp1),radsolS(ip1jmp1),sollwS(ip1jmp1)
83      real solswS(ip1jmp1),dlwS(ip1jmp1)
84      real zmeaS(ip1jmp1),zstdS(ip1jmp1),zsigS(ip1jmp1)
85      real zgamS(ip1jmp1),ztheS(ip1jmp1),zpicS(ip1jmp1)
86      real zvalS(ip1jmp1)
87     
88c Variables intermediaires : vent naturel, mais pas coord scalaire
89c----------------------------------------------------------------
90      REAL vn(ip1jm,llm),un(ip1jmp1,llm)
91
92c Autres  variables
93c -----------------
94      REAL ptotal
95
96      CHARACTER*2 str2
97
98      INTEGER ij, l,i,j,isoil,iq
99      character*80      fichnom
100      integer :: ierr
101
102c Netcdf
103c-------
104      integer varid,dimid
105      INTEGER nid
106
107c-----------------------------------------------------------------------
108c   Initialisations
109c-----------------------------------------------------------------------
110
111c VENUS/TITAN
112
113        iflag_trac = 1
114c-----------------------------------------------------------------------
115c   Initialisation des traceurs
116c   ---------------------------
117c  Choix du nombre de traceurs et du schema pour l advection
118c  dans fichier traceur.def, par default ou via INCA
119      call infotrac_init
120
121c Allocation de la tableau q : champs advectes   
122      allocate(q(ip1jmp1,llm,nqtot))
123
124c=======================================================================
125c Lecture des donnees
126c=======================================================================
127
128      fichnom = 'start.nc'
129      CALL readstart(fichnom,nqtot,vcov,ucov,teta,q,masse,
130     .       ps,phis,tab_cntrl_dyn)
131
132      fichnom = 'startphy.nc'
133      CALL readstartphy(fichnom,
134     .       rlat,rlon,tsurf,tsoil,
135     .       albe, solsw, sollw,
136     .       dlw,radsol,
137     .       zmea,zstd,zsig,zgam,zthe,zpic,zval,
138     .       tab_cntrl_fi)
139
140c-----------------------------------------------------------------------
141c   Initialisations
142c-----------------------------------------------------------------------
143
144      CALL conf_gcm( 99, .TRUE. )
145      call iniconst
146      call inigeom
147      call inifilr
148      call ini_cpdet
149
150      CALL pression(ip1jmp1, ap, bp, ps, p3d)
151         if (disvert_type==1) then
152           CALL exner_hyb(  ip1jmp1, ps, p3d, pks, pk, pkf )
153         else ! we assume that we are in the disvert_type==2 case
154           CALL exner_milieu( ip1jmp1, ps, p3d, pks, pk, pkf )
155         endif
156
157c=======================================================================
158c Transformation EN VARIABLE NATURELLE / GRILLE SCALAIRE si necessaire
159c=======================================================================
160c  Les variables modeles dependent de la resolution. Il faut donc
161c  eliminer les facteurs responsables de cette dependance
162c  (pour utiliser newstart)
163c=======================================================================
164
165c-----------------------------------------------------------------------
166c Vent   (depend de la resolution horizontale)
167c-----------------------------------------------------------------------
168c
169c ucov --> un  et  vcov --> vn
170c un --> us  et   vn --> vs
171c
172c-----------------------------------------------------------------------
173
174      call covnat(llm,ucov, vcov, un, vn)
175      call wind_scal(un,vn,us,vs)
176
177c-----------------------------------------------------------------------
178c Temperature  (depend de la resolution verticale => de "sigma.def")
179c-----------------------------------------------------------------------
180c
181c h --> T
182c
183c-----------------------------------------------------------------------
184! ADAPTATION GCM POUR CP(T)
185
186      call tpot2t(ip1jmp1*llm,teta,T,pk)
187
188c-----------------------------------------------------------------------
189c Variable physique
190c-----------------------------------------------------------------------
191c
192c tsurf --> tsurfS
193c et autres...
194c
195c-----------------------------------------------------------------------
196
197      call gr_fi_dyn(1,ngridmx,iip1,jjp1,tsurf,tsurfS)
198      call gr_fi_dyn(nsoilmx,ngridmx,iip1,jjp1,tsoil,tsoilS)
199      call gr_fi_dyn(1,ngridmx,iip1,jjp1,rlat,rlatS)
200      call gr_fi_dyn(1,ngridmx,iip1,jjp1,rlon,rlonS)
201      call gr_fi_dyn(1,ngridmx,iip1,jjp1,albe,albeS)
202      call gr_fi_dyn(1,ngridmx,iip1,jjp1,radsol,radsolS)
203      call gr_fi_dyn(1,ngridmx,iip1,jjp1,sollw,sollwS)
204      call gr_fi_dyn(1,ngridmx,iip1,jjp1,solsw,solswS)
205      call gr_fi_dyn(1,ngridmx,iip1,jjp1,dlw,dlwS)
206      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zmea,zmeaS)
207      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zstd,zstdS)
208      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zsig,zsigS)
209      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zgam,zgamS)
210      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zthe,ztheS)
211      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zpic,zpicS)
212      call gr_fi_dyn(1,ngridmx,iip1,jjp1,zval,zvalS)
213
214c=======================================================================
215c Info pour controler
216c=======================================================================
217
218      ptotal =  0.
219      DO j=1,jjp1
220         DO i=1,iim
221           ptotal=ptotal+aire(i+(iim+1)*(j-1))*ps(i+(iim+1)*(j-1))/g
222         ENDDO
223      ENDDO
224      write(*,*)'Ancienne grille : masse de l''atm :',ptotal
225
226c-----------------------------------------------------------------------
227c Passage de "ptotal" par tab_cntrl_fi
228c-----------------------------------------------------------------------
229
230      tab_cntrl_fi(length) = ptotal
231
232c=======================================================================
233c Ecriture dans le fichier  "start_archive"
234c=======================================================================
235
236c-----------------------------------------------------------------------
237c Ouverture de "start_archive"
238c-----------------------------------------------------------------------
239
240      ierr = NF_OPEN ('start_archive.nc', NF_WRITE,nid)
241 
242c-----------------------------------------------------------------------
243c  si "start_archive" n'existe pas:
244c    1_ ouverture
245c    2_ creation de l'entete dynamique ("ini_archive")
246c-----------------------------------------------------------------------
247c ini_archive:
248c On met dans l'entete le tab_cntrl_dyn (1 a length)
249c  On y ajoute les valeurs du tab_cntrl_fi (length+1 a 2*length)
250c-----------------------------------------------------------------------
251
252      if (ierr.ne.NF_NOERR) then
253         write(*,*)'OK, Could not open file "start_archive.nc"'
254         write(*,*)'So let s create a new "start_archive"'
255         ierr = NF_CREATE('start_archive.nc', NF_CLOBBER, nid)
256         call ini_archive(nid,phis,tab_cntrl_dyn,tab_cntrl_fi)
257      else
258         write(*,*)'Attention, start_archive.nc existe deja...'
259         call abort
260      endif
261
262c-----------------------------------------------------------------------
263c Ecriture des champs
264c-----------------------------------------------------------------------
265
266      call write_archive(nid,'u','Vent zonal','m.s-1',3,us)
267      call write_archive(nid,'v','Vent merid','m.s-1',3,vs)
268      call write_archive(nid,'temp','temperature','K',3,T)
269c-----------------------------------------------------------------------
270c Ecriture du champs  q  ( q[1,nqtot] )
271c-----------------------------------------------------------------------
272       do iq=1,nqtot
273        write(str2,'(i2.2)') iq
274         call write_archive(nid,tname(iq),'tracer','kg/kg',
275     .         3,q(1,1,iq))
276       end do
277c-----------------------------------------------------------------------
278      call write_archive(nid,'masse','Masse','kg',3,masse)
279      call write_archive(nid,'ps','Psurf','Pa',2,ps)
280      call write_archive(nid,'tsurf','surf T','K',2,tsurfS)
281c-----------------------------------------------------------------------
282c Ecriture du champs  tsoil  ( Tsoil[1,nsoilmx] )
283c-----------------------------------------------------------------------
284c "tsoil" Temperature au sol definie dans nsoilmx couches dans le sol
285c   Les nsoilmx couches sont lues comme nsoilmx champs
286c  nommees Tsoil[1,nsoilmx]
287      do isoil=1,nsoilmx
288       write(str2,'(i2.2)') isoil
289       call write_archive(nid,'Tsoil'//str2,'Ground Temperature ',
290     .   'K',2,tsoilS(1,isoil))
291      enddo
292c-----------------------------------------------------------------------
293      call write_archive(nid,'rlat','Latitude','rad',2,rlatS)
294      call write_archive(nid,'rlon','Longitude','rad',2,rlonS)
295      call write_archive(nid,'albe','Albedo','',2,albeS)
296      call write_archive(nid,'radsol',
297     .             'Net flux at surface','W m-2',2,radsolS)
298      call write_archive(nid,'sollw',
299     .             'LW flux at surface','W m-2',2,sollwS)
300      call write_archive(nid,'solsw',
301     .             'SW flux at surface','W m-2',2,solswS)
302      call write_archive(nid,'dlw','LW derive','?',2,dlwS)
303      call write_archive(nid,'zmea','param oro sous-maille','m',2,zmeaS)
304      call write_archive(nid,'zstd','param oro sous-maille','m',2,zstdS)
305      call write_archive(nid,'zsig','param oro sous-maille','m',2,zsigS)
306      call write_archive(nid,'zgam','param oro sous-maille','m',2,zgamS)
307      call write_archive(nid,'zthe','param oro sous-maille','m',2,ztheS)
308      call write_archive(nid,'zpic','param oro sous-maille','m',2,zpicS)
309      call write_archive(nid,'zval','param oro sous-maille','m',2,zvalS)
310
311      ierr=NF_CLOSE(nid)
312
313c-----------------------------------------------------------------------
314c Fin
315c-----------------------------------------------------------------------
316
317      end
Note: See TracBrowser for help on using the repository browser.