1 |
program test_ozonecm |
program test_ozonecm |
2 |
|
|
3 |
! This is a program in Fortran 95. |
! This is a program in Fortran 2003. |
4 |
|
|
5 |
! This program computes values of ozone abundance from Royer, on a |
! This program computes values of ozone abundance from Royer, on a |
6 |
! latitude-pressure grid, and writes the values to a NetCDF file. |
! latitude-pressure grid, and writes the values to a NetCDF file. |
7 |
! The pressure grid is "presnivs" from "disvert". |
! The pressure grid is "presnivs" from "disvert". |
8 |
|
|
|
use dimensions, only: jjm, llm |
|
|
USE dimphy, ONLY : klon |
|
|
use disvert_m, only: pa, disvert, ap, bp, preff, presnivs |
|
|
use ozonecm_m, only: ozonecm |
|
|
use phyetat0_m, only: rlat |
|
9 |
use nr_util, only: arth, assert |
use nr_util, only: arth, assert |
10 |
use netcdf95, only: nf95_create, nf95_def_dim, nf95_def_var, nf95_put_att, & |
use netcdf95, only: nf95_create, nf95_def_dim, nf95_def_var, nf95_put_att, & |
11 |
nf95_enddef, nf95_put_var, nf95_close |
nf95_enddef, nf95_put_var, nf95_close |
12 |
use netcdf, only: nf90_clobber, nf90_float, nf90_global |
use netcdf, only: nf90_clobber, nf90_float, nf90_global |
13 |
|
|
14 |
|
use dimensions, only: jjm, llm |
15 |
|
USE dimphy, ONLY : klon |
16 |
|
USE dimsoil, ONLY : nsoilmx |
17 |
|
use disvert_m, only: pa, disvert, ap, bp, preff, presnivs |
18 |
|
USE indicesol, ONLY : nbsrf |
19 |
|
use ozonecm_m, only: ozonecm |
20 |
|
use phyetat0_m, only: rlat, phyetat0 |
21 |
use unit_nml_m, only: unit_nml, set_unit_nml |
use unit_nml_m, only: unit_nml, set_unit_nml |
22 |
|
|
23 |
implicit none |
implicit none |
29 |
real, parameter:: RG = 9.80665 ! acceleration of gravity, in m s-2 |
real, parameter:: RG = 9.80665 ! acceleration of gravity, in m s-2 |
30 |
real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 |
real, parameter:: dobson_u = 2.1415e-05 ! Dobson unit, in kg m-2 |
31 |
|
|
32 |
|
REAL pctsrf(klon, nbsrf) |
33 |
|
REAL ftsol(klon, nbsrf) |
34 |
|
REAL ftsoil(klon, nsoilmx, nbsrf) |
35 |
|
REAL qsurf(klon, nbsrf) |
36 |
|
REAL qsol(klon) ! column-density of water in soil, in kg m-2 |
37 |
|
REAL snow(klon, nbsrf) |
38 |
|
REAL albe(klon, nbsrf) |
39 |
|
REAL evap(klon, nbsrf) |
40 |
|
REAL rain_fall(klon) |
41 |
|
REAL snow_fall(klon) |
42 |
|
real solsw(klon) |
43 |
|
REAL sollw(klon) |
44 |
|
real fder(klon) |
45 |
|
REAL radsol(klon) |
46 |
|
REAL frugs(klon, nbsrf) |
47 |
|
REAL agesno(klon, nbsrf) |
48 |
|
REAL zmea(klon) |
49 |
|
REAL zstd(klon) |
50 |
|
REAL zsig(klon) |
51 |
|
REAL zgam(klon) |
52 |
|
REAL zthe(klon) |
53 |
|
REAL zpic(klon) |
54 |
|
REAL zval(klon) |
55 |
|
REAL t_ancien(klon, llm), q_ancien(klon, llm) |
56 |
|
LOGICAL ancien_ok |
57 |
|
real rnebcon(klon, llm), ratqs(klon, llm) |
58 |
|
REAL clwcon(klon, llm), run_off_lic_0(klon) |
59 |
|
real sig1(klon, llm) ! section adiabatic updraft |
60 |
|
|
61 |
|
real w01(klon, llm) |
62 |
|
! vertical velocity within adiabatic updraft |
63 |
|
|
64 |
|
integer ncid_startphy |
65 |
|
|
66 |
! For NetCDF: |
! For NetCDF: |
67 |
integer ncid, dimid_time, dimid_plev, dimid_latitude |
integer ncid, dimid_time, dimid_plev, dimid_latitude |
68 |
integer varid_time, varid_plev, varid_latitude, varid_tro3 |
integer varid_time, varid_plev, varid_latitude, varid_tro3 |
77 |
pa = 5e4 |
pa = 5e4 |
78 |
call disvert |
call disvert |
79 |
p = ap + bp * preff |
p = ap + bp * preff |
80 |
rlat = arth(-90., 180. / jjm, jjm + 1) |
call phyetat0(pctsrf, ftsol, ftsoil, qsurf, qsol, snow, albe, evap, & |
81 |
|
rain_fall, snow_fall, solsw, sollw, fder, radsol, frugs, agesno, zmea, & |
82 |
|
zstd, zsig, zgam, zthe, zpic, zval, t_ancien, q_ancien, ancien_ok, & |
83 |
|
rnebcon, ratqs, clwcon, run_off_lic_0, sig1, w01, ncid_startphy) |
84 |
|
|
85 |
do julien = 1, 360 |
do julien = 1, 360 |
86 |
wo(:, :, julien) = ozonecm(REAL(julien), spread(p, dim=1, ncopies=jjm+1)) |
wo(:, :, julien) = ozonecm(REAL(julien), spread(p, dim=1, ncopies=jjm+1)) |