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

Last change on this file since 1200 was 1191, checked in by jghattas, 15 years ago

Reecriture de phytrac et les routines concernes (Anthony Jamelot)

  • les suffix change de F -> F90 (nflxtr.F90,cltracrn.F90,initrrnpb.F90,cvltr.F90,minmaxqfi.F90,cltrac.F90,phytrac.F90)

Traitement d'un nouveau traceur berelium (optionel, toujours pour des
tests)(Anthony Jamelot)

  • radiornpb.F change du nom pour radio_decay.F90 car il traite maintenant tout les traceurs radioactives
  • ajoute init_be.F90

Nouveau interface dans phytrac pour serparer les calculs et appels
specifique a INCA avec les traitements des traceurs specifiques au LMDZ
(JG)

  • ajoute tracinca_mod.F90 pour les appeles a INCA
  • ajoute traclmdz_mod.F90 pour les calculs des traceurs specifiques a LMDZ
  • enleve fichier restartrac et ajoute la variable trs dans restartphy.nc

La convergence numerique a etait rompue uniquement pour les traceurs
LMDZ RN et PB.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.7 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
76      tab_cntrl(1) = dtime
77      tab_cntrl(2) = radpas
78      tab_cntrl(3) = co2_ppm
79      tab_cntrl(4) = solaire
80      tab_cntrl(5) = iflag_con
81      tab_cntrl(6) = nbapp_rad
82
83      IF( cycle_diurne ) tab_cntrl( 7 ) = 1.
84      IF(   soil_model ) tab_cntrl( 8 ) = 1.
85      IF(     new_oliq ) tab_cntrl( 9 ) = 1.
86      IF(     ok_orodr ) tab_cntrl(10 ) = 1.
87      IF(     ok_orolf ) tab_cntrl(11 ) = 1.
88
89      tab_cntrl(13) = day_end
90      tab_cntrl(14) = annee_ref
91      tab_cntrl(15) = itau_phy
92c
[1001]93      CALL put_var("controle","Parametres de controle",tab_cntrl)
[524]94c
[1001]95
96      CALL put_field("longitude",
97     .               "Longitudes de la grille physique",rlon)
98     
99      CALL put_field("latitude","Latitudes de la grille physique",rlat)
100
[524]101c
102C PB ajout du masque terre/mer
103C
[1001]104      CALL put_field("masque","masque terre mer",zmasq)
105
[524]106c BP ajout des fraction de chaque sous-surface
107C
108C 1. fraction de terre
109C
[1001]110      CALL put_field("FTER","fraction de continent",pctsrf(:,is_ter))
[524]111C
112C 2. Fraction de glace de terre
113C
[1001]114      CALL put_field("FLIC","fraction glace de terre",pctsrf(:,is_lic))
[524]115C
116C 3. fraction ocean
117C
[1001]118      CALL put_field("FOCE","fraction ocean",pctsrf(:,is_oce))
[524]119C
120C 4. Fraction glace de mer
121C
[1001]122      CALL put_field("FSIC","fraction glace mer",pctsrf(:,is_sic))
[524]123C
124C
125c
126      DO nsrf = 1, nbsrf
127        IF (nsrf.LE.99) THEN
[1001]128          WRITE(str2,'(i2.2)') nsrf
129          CALL put_field("TS"//str2,"Temperature de surface No."//str2,
130     .                    ftsol(:,nsrf))
[524]131        ELSE
[1001]132          PRINT*, "Trop de sous-mailles"
133          CALL abort
[524]134        ENDIF
135      ENDDO
136c
137      DO nsrf = 1, nbsrf
[1001]138        DO isoil=1, nsoilmx
139          IF (isoil.LE.99 .AND. nsrf.LE.99) THEN
140            WRITE(str7,'(i2.2,"srf",i2.2)') isoil,nsrf
141            CALL put_field("Tsoil"//str7,"Temperature du sol No."//str7,
142     .                     tsoil(:,isoil,nsrf))
143          ELSE
144            PRINT*, "Trop de couches"
145            CALL abort
146          ENDIF
147        ENDDO
[524]148      ENDDO
149c
150      DO nsrf = 1, nbsrf
151        IF (nsrf.LE.99) THEN
[1001]152          WRITE(str2,'(i2.2)') nsrf
153          CALL put_field("QS"//str2,"Humidite de surface No."//str2,
154     .                   qsurf(:,nsrf))
[524]155        ELSE
[1001]156          PRINT*, "Trop de sous-mailles"
157          CALL abort
[524]158        ENDIF
159      END DO
160C
[1001]161      CALL put_field("QSOL","Eau dans le sol (mm)",qsol)
[524]162c
163      DO nsrf = 1, nbsrf
164        IF (nsrf.LE.99) THEN
[1001]165          WRITE(str2,'(i2.2)') nsrf
166          CALL put_field("ALBE"//str2,"albedo de surface No."//str2,
167     .                   falb1(:,nsrf))
[524]168        ELSE
[1001]169          PRINT*, "Trop de sous-mailles"
170          CALL abort
[524]171        ENDIF
172      ENDDO
173
[1001]174      DO nsrf = 1, nbsrf
[524]175        IF (nsrf.LE.99) THEN
[1001]176          WRITE(str2,'(i2.2)') nsrf
177          CALL put_field("ALBLW"//str2,"albedo LW de surface No."//str2,
178     .                   falb2(:,nsrf))
[524]179        ELSE
[1001]180          PRINT*, "Trop de sous-mailles"
181          CALL abort
[524]182        ENDIF
183      ENDDO
184c
[888]185c
[524]186      DO nsrf = 1, nbsrf
187        IF (nsrf.LE.99) THEN
[1001]188          WRITE(str2,'(i2.2)') nsrf
189          CALL put_field("EVAP"//str2,"Evaporation de surface No."//str2
190     .                   ,evap(:,nsrf))
[524]191        ELSE
[1001]192          PRINT*, "Trop de sous-mailles"
193          CALL abort
[524]194        ENDIF
195      ENDDO
196
197c
198      DO nsrf = 1, nbsrf
199        IF (nsrf.LE.99) THEN
[1001]200          WRITE(str2,'(i2.2)') nsrf
201          CALL put_field("SNOW"//str2,"Neige de surface No."//str2,
202     .                   snow(:,nsrf))
[524]203        ELSE
[1001]204          PRINT*, "Trop de sous-mailles"
205          CALL abort
[524]206        ENDIF
207      ENDDO
208
209c
[1001]210      CALL put_field("RADS","Rayonnement net a la surface",radsol)
[524]211c
[1001]212      CALL put_field("solsw","Rayonnement solaire a la surface",solsw)
[524]213c
[1001]214      CALL put_field("sollw","Rayonnement IF a la surface",sollw)
[524]215c
[1001]216      CALL put_field("fder","Derive de flux",fder)
[524]217c
[1001]218      CALL put_field("rain_f","precipitation liquide",rain_fall)
[524]219c
[1001]220      CALL put_field("snow_f", "precipitation solide",snow_fall)
[524]221c
222      DO nsrf = 1, nbsrf
223        IF (nsrf.LE.99) THEN
224        WRITE(str2,'(i2.2)') nsrf
[1001]225          CALL put_field("RUG"//str2,"rugosite de surface No."//str2,
226     .         frugs(:,nsrf))
[524]227        ELSE
[1001]228          PRINT*, "Trop de sous-mailles"
229          CALL abort
[524]230        ENDIF
231      ENDDO
232c
233      DO nsrf = 1, nbsrf
234        IF (nsrf.LE.99) THEN
235            WRITE(str2,'(i2.2)') nsrf
[1001]236            CALL put_field("AGESNO"//str2,
237     .                     "Age de la neige surface No."//str2,
238     .                     agesno(:,nsrf))
[524]239        ELSE
240            PRINT*, "Trop de sous-mailles"
241            CALL abort
242        ENDIF
243      ENDDO
244c
[1001]245      CALL put_field("ZMEA","",zmea)
[524]246c
[1001]247      CALL put_field("ZSTD","",zstd)
248     
249      CALL put_field("ZSIG","",zsig)
250     
251      CALL put_field("ZGAM","",zgam)
252     
253      CALL put_field("ZTHE","",zthe)
254     
255      CALL put_field("ZPIC","",zpic)
256     
257      CALL put_field("ZVAL","",zval)
258     
259      CALL put_field("RUGSREL","RUGSREL",rugoro)
260     
261      CALL put_field("TANCIEN","",t_ancien)
262     
263      CALL put_field("QANCIEN","",q_ancien)
264     
265      CALL put_field("RUGMER","Longueur de rugosite sur mer",
266     .               frugs(:,is_oce))
267     
268      CALL put_field("CLWCON","Eau liquide convective",clwcon(:,1))
269     
270      CALL put_field("RNEBCON","Nebulosite convective",rnebcon(:,1))
271     
272      CALL put_field("RATQS", "Ratqs",ratqs(:,1))
[524]273c
274c run_off_lic_0
275c
[1001]276      CALL put_field("RUNOFFLIC0","Runofflic0",run_off_lic_0)
[524]277c
278c
[878]279!!!!!!!!!!!!!!!!!!!! DEB TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
280c
281      IF (iflag_pbl>1) then
[1001]282        DO nsrf = 1, nbsrf
283          IF (nsrf.LE.99) THEN
[878]284            WRITE(str2,'(i2.2)') nsrf
[1001]285            CALL put_field("TKE"//str2,"Energ. Cineti. Turb."//str2,
286     .                     pbl_tke(:,1:klev,nsrf))
287          ELSE
[878]288            PRINT*, "Trop de sous-mailles"
289            CALL abort
[1001]290          ENDIF
291        ENDDO
[878]292      ENDIF
293
294!!!!!!!!!!!!!!!!!!!! FIN TKE PBL !!!!!!!!!!!!!!!!!!!!!!!!!
[973]295cIM ajout zmax0, f0, ema_work1, ema_work2
296cIM wake_deltat, wake_deltaq, wake_s, wake_cstar, wake_fip
[1001]297     
298      CALL put_field("ZMAX0","",zmax0)
299     
300      CALL put_field("F0","",f0)
301     
302      CALL put_field("EMA_WORK1","",ema_work1)
303     
304      CALL put_field("EMA_WORK2","",ema_work2)
305     
[973]306c wake_deltat
[1001]307      CALL put_field("WAKE_DELTAT","",wake_deltat)
308
309      CALL put_field("WAKE_DELTAQ","",wake_deltaq)
310     
311      CALL put_field("WAKE_S","",wake_s)
312     
313      CALL put_field("WAKE_CSTAR","",wake_cstar)
314     
315      CALL put_field("WAKE_FIP","",wake_fip)
316
[1191]317
318! trs from traclmdz_mod
319      IF (type_trac == 'lmdz') THEN
320         CALL traclmdz_to_restart(trs)
321         DO it=1,nbtr
322            iiq=niadv(it+2)
323            CALL put_field("trs_"//tname(iiq),"",trs(:,it))
324         END DO
325      END IF
326
[1001]327      CALL close_restartphy
328!$OMP BARRIER
[524]329      RETURN
330      END
Note: See TracBrowser for help on using the repository browser.