12 |
|
|
13 |
CONTAINS |
CONTAINS |
14 |
|
|
15 |
SUBROUTINE start_init_dyn(tsol_2d, psol) |
SUBROUTINE start_init_dyn(tsol_2d, phis, ps) |
16 |
|
|
17 |
use comgeom, only: rlonu, rlatv, aire_2d, apoln, apols |
use comgeom, only: rlonu, rlatv, aire_2d, apoln, apols |
18 |
use conf_dat2d_m, only: conf_dat2d |
use conf_dat2d_m, only: conf_dat2d |
23 |
use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid, & |
use netcdf95, only: nf95_open, nf95_close, nf95_get_var, nf95_inq_varid, & |
24 |
nf95_gw_var, find_coord |
nf95_gw_var, find_coord |
25 |
use nr_util, only: assert, pi |
use nr_util, only: assert, pi |
|
use start_init_orog_m, only: phis |
|
26 |
|
|
27 |
REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1) |
REAL, intent(in):: tsol_2d(:, :) ! (iim + 1, jjm + 1) |
28 |
REAL, intent(out):: psol(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa |
|
29 |
|
REAL, intent(in):: phis(:, :) ! (iim + 1, jjm + 1) |
30 |
|
! surface geopotential, in m2 s-2 |
31 |
|
|
32 |
|
REAL, intent(out):: ps(:, :) ! (iim + 1, jjm + 1) surface pressure, in Pa |
33 |
|
|
34 |
! Local: |
! Local: |
35 |
|
|
42 |
!-------------------------- |
!-------------------------- |
43 |
|
|
44 |
print *, "Call sequence information: start_init_dyn" |
print *, "Call sequence information: start_init_dyn" |
45 |
call assert((/size(tsol_2d, 1), size(psol, 1)/) == iim + 1, & |
call assert((/size(tsol_2d, 1), size(phis, 1), size(ps, 1)/) == iim + 1, & |
46 |
"start_init_dyn size 1") |
"start_init_dyn size 1") |
47 |
call assert((/size(tsol_2d, 2), size(psol, 2)/) == jjm + 1, & |
call assert((/size(tsol_2d, 2), size(phis, 2), size(ps, 2)/) == jjm + 1, & |
48 |
"start_init_dyn size 2") |
"start_init_dyn size 2") |
49 |
|
|
50 |
call nf95_open('ECDYN.nc', nf90_nowrite, ncid) |
call nf95_open('ECDYN.nc', nf90_nowrite, ncid) |
82 |
CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana) |
CALL conf_dat2d(lon_ini, lat_ini, lon_rad, lat_rad, var_ana) |
83 |
CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), & |
CALL inter_barxy(lon_rad, lat_rad(:jml_dyn -1), var_ana, rlonu(:iim), & |
84 |
rlatv, tmp_var) |
rlatv, tmp_var) |
85 |
psol = gr_int_dyn(tmp_var) |
ps = gr_int_dyn(tmp_var) |
86 |
|
|
87 |
call nf95_close(ncid) |
call nf95_close(ncid) |
88 |
|
|
89 |
psol(:iim, :) = psol(:iim, :) & |
! Adapt the surface pressure to "phis", with the hypsometric equation: |
90 |
|
ps(:iim, :) = ps(:iim, :) & |
91 |
* (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :)) |
* (1. + (z(:iim, :) - phis(:iim, :)) / 287. / tsol_2d(:iim, :)) |
|
psol(iim + 1, :) = psol(1, :) |
|
92 |
|
|
93 |
psol(:, 1) = SUM(aire_2d(:iim, 1) * psol(:iim, 1)) / apoln |
ps(iim + 1, :) = ps(1, :) |
94 |
psol(:, jjm + 1) = SUM(aire_2d(:iim, jjm + 1) * psol(:iim, jjm + 1)) & |
ps(:, 1) = SUM(aire_2d(:iim, 1) * ps(:iim, 1)) / apoln |
95 |
/ apols |
ps(:, jjm + 1) = SUM(aire_2d(:iim, jjm + 1) * ps(:iim, jjm + 1)) / apols |
96 |
|
|
97 |
END SUBROUTINE start_init_dyn |
END SUBROUTINE start_init_dyn |
98 |
|
|