source: LMDZ5/trunk/libf/dyn3d/etat0_netcdf.F90 @ 1496

Last change on this file since 1496 was 1496, checked in by Laurent Fairhead, 13 years ago

Modified closure for the new physics package, new values for the iflag_coupl parameter
FH


Fermeture modifiée pour la nouvelle physique, nouvelles valeurs définies pour
le paramètre iflag_coupl
FH

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 19.1 KB
RevLine 
[524]1!
[1319]2! $Id: etat0_netcdf.F90 1496 2011-03-11 09:44:05Z fairhead $
[524]3!
[1319]4!-------------------------------------------------------------------------------
5!
6SUBROUTINE etat0_netcdf(ib, masque, letat0)
7!
8!-------------------------------------------------------------------------------
9! Purpose: Creates initial states
10!-------------------------------------------------------------------------------
11! Note: This routine is designed to work for Earth
12!-------------------------------------------------------------------------------
[1403]13  USE control_mod
[1319]14#ifdef CPP_EARTH
15  USE startvar
16  USE ioipsl
17  USE dimphy
18  USE infotrac
19  USE fonte_neige_mod
20  USE pbl_surface_mod
21  USE phys_state_var_mod
22  USE filtreg_mod
23  USE regr_lat_time_climoz_m, ONLY: regr_lat_time_climoz
24  USE conf_phys_m,            ONLY: conf_phys
[1406]25! For parameterization of ozone chemistry:
26  use regr_lat_time_coefoz_m, only: regr_lat_time_coefoz
27  use press_coefoz_m, only: press_coefoz
28  use regr_pr_o3_m, only: regr_pr_o3
[1319]29  USE netcdf, ONLY : NF90_OPEN, NF90_NOWRITE, NF90_CLOSE, NF90_NOERR
[1146]30#endif
[1319]31  IMPLICIT NONE
32!-------------------------------------------------------------------------------
33! Arguments:
[524]34#include "dimensions.h"
35#include "paramet.h"
[1319]36#include "iniprint.h"
37  LOGICAL,                    INTENT(IN)    :: ib     ! barycentric interpolat.
38  REAL, DIMENSION(iip1,jjp1), INTENT(INOUT) :: masque ! land mask
39  LOGICAL,                    INTENT(IN)    :: letat0 ! F: masque only required
40#ifndef CPP_EARTH
41  WRITE(lunout,*)'limit_netcdf: Earth-specific routine, needs Earth physics'
42#else
43!-------------------------------------------------------------------------------
44! Local variables:
[524]45#include "comgeom2.h"
46#include "comvert.h"
47#include "comconst.h"
48#include "indicesol.h"
49#include "dimsoil.h"
50#include "temps.h"
[1319]51  REAL,    DIMENSION(klon)                 :: tsol, qsol
52  REAL,    DIMENSION(klon)                 :: sn, rugmer, run_off_lic_0
53  REAL,    DIMENSION(iip1,jjp1)            :: orog, rugo, psol, phis
54  REAL,    DIMENSION(iip1,jjp1,llm+1)      :: p3d
55  REAL,    DIMENSION(iip1,jjp1,llm)        :: uvent, t3d, tpot, qsat, qd
56  REAL,    DIMENSION(iip1,jjm ,llm)        :: vvent
57  REAL,    DIMENSION(:,:,:,:), ALLOCATABLE :: q3d
58  REAL,    DIMENSION(klon,nbsrf)           :: qsolsrf, snsrf, evap
59  REAL,    DIMENSION(klon,nbsrf)           :: frugs, agesno
60  REAL,    DIMENSION(klon,nsoilmx,nbsrf)   :: tsoil
[1146]61
[1319]62!--- Local variables for sea-ice reading:
63  INTEGER                                  :: iml_lic, jml_lic, llm_tmp
64  INTEGER                                  :: ttm_tmp, iret, fid
65  INTEGER, DIMENSION(1)                    :: itaul
66  REAL,    DIMENSION(1)                    :: lev
67  REAL                                     :: date
68  REAL,    DIMENSION(:,:),   ALLOCATABLE   ::  lon_lic,  lat_lic, fraclic
69  REAL,    DIMENSION(:),     ALLOCATABLE   :: dlon_lic, dlat_lic
70  REAL,    DIMENSION(iip1,jjp1)            :: flic_tmp
[524]71
[1319]72!--- Misc
73  CHARACTER(LEN=80)                        :: x, fmt
74  INTEGER                                  :: i, j, l, ji
75  REAL,    DIMENSION(iip1,jjp1,llm)        :: alpha, beta, pk, pls, y
76  REAL,    DIMENSION(ip1jmp1)              :: pks
[524]77
78#include "comdissnew.h"
79#include "serre.h"
80#include "clesphys.h"
81
[1319]82  REAL,    DIMENSION(iip1,jjp1,llm)        :: masse
83  INTEGER :: itau, iday
84  REAL    :: xpn, xps, time, phystep
85  REAL,    DIMENSION(iim)                  :: xppn, xpps
86  REAL,    DIMENSION(ip1jmp1,llm)          :: pbaru, phi, w
87  REAL,    DIMENSION(ip1jm  ,llm)          :: pbarv
88  REAL,    DIMENSION(klon)                 :: fder
[524]89
[1319]90!--- Local variables for ocean mask reading:
91  INTEGER :: nid_o2a, iml_omask, jml_omask
92  LOGICAL :: couple=.FALSE.
93  REAL,    DIMENSION(:,:), ALLOCATABLE ::  lon_omask, lat_omask, ocemask, ocetmp
94  REAL,    DIMENSION(:),   ALLOCATABLE :: dlon_omask,dlat_omask
95  REAL,    DIMENSION(klon)             :: ocemask_fi
96  INTEGER, DIMENSION(klon-2)           :: isst
97  REAL,    DIMENSION(iim,jjp1)         :: zx_tmp_2d
98  REAL    :: dummy
99  LOGICAL :: ok_newmicro, ok_journe, ok_mensuel, ok_instan, ok_hf
[1492]100  LOGICAL :: ok_LES, ok_ade, ok_aie, aerosol_couple, new_aod, callstats
[1319]101  INTEGER :: iflag_radia, flag_aerosol
102  REAL    :: bl95_b0, bl95_b1, fact_cldcon, facttemps, ratqsbas, ratqshaut
103  REAL    :: tau_ratqs
104  INTEGER :: iflag_cldcon, iflag_ratqs, iflag_coupl, iflag_clos, iflag_wake
105  INTEGER :: iflag_thermals, nsplit_thermals
106  INTEGER :: iflag_thermals_ed, iflag_thermals_optflux
107  REAL    :: tau_thermals, solarlong0,  seuil_inversion
[1425]108  INTEGER :: read_climoz ! read ozone climatology
[1319]109!  Allowed values are 0, 1 and 2
110!     0: do not read an ozone climatology
111!     1: read a single ozone climatology that will be used day and night
112!     2: read two ozone climatologies, the average day and night
113!     climatology and the daylight climatology
114!-------------------------------------------------------------------------------
[1406]115  REAL    :: alp_offset
116  logical found
117
[1319]118!--- Constants
119  pi     = 4. * ATAN(1.)
120  rad    = 6371229.
121  daysec = 86400.
122  omeg   = 2.*pi/daysec
123  g      = 9.8
124  kappa  = 0.2857143
125  cpp    = 1004.70885
126  preff  = 101325.
127  pa     = 50000.
128  jmp1   = jjm + 1
[524]129
[1319]130!--- CONSTRUCT A GRID
131  CALL conf_phys(  ok_journe, ok_mensuel, ok_instan, ok_hf, ok_LES,     &
[1492]132                   callstats,                                           &
[1319]133                   solarlong0,seuil_inversion,                          &
134                   fact_cldcon, facttemps,ok_newmicro,iflag_radia,      &
135                   iflag_cldcon,                                        &
136                   iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,            &
137                   ok_ade, ok_aie, aerosol_couple,                      &
138                   flag_aerosol, new_aod,                               &
139                   bl95_b0, bl95_b1,                                    &
[1496]140                   read_climoz,                                         &
[1425]141                   alp_offset)
[786]142
[1319]143! co2_ppm0 : initial value of atmospheric CO2 from .def file (co2_ppm value)
144  co2_ppm0 = co2_ppm
[988]145
[1319]146  dtvr   = daysec/FLOAT(day_step)
147  WRITE(lunout,*)'dtvr',dtvr
[988]148
[1319]149  CALL iniconst()
150  CALL inigeom()
[1279]151
[1319]152!--- Initializations for tracers
153  CALL infotrac_init
154  ALLOCATE(q3d(iip1,jjp1,llm,nqtot))
[524]155
[1319]156  CALL inifilr()
157  CALL phys_state_var_init(read_climoz)
[1279]158
[1319]159  rlat(1) = ASIN(1.0)
160  DO j=2,jjm; rlat((j-2)*iim+2:(j-1)*iim+1)=rlatu(j);     END DO
161  rlat(klon) = - ASIN(1.0)
162  rlat(:)=rlat(:)*(180.0/pi)
[1279]163
[1319]164  rlon(1) = 0.0
165  DO j=2,jjm; rlon((j-2)*iim+2:(j-1)*iim+1)=rlonv(1:iim); END DO
166  rlon(klon) = 0.0
167  rlon(:)=rlon(:)*(180.0/pi)
[524]168
[1319]169! For a coupled simulation, the ocean mask from ocean model is used to compute
170! the weights an to insure ocean fractions are the same for atmosphere and ocean
171! Otherwise, mask is created using Relief file.
[1146]172
[1319]173  WRITE(lunout,*)'Essai de lecture masque ocean'
174  iret = NF90_OPEN("o2a.nc", NF90_NOWRITE, nid_o2a)
175  IF(iret/=NF90_NOERR) THEN
176    WRITE(lunout,*)'ATTENTION!! pas de fichier o2a.nc trouve'
177    WRITE(lunout,*)'Run force'
178    x='masque'
179    masque(:,:)=0.0
[1323]180    CALL startget_phys2d(x, iip1, jjp1, rlonv, rlatu, masque, 0.0, jjm, &
181   &              rlonu, rlatv, ib)
[1319]182    WRITE(lunout,*)'MASQUE construit : Masque'
183    WRITE(lunout,'(97I1)') nINT(masque)
184    CALL gr_dyn_fi(1, iip1, jjp1, klon, masque, zmasq)
185    WHERE(   zmasq(:)<EPSFRA) zmasq(:)=0.
186    WHERE(1.-zmasq(:)<EPSFRA) zmasq(:)=1.
187  ELSE
[1323]188    WRITE(lunout,*)'ATTENTION!! fichier o2a.nc trouve'
189    WRITE(lunout,*)'Run couple'
[1319]190    couple=.true.
191    iret=NF90_CLOSE(nid_o2a)
192    CALL flininfo("o2a.nc", iml_omask, jml_omask, llm_tmp, ttm_tmp, nid_o2a)
193    IF(iml_omask/=iim .OR.jml_omask/=jjp1) THEN
194      WRITE(lunout,*)'Dimensions non compatibles pour masque ocean'
195      WRITE(lunout,*)'iim = ',iim,' iml_omask = ',iml_omask
196      WRITE(lunout,*)'jjp1 = ',jjp1,' jml_omask = ',jml_omask
197      CALL abort_gcm('etat0_netcdf','Dimensions non compatibles pour masque oc&
198     &ean',1)
199    END IF
200    ALLOCATE(   ocemask(iml_omask,jml_omask),   ocetmp(iml_omask,jml_omask))
201    ALLOCATE( lon_omask(iml_omask,jml_omask),lat_omask(iml_omask,jml_omask))
202    ALLOCATE(dlon_omask(iml_omask),         dlat_omask(jml_omask))
[1323]203    CALL flinopen("o2a.nc", .FALSE., iml_omask, jml_omask, llm_tmp, lon_omask,&
204   &              lat_omask, lev, ttm_tmp, itaul, date, dt, fid)
205    CALL flinget(fid, 'OceMask', iml_omask, jml_omask, llm_tmp, ttm_tmp, &
206   &              1, 1, ocetmp)
[1319]207    CALL flinclo(fid)
208    dlon_omask(1:iml_omask) = lon_omask(1:iml_omask,1)
209    dlat_omask(1:jml_omask) = lat_omask(1,1:jml_omask)
210    ocemask = ocetmp
211    IF(dlat_omask(1)<dlat_omask(jml_omask)) THEN
212      DO j=1,jml_omask
213        ocemask(:,j) = ocetmp(:,jml_omask-j+1)
214      END DO
215    END IF
216!
217! Ocean mask to physical grid
218!*******************************************************************************
219    WRITE(lunout,*)'ocemask '
220    WRITE(fmt,"(i4,'i1)')")iml_omask ; fmt='('//ADJUSTL(fmt)
221    WRITE(lunout,fmt)int(ocemask)
222    ocemask_fi(1)=ocemask(1,1)
[1328]223    DO j=2,jjm; ocemask_fi((j-2)*iim+2:(j-1)*iim+1)=ocemask(1:iim,j); END DO
[1319]224    ocemask_fi(klon)=ocemask(1,jjp1)
225    zmasq=1.-ocemask_fi
226  END IF
[1146]227
[1319]228  CALL gr_fi_dyn(1,klon,iip1,jjp1,zmasq,masque)
[524]229
[1319]230  ! The startget calls need to be replaced by a call to restget to get the
231  ! values in the restart file
232  x = 'relief'; orog(:,:) = 0.0
[1323]233  CALL startget_phys2d(x,iip1,jjp1,rlonv,rlatu, orog, 0.0,jjm,rlonu,rlatv,ib,&
234 &               masque)
[524]235
[1319]236  x = 'rugosite'; rugo(:,:) = 0.0
[1323]237  CALL startget_phys2d(x,iip1,jjp1,rlonv,rlatu, rugo, 0.0,jjm, rlonu,rlatv,ib)
[1319]238!  WRITE(lunout,'(49I1)') INT(orog(:,:)*10)
239!  WRITE(lunout,'(49I1)') INT(rugo(:,:)*10)
[524]240
[1319]241! Sub-surfaces initialization
242!*******************************************************************************
243  pctsrf=0.
244  x = 'psol'; psol(:,:) = 0.0
[1323]245  CALL startget_phys2d(x,iip1,jjp1,rlonv,rlatu,psol,0.0,jjm,rlonu,rlatv,ib)
[1319]246!  WRITE(lunout,*) 'PSOL :', psol(10,20)
247!  WRITE(lunout,*) ap(:), bp(:)
[524]248
[1319]249! Mid-levels pressure computation
250!*******************************************************************************
251  CALL pression(ip1jmp1, ap, bp, psol, p3d)
252  CALL exner_hyb(ip1jmp1, psol, p3d, alpha, beta, pks, pk, y)
253  pls(:,:,:)=preff*(pk(:,:,:)/cpp)**(1./kappa)
254!  WRITE(lunout,*) 'P3D :', p3d(10,20,:)
255!  WRITE(lunout,*) 'PK:',    pk(10,20,:)
256!  WRITE(lunout,*) 'PLS :', pls(10,20,:)
[524]257
[1319]258  x = 'surfgeo'; phis(:,:) = 0.0
[1323]259  CALL startget_phys2d(x,iip1,jjp1,rlonv,rlatu,phis, 0.0,jjm, rlonu,rlatv,ib)
[524]260
[1319]261  x = 'u';    uvent(:,:,:) = 0.0
[1323]262  CALL startget_dyn(x,rlonu,rlatu,pls,y,uvent,0.0,  &
263 &                  rlonv,rlatv,ib)
[524]264
[1319]265  x = 'v';    vvent(:,:,:) = 0.0
[1323]266  CALL startget_dyn(x, rlonv,rlatv,pls(:, :jjm, :),y(:, :jjm, :),vvent,0.0, &
267 &                  rlonu,rlatu(:jjm),ib)
[1279]268
[1319]269  x = 't';    t3d(:,:,:) = 0.0
[1323]270  CALL startget_dyn(x,rlonv,rlatu,pls,y,t3d,0.0,    &
271 &                  rlonu,rlatv,ib)
[1279]272
[1319]273  x = 'tpot'; tpot(:,:,:) = 0.0
[1323]274  CALL startget_dyn(x,rlonv,rlatu,pls,pk,tpot,0.0,  &
275 &                  rlonu,rlatv,ib)
[524]276
[1319]277  WRITE(lunout,*) 'T3D min,max:',minval(t3d(:,:,:)),maxval(t3d(:,:,:))
278  WRITE(lunout,*) 'PLS min,max:',minval(pls(:,:,:)),maxval(pls(:,:,:))
[524]279
[1319]280! Humidity at saturation computation
281!*******************************************************************************
282  WRITE(lunout,*) 'avant q_sat'
283  CALL q_sat(llm*jjp1*iip1, t3d, pls, qsat)
284  WRITE(lunout,*) 'apres q_sat'
285  WRITE(lunout,*) 'QSAT min,max:',minval(qsat(:,:,:)),maxval(qsat(:,:,:))
286!  WRITE(lunout,*) 'QSAT :',qsat(10,20,:)
[524]287
[1319]288  x = 'q';    qd (:,:,:) = 0.0
[1323]289  CALL startget_dyn(x,rlonv,rlatu,pls,qsat,qd,0.0, rlonu,rlatv,ib)
[1319]290  q3d(:,:,:,:) = 0.0 ; q3d(:,:,:,1) = qd(:,:,:)
[524]291
[1425]292! Parameterization of ozone chemistry:
293! Look for ozone tracer:
294  i = 1
295  DO
296    found = tname(i)=="O3" .OR. tname(i)=="o3"
297    if (found .or. i == nqtot) exit
298    i = i + 1
299  end do
300  if (found) then
301    call regr_lat_time_coefoz
302    call press_coefoz
303    call regr_pr_o3(p3d, q3d(:, :, :, i))
304!   Convert from mole fraction to mass fraction:
305    q3d(:, :, :, i) = q3d(:, :, :, i)  * 48. / 29.
306  end if
[1406]307
[1319]308!--- OZONE CLIMATOLOGY
309  IF(read_climoz>=1) CALL regr_lat_time_climoz(read_climoz)
[524]310
[1319]311  x = 'tsol'; tsol(:) = 0.0
[1323]312  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,tsol,0.0,jjm,rlonu,rlatv,ib)
[524]313
[1319]314  x = 'qsol';  qsol(:) = 0.0
[1323]315  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,qsol,0.0,jjm,rlonu,rlatv,ib)
[524]316
[1319]317  x = 'snow';  sn(:) = 0.0
[1323]318  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,sn,0.0,jjm,rlonu,rlatv,ib)
[524]319
[1319]320  x = 'rads';  radsol(:) = 0.0
[1323]321  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,radsol,0.0,jjm,rlonu,rlatv,ib)
[524]322
[1319]323  x = 'rugmer'; rugmer(:) = 0.0
[1323]324  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,rugmer,0.0,jjm,rlonu,rlatv,ib)
[524]325
[1319]326  x = 'zmea';  zmea(:) = 0.0
[1323]327  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zmea,0.0,jjm,rlonu,rlatv,ib)
[524]328
[1319]329  x = 'zstd';  zstd(:) = 0.0
[1323]330  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zstd,0.0,jjm,rlonu,rlatv,ib)
[524]331
[1319]332  x = 'zsig';  zsig(:) = 0.0
[1323]333  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zsig,0.0,jjm,rlonu,rlatv,ib)
[524]334
[1319]335  x = 'zgam';  zgam(:) = 0.0
[1323]336  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zgam,0.0,jjm,rlonu,rlatv,ib)
[524]337
[1319]338  x = 'zthe';  zthe(:) = 0.0
[1323]339  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zthe,0.0,jjm,rlonu,rlatv,ib)
[524]340
[1319]341  x = 'zpic';  zpic(:) = 0.0
[1323]342  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zpic,0.0,jjm,rlonu,rlatv,ib)
[524]343
[1319]344  x = 'zval';  zval(:) = 0.0
[1323]345  CALL startget_phys1d(x,iip1,jjp1,rlonv,rlatu,klon,zval,0.0,jjm,rlonu,rlatv,ib)
[524]346
[1319]347!  WRITE(lunout,'(48I3)') 'TSOL :', INT(tsol(2:klon)-273)
[524]348
[1319]349! Soil ice file reading for soil fraction and soil ice fraction
350!*******************************************************************************
351  CALL flininfo("landiceref.nc", iml_lic, jml_lic, llm_tmp, ttm_tmp, fid)
352  ALLOCATE( lat_lic(iml_lic,jml_lic),lon_lic(iml_lic, jml_lic))
353  ALLOCATE(dlat_lic(jml_lic),       dlon_lic(iml_lic))
354  ALLOCATE( fraclic(iml_lic,jml_lic))
[1323]355  CALL flinopen("landiceref.nc", .FALSE., iml_lic, jml_lic, llm_tmp,  &
356 &               lon_lic, lat_lic, lev, ttm_tmp, itaul, date, dt, fid)
[1319]357  CALL flinget(fid, 'landice', iml_lic, jml_lic, llm_tmp, ttm_tmp, 1,1, fraclic)
358  CALL flinclo(fid)
[524]359
[1319]360! Interpolation on model T-grid
361!*******************************************************************************
362  WRITE(lunout,*)'dimensions de landice iml_lic, jml_lic : ',iml_lic,jml_lic
363! conversion if coordinates are in degrees
364  IF(MAXVAL(lon_lic)>pi) lon_lic=lon_lic*pi/180.
365  IF(MAXVAL(lat_lic)>pi) lat_lic=lat_lic*pi/180.
366  dlon_lic(:)=lon_lic(:,1)
367  dlat_lic(:)=lat_lic(1,:)
[1323]368  CALL grille_m( iml_lic, jml_lic, dlon_lic, dlat_lic, fraclic, iim,jjp1,   &
369 &               rlonv, rlatu, flic_tmp(1:iim,:) )
[1319]370  flic_tmp(iip1,:)=flic_tmp(1,:)
[524]371
[1319]372!--- To the physical grid
373  CALL gr_dyn_fi(1, iip1, jjp1, klon, flic_tmp, pctsrf(:,is_lic))
[886]374
[1319]375!--- Adequation with soil/sea mask
376  WHERE(pctsrf(:,is_lic)<EPSFRA) pctsrf(:,is_lic)=0.
377  WHERE(zmasq(:)<EPSFRA)         pctsrf(:,is_lic)=0.
378  pctsrf(:,is_ter)=zmasq(:)
379  DO ji=1,klon
380    IF(zmasq(ji)>EPSFRA) THEN
381      IF(pctsrf(ji,is_lic)>=zmasq(ji)) THEN
382        pctsrf(ji,is_lic)=zmasq(ji)
383        pctsrf(ji,is_ter)=0.
384      ELSE
385        pctsrf(ji,is_ter)=zmasq(ji)-pctsrf(ji,is_lic)
386        IF(pctsrf(ji,is_ter)<EPSFRA) THEN
387          pctsrf(ji,is_ter)=0.
388          pctsrf(ji,is_lic)=zmasq(ji)
389        END IF
390      END IF
391    END IF
392  END DO
[786]393
[1319]394! sub-surface ocean and sea ice (sea ice set to zero for start)
395!*******************************************************************************
396  pctsrf(:,is_oce)=(1.-zmasq(:))
397  WHERE(pctsrf(:,is_oce)<EPSFRA) pctsrf(:,is_oce)=0.
398  IF(couple) pctsrf(:,is_oce)=ocemask_fi(:)
399  isst=0
400  WHERE(pctsrf(2:klon-1,is_oce)>0.) isst=1
[524]401
[1319]402! It is checked that the sub-surfaces sum is equal to 1
403!*******************************************************************************
404  ji=COUNT((ABS(SUM(pctsrf(:,:),dim=2))-1.0)>EPSFRA)
405  IF(ji/=0) WRITE(lunout,*) 'pb repartition sous maille pour ',ji,' points'
406  CALL gr_fi_ecrit(1, klon, iim, jjp1, zmasq, zx_tmp_2d)
407!  WRITE(fmt,"(i3,')')")iim; fmt='(i'//ADJUSTL(fmt)
408!  WRITE(lunout,*)'zmasq = '
409!  WRITE(lunout,TRIM(fmt))NINT(zx_tmp_2d)
410  CALL gr_fi_dyn(1, klon, iip1, jjp1, zmasq, masque)
411  WRITE(fmt,"(i4,'i1)')")iip1 ; fmt='('//ADJUSTL(fmt)
412  WRITE(lunout,*) 'MASQUE construit : Masque'
413  WRITE(lunout,TRIM(fmt))NINT(masque(:,:))
[786]414
[1319]415! Intermediate computation
416!*******************************************************************************
417  CALL massdair(p3d,masse)
418  WRITE(lunout,*)' ALPHAX ',alphax
419  DO l=1,llm
420    xppn(:)=aire(1:iim,1   )*masse(1:iim,1   ,l)
421    xpps(:)=aire(1:iim,jjp1)*masse(1:iim,jjp1,l)
422    xpn=SUM(xppn)/apoln
423    xps=SUM(xpps)/apols
424    masse(:,1   ,l)=xpn
425    masse(:,jjp1,l)=xps
426  END DO
427  q3d(iip1,:,:,:)=q3d(1,:,:,:)
428  phis(iip1,:) = phis(1,:)
[786]429
[1319]430  IF(.NOT.letat0) RETURN
[1146]431
[1319]432! Writing
433!*******************************************************************************
434  CALL inidissip(lstardis,nitergdiv,nitergrot,niterh,tetagdiv,tetagrot,tetatemp)
435  WRITE(lunout,*)'sortie inidissip'
436  itau=0
437  itau_dyn=0
438  itau_phy=0
439  iday=dayref+itau/day_step
440  time=FLOAT(itau-(iday-dayref)*day_step)/day_step
441  IF(time>1.) THEN
442   time=time-1
443   iday=iday+1
444  END IF
445  day_ref=dayref
446  annee_ref=anneeref
447
448  CALL geopot( ip1jmp1, tpot, pk, pks, phis, phi )
449  WRITE(lunout,*)'sortie geopot'
450
451  CALL caldyn0( itau, uvent, vvent, tpot, psol, masse, pk, phis,               &
452                phi,  w, pbaru, pbarv, time+iday-dayref)
453  WRITE(lunout,*)'sortie caldyn0'     
454  CALL dynredem0( "start.nc", dayref, phis)
455  WRITE(lunout,*)'sortie dynredem0'
456  CALL dynredem1( "start.nc", 0.0, vvent, uvent, tpot, q3d, masse, psol)
457  WRITE(lunout,*)'sortie dynredem1'
458
459! Physical initial state writting
460!*******************************************************************************
461  WRITE(lunout,*)'phystep ',dtvr,iphysiq,nbapp_rad
462  phystep   = dtvr * FLOAT(iphysiq)
463  radpas    = NINT (86400./phystep/ FLOAT(nbapp_rad) )
464  WRITE(lunout,*)'phystep =', phystep, radpas
465
466! Init: tsol, qsol, sn, evap, tsoil, rain_fall, snow_fall, solsw, sollw, frugs
467!*******************************************************************************
468  DO i=1,nbsrf; ftsol(:,i) = tsol; END DO
469  DO i=1,nbsrf; snsrf(:,i) = sn;   END DO
470  falb1(:,is_ter) = 0.08; falb1(:,is_lic) = 0.6
471  falb1(:,is_oce) = 0.5;  falb1(:,is_sic) = 0.6
472  falb2 = falb1
473  evap(:,:) = 0.
474  DO i=1,nbsrf; qsolsrf(:,i)=150.; END DO
475  DO i=1,nbsrf; DO j=1,nsoilmx; tsoil(:,j,i) = tsol; END DO; END DO
476  rain_fall = 0.; snow_fall = 0.
477  solsw = 165.;   sollw = -53.
478  t_ancien = 273.15
479  q_ancien = 0.
480  agesno = 0.
481  frugs(:,is_oce) = rugmer(:)
482  frugs(:,is_ter) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0)
483  frugs(:,is_lic) = MAX(1.0e-05,zstd(:)*zsig(:)/2.0)
484  frugs(:,is_sic) = 0.001
485  fder = 0.0
486  clwcon = 0.0
487  rnebcon = 0.0
488  ratqs = 0.0
489  run_off_lic_0 = 0.0
490  rugoro = 0.0
491
492! Before phyredem calling, surface modules and values to be saved in startphy.nc
493! are initialized
494!*******************************************************************************
495  dummy = 1.0
496  pbl_tke(:,:,:) = 1.e-8
497  zmax0(:) = 40.
498  f0(:) = 1.e-5
499  ema_work1(:,:) = 0.
500  ema_work2(:,:) = 0.
501  wake_deltat(:,:) = 0.
502  wake_deltaq(:,:) = 0.
503  wake_s(:) = 0.
504  wake_cstar(:) = 0.
505  wake_fip(:) = 0.
[1406]506  wake_pe = 0.
507  fm_therm = 0.
508  entr_therm = 0.
509  detr_therm = 0.
510
[1319]511  CALL fonte_neige_init(run_off_lic_0)
512  CALL pbl_surface_init( qsol, fder, snsrf, qsolsrf, evap, frugs, agesno, tsoil )
513  CALL phyredem( "startphy.nc" )
514
[1323]515!  WRITE(lunout,*)'CCCCCCCCCCCCCCCCCC REACTIVER SORTIE VISU DANS ETAT0'
516!  WRITE(lunout,*)'entree histclo'
[1319]517  CALL histclo()
518
[1146]519#endif
520!#endif of #ifdef CPP_EARTH
[1319]521  RETURN
522
523END SUBROUTINE etat0_netcdf
524!
525!-------------------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.