/[lmdze]/trunk/filtrez/test_inifilr.f
ViewVC logotype

Contents of /trunk/filtrez/test_inifilr.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 168 - (show annotations)
Wed Sep 9 10:41:47 2015 UTC (8 years, 8 months ago) by guez
Original Path: trunk/Sources/filtrez/test_inifilr.f
File size: 2874 byte(s)
In order to be able to choose finer resolutions, set large memory
model in compiler options and use dynamic libraries.

Variables rlatd, rlond, cuphy and cvphy of module comgeomphy were
never used. (In LMDZ, they are used only for Orchid.)

There is a bug in PGI Fortran 13.10 that does not accept the
combination of forall, pack and spread in regr_pr_av and
regr_pr_int. In order to circumvent this bug, created the function
gr_dyn_phy.

In program test_inifilr, use a single latitude coordinate for north
and south.

1 program test_inifilr
2
3 use dimens_m, only: iim, jjm
4 use dynetat0_m, only: xprimp025, xprimm025, rlatu1, rlatu2, rlatu, rlatv, &
5 yprimu1, yprimu2, rlonu, rlonv, xprimu, xprimv
6 use fxhyp_m, only: fxhyp
7 use fyhyp_m, only: fyhyp
8 use inifilr_m, only: inifilr, jfiltnu, jfiltnv, jfiltsu, jfiltsv, &
9 matriceun, matrinvn, matricevn, matriceus, matrinvs, matricevs
10 use jumble, only: new_unit
11 use netcdf, only: NF90_CLOBBER, NF90_FLOAT
12 use netcdf95, only: nf95_create, NF95_DEF_DIM, NF95_DEF_VAR, NF95_ENDDEF, &
13 NF95_PUT_VAR, NF95_CLOSE, nf95_put_att
14 use nr_util, only: pi
15 use unit_nml_m, only: unit_nml
16 use read_serre_m, only: read_serre
17
18 IMPLICIT NONE
19
20 integer ncid, dimid_longitude
21 integer dimid_rlatu, dimid_rlatv
22 integer varid_matriceu, varid_matrinv, varid_matricev
23 integer varid_rlatu, varid_rlatv
24
25 !-----------------------------------------------------------------------
26
27 call new_unit(unit_nml)
28 open(unit_nml, file="used_namelists.txt", status="replace", action="write")
29 call read_serre
30
31 CALL fyhyp(rlatu, rlatv, rlatu2, yprimu2, rlatu1, yprimu1)
32 CALL fxhyp(xprimm025, rlonv, xprimv, rlonu, xprimu, xprimp025)
33 rlatu(1) = pi / 2.
34 rlatu(jjm + 1) = -rlatu(1)
35
36 CALL inifilr
37 close(unit_nml)
38
39 call nf95_create("test_inifilr_out.nc", NF90_CLOBBER, ncid)
40
41 call NF95_DEF_DIM(ncid, "longitude", iim, dimid_longitude)
42 call NF95_DEF_DIM(ncid, "rlatu", jfiltnu + jjm - jfiltsu, dimid_rlatu)
43 call NF95_DEF_DIM(ncid, "rlatv", jfiltnv + jjm - jfiltsv + 1, dimid_rlatv)
44
45 call NF95_DEF_VAR(ncid, "rlatu", NF90_FLOAT, dimid_rlatu, varid_rlatu)
46 call nf95_put_att(ncid, varid_rlatu, "units", "degrees_north")
47
48 call NF95_DEF_VAR(ncid, "rlatv", NF90_FLOAT, dimid_rlatv, varid_rlatv)
49 call nf95_put_att(ncid, varid_rlatv, "units", "degrees_north")
50
51 call NF95_DEF_VAR(ncid, "matriceu", NF90_FLOAT, &
52 (/dimid_longitude, dimid_longitude, dimid_rlatu/), varid_matriceu)
53 call NF95_DEF_VAR(ncid, "matrinv", NF90_FLOAT, &
54 (/dimid_longitude, dimid_longitude, dimid_rlatu/), varid_matrinv)
55 call NF95_DEF_VAR(ncid, "matricev", NF90_FLOAT, &
56 (/dimid_longitude, dimid_longitude, dimid_rlatv/), varid_matricev)
57
58 call NF95_ENDDEF(ncid)
59
60 call NF95_PUT_VAR(ncid, varid_rlatu, &
61 (/rlatu(2:jfiltnu), rlatu(jfiltsu:jjm)/) / pi * 180.)
62 call NF95_PUT_VAR(ncid, varid_rlatv, &
63 (/rlatv(:jfiltnv), rlatv(jfiltsv:)/) / pi * 180.)
64
65 call NF95_PUT_VAR(ncid, varid_matriceu, matriceun)
66 call NF95_PUT_VAR(ncid, varid_matrinv, matrinvn)
67 call NF95_PUT_VAR(ncid, varid_matricev, matricevn)
68 call NF95_PUT_VAR(ncid, varid_matriceu, matriceus, start = (/1, 1, jfiltnu/))
69 call NF95_PUT_VAR(ncid, varid_matrinv, matrinvs, start = (/1, 1, jfiltnu/))
70 call NF95_PUT_VAR(ncid, varid_matricev, matricevs, &
71 start = (/1, 1, jfiltnv + 1/))
72
73 call NF95_CLOSE(ncid)
74
75 end program test_inifilr

  ViewVC Help
Powered by ViewVC 1.1.21