source: LMDZ4/branches/LMDZ4-dev/libf/phylmd/phyredem.F @ 1267

Last change on this file since 1267 was 1227, checked in by jghattas, 15 years ago
  • Inclusion d'un premier version du cycle de carbon dans LMDZ. Attention

!! Il s'agit d'un version ou les nouveaux cles cycle_carbon_tr et
cycle_carbon_cpl ne sont pas teste. Avec les ancinenes parametres le
modele donne les memes resultats qu'avant. L'interface avec ORCHIDEE n'a
pas encore etait modifie.

  • physiq.F, phys_cal_mod.F90 : ajout d'un nouveau module qui contient qq parametres pour le calendrier et le pas de temps acutelle de la physiq. Ce module pourrait etre elargie plus tard / LF + JG


  • infotrac.F90 : les noms du traceurs peut prendre un nom plus long (15 caracteres) dans traceur.def
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.8 KB
RevLine 
[524]1!
2! $Header$
3!
4c
[967]5      SUBROUTINE phyredem (fichnom)
[782]6
[766]7      USE dimphy
[776]8      USE mod_grid_phy_lmdz
9      USE mod_phys_lmdz_para
[782]10      USE fonte_neige_mod,  ONLY : fonte_neige_final
11      USE pbl_surface_mod,  ONLY : pbl_surface_final
[967]12      USE phys_state_var_mod
[1001]13      USE iostart
[1191]14      USE traclmdz_mod, ONLY : traclmdz_to_restart
15      USE infotrac
[782]16
[524]17      IMPLICIT none
18c======================================================================
19c Auteur(s) Z.X. Li (LMD/CNRS) date: 19930818
20c Objet: Ecriture de l'etat de redemarrage pour la physique
21c======================================================================
22#include "netcdf.inc"
23#include "indicesol.h"
24#include "dimsoil.h"
25#include "clesphys.h"
26#include "control.h"
27#include "temps.h"
[878]28#include "thermcell.h"
29#include "compbl.h"
[524]30c======================================================================
31      CHARACTER*(*) fichnom
[967]32
33c les variables globales ecrites dans le fichier restart
34
[766]35     
[1001]36      REAL tsoil(klon,nsoilmx,nbsrf)
37      REAL tslab(klon), seaice(klon)
38      REAL qsurf(klon,nbsrf)
39      REAL qsol(klon)
40      REAL snow(klon,nbsrf)
41      REAL evap(klon,nbsrf)
42      real fder(klon)
43      REAL frugs(klon,nbsrf)
44      REAL agesno(klon,nbsrf)
45      REAL run_off_lic_0(klon)
[1191]46      REAL trs(klon,nbtr)
[524]47c
48      INTEGER nid, nvarid, idim1, idim2, idim3
49      INTEGER ierr
50      INTEGER length
51      PARAMETER (length=100)
52      REAL tab_cntrl(length)
53c
54      INTEGER isoil, nsrf
[967]55      CHARACTER (len=7) :: str7
56      CHARACTER (len=2) :: str2
[1191]57      INTEGER           :: it, iiq
58     
[782]59c======================================================================
60c
61c Get variables which will be written to restart file from module
62c pbl_surface_mod
[1001]63      CALL pbl_surface_final(qsol, fder, snow, qsurf,
64     $     evap, frugs, agesno, tsoil)
[782]65
66c Get a variable calculated in module fonte_neige_mod
[1001]67      CALL fonte_neige_final(run_off_lic_0)
[782]68
69c======================================================================
70
[1001]71      CALL open_restartphy(fichnom)
[766]72     
[524]73      DO ierr = 1, length
74         tab_cntrl(ierr) = 0.0
75      ENDDO
[1225]76CC      tab_cntrl(1) = dtime
[524]77      tab_cntrl(2) = radpas
[1227]78c co2_ppm : current value of atmospheric CO2
[524]79      tab_cntrl(3) = co2_ppm
80      tab_cntrl(4) = solaire
81      tab_cntrl(5) = iflag_con
82      tab_cntrl(6) = nbapp_rad
83
84      IF( cycle_diurne ) tab_cntrl( 7 ) = 1.
85      IF(   soil_model ) tab_cntrl( 8 ) = 1.
86      IF(     new_oliq ) tab_cntrl( 9 ) = 1.
87      IF(     ok_orodr ) tab_cntrl(10 ) = 1.
88      IF(     ok_orolf ) tab_cntrl(11 ) = 1.
89
90      tab_cntrl(13) = day_end
91      tab_cntrl(14) = annee_ref
92      tab_cntrl(15) = itau_phy
[1227]93
94c co2_ppm0 : initial value of atmospheric CO2
95      tab_cntrl(16) = co2_ppm0
[524]96c
[1001]97      CALL put_var("controle","Parametres de controle",tab_cntrl)
[524]98c
[1001]99
100      CALL put_field("longitude",
101     .               "Longitudes de la grille physique",rlon)
102     
103      CALL put_field("latitude","Latitudes de la grille physique",rlat)
104
[524]105c
106C PB ajout du masque terre/mer
107C
[1001]108      CALL put_field("masque","masque terre mer",zmasq)
109
[524]110c BP ajout des fraction de chaque sous-surface
111C
112C 1. fraction de terre
113C
[1001]114      CALL put_field("FTER","fraction de continent",pctsrf(:,is_ter))
[524]115C
116C 2. Fraction de glace de terre
117C
[1001]118      CALL put_field("FLIC","fraction glace de terre",pctsrf(:,is_lic))
[524]119C
120C 3. fraction ocean
121C
[1001]122      CALL put_field("FOCE","fraction ocean",pctsrf(:,is_oce))
[524]123C
124C 4. Fraction glace de mer
125C
[1001]126      CALL put_field("FSIC","fraction glace mer",pctsrf(:,is_sic))
[524]127C
128C
129c
130      DO nsrf = 1, nbsrf
131        IF (nsrf.LE.99) THEN
[1001]132          WRITE(str2,'(i2.2)') nsrf
133          CALL put_field("TS"//str2,"Temperature de surface No."//str2,
134     .                    ftsol(:,nsrf))
[524]135        ELSE
[1001]136          PRINT*, "Trop de sous-mailles"
137          CALL abort
[524]138        ENDIF
139      ENDDO
140c
141      DO nsrf = 1, nbsrf
[1001]142        DO isoil=1, nsoilmx
143          IF (isoil.LE.99 .AND. nsrf.LE.99) THEN
144            WRITE(str7,'(i2.2,"srf",i2.2)') isoil,nsrf
145            CALL put_field("Tsoil"//str7,"Temperature du sol No."//str7,
146     .                     tsoil(:,isoil,nsrf))
147          ELSE
148            PRINT*, "Trop de couches"
149            CALL abort
150          ENDIF
151        ENDDO
[524]152      ENDDO
153c
154      DO nsrf = 1, nbsrf
155        IF (nsrf.LE.99) THEN
[1001]156          WRITE(str2,'(i2.2)') nsrf
157          CALL put_field("QS"//str2,"Humidite de surface No."//str2,
158     .                   qsurf(:,nsrf))
[524]159        ELSE
[1001]160          PRINT*, "Trop de sous-mailles"
161          CALL abort
[524]162        ENDIF
163      END DO
164C
[1001]165      CALL put_field("QSOL","Eau dans le sol (mm)",qsol)
[524]166c
167      DO nsrf = 1, nbsrf
168        IF (nsrf.LE.99) THEN
[1001]169          WRITE(str2,'(i2.2)') nsrf
170          CALL put_field("ALBE"//str2,"albedo de surface No."//str2,
171     .                   falb1(:,nsrf))
[524]172        ELSE
[1001]173          PRINT*, "Trop de sous-mailles"
174          CALL abort
[524]175        ENDIF
176      ENDDO
177
[1001]178      DO nsrf = 1, nbsrf
[524]179        IF (nsrf.LE.99) THEN
[1001]180          WRITE(str2,'(i2.2)') nsrf
181          CALL put_field("ALBLW"//str2,"albedo LW de surface No."//str2,
182     .                   falb2(:,nsrf))
[524]183        ELSE
[1001]184          PRINT*, "Trop de sous-mailles"
185          CALL abort
[524]186        ENDIF
187      ENDDO
188c
[888]189c
[524]190      DO nsrf = 1, nbsrf
191        IF (nsrf.LE.99) THEN
[1001]192          WRITE(str2,'(i2.2)') nsrf
193          CALL put_field("EVAP"//str2,"Evaporation de surface No."//str2
194     .                   ,evap(:,nsrf))
[524]195        ELSE
[1001]196          PRINT*, "Trop de sous-mailles"
197          CALL abort
[524]198        ENDIF
199      ENDDO
200
201c
202      DO nsrf = 1, nbsrf
203        IF (nsrf.LE.99) THEN
[1001]204          WRITE(str2,'(i2.2)') nsrf
205          CALL put_field("SNOW"//str2,"Neige de surface No."//str2,
206     .                   snow(:,nsrf))
[524]207        ELSE
[1001]208          PRINT*, "Trop de sous-mailles"
209          CALL abort
[524]210        ENDIF
211      ENDDO
212
213c
[1001]214      CALL put_field("RADS","Rayonnement net a la surface",radsol)
[524]215c
[1001]216      CALL put_field("solsw","Rayonnement solaire a la surface",solsw)
[524]217c
[1001]218      CALL put_field("sollw","Rayonnement IF a la surface",sollw)
[524]219c
[1001]220      CALL put_field("fder","Derive de flux",fder)
[524]221c
[1001]222      CALL put_field("rain_f","precipitation liquide",rain_fall)
[524]223c
[1001]224      CALL put_field("snow_f", "precipitation solide",snow_fall)
[524]225c
226      DO nsrf = 1, nbsrf
227        IF (nsrf.LE.99) THEN
228        WRITE(str2,'(i2.2)') nsrf
[1001]229          CALL put_field("RUG"//str2,"rugosite de surface No."//str2,
230     .         frugs(:,nsrf))
[524]231        ELSE
[1001]232          PRINT*, "Trop de sous-mailles"
233          CALL abort
[524]234        ENDIF
235      ENDDO
236c
237      DO nsrf = 1, nbsrf
238        IF (nsrf.LE.99) THEN
239            WRITE(str2,'(i2.2)') nsrf
[1001]240            CALL put_field("AGESNO"//str2,
241     .                     "Age de la neige surface No."//str2,
242     .                     agesno(:,nsrf))
[524]243        ELSE
244            PRINT*, "Trop de sous-mailles"
245            CALL abort
246        ENDIF
247      ENDDO
248c
[1001]249      CALL put_field("ZMEA","",zmea)
[524]250c
[1001]251      CALL put_field("ZSTD","",zstd)
252     
253      CALL put_field("ZSIG","",zsig)
254     
255      CALL put_field("ZGAM","",zgam)
256     
257      CALL put_field("ZTHE","",zthe)
258     
259      CALL put_field("ZPIC","",zpic)
260     
261      CALL put_field("ZVAL","",zval)
262     
263      CALL put_field("RUGSREL","RUGSREL",rugoro)
264     
265      CALL put_field("TANCIEN","",t_ancien)
266     
267      CALL put_field("QANCIEN","",q_ancien)
268     
269      CALL put_field("RUGMER","Longueur de rugosite sur mer",
270     .               frugs(:,is_oce))
271     
272      CALL put_field("CLWCON","Eau liquide convective",clwcon(:,1))
273     
274      CALL put_field("RNEBCON","Nebulosite convective",rnebcon(:,1))
275     
276      CALL put_field("RATQS", "Ratqs",ratqs(:,1))
[524]277c
278c run_off_lic_0
279c
[1001]280      CALL put_field("RUNOFFLIC0","Runofflic0",run_off_lic_0)
[524]281c
282c
[878]283!!!!!!!!!!!!!!!!!!!! DEB TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
284c
285      IF (iflag_pbl>1) then
[1001]286        DO nsrf = 1, nbsrf
287          IF (nsrf.LE.99) THEN
[878]288            WRITE(str2,'(i2.2)') nsrf
[1001]289            CALL put_field("TKE"//str2,"Energ. Cineti. Turb."//str2,
290     .                     pbl_tke(:,1:klev,nsrf))
291          ELSE
[878]292            PRINT*, "Trop de sous-mailles"
293            CALL abort
[1001]294          ENDIF
295        ENDDO
[878]296      ENDIF
297
298!!!!!!!!!!!!!!!!!!!! FIN TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
[973]299cIM ajout zmax0, f0, ema_work1, ema_work2
300cIM wake_deltat, wake_deltaq, wake_s, wake_cstar, wake_fip
[1001]301     
302      CALL put_field("ZMAX0","",zmax0)
303     
304      CALL put_field("F0","",f0)
305     
306      CALL put_field("EMA_WORK1","",ema_work1)
307     
308      CALL put_field("EMA_WORK2","",ema_work2)
309     
[973]310c wake_deltat
[1001]311      CALL put_field("WAKE_DELTAT","",wake_deltat)
312
313      CALL put_field("WAKE_DELTAQ","",wake_deltaq)
314     
315      CALL put_field("WAKE_S","",wake_s)
316     
317      CALL put_field("WAKE_CSTAR","",wake_cstar)
318     
319      CALL put_field("WAKE_FIP","",wake_fip)
320
[1191]321
322! trs from traclmdz_mod
323      IF (type_trac == 'lmdz') THEN
324         CALL traclmdz_to_restart(trs)
325         DO it=1,nbtr
326            iiq=niadv(it+2)
327            CALL put_field("trs_"//tname(iiq),"",trs(:,it))
328         END DO
329      END IF
330
[1001]331      CALL close_restartphy
332!$OMP BARRIER
[524]333      RETURN
334      END
Note: See TracBrowser for help on using the repository browser.