1 | PROGRAM rejouer |
---|
2 | |
---|
3 | USE mod_const_mpi, ONLY: comm_lmdz |
---|
4 | USE inigeomphy_mod, ONLY: inigeomphy |
---|
5 | USE comvert_mod, ONLY: presnivs |
---|
6 | USE comvert_mod, only : preff, pa |
---|
7 | USE ioipsl, only: getin |
---|
8 | |
---|
9 | |
---|
10 | |
---|
11 | |
---|
12 | USE dimensions_mod, ONLY: iim, jjm, llm, ndm |
---|
13 | implicit none |
---|
14 | |
---|
15 | |
---|
16 | real :: airefi |
---|
17 | real :: zcufi = 1. |
---|
18 | real :: zcvfi = 1. |
---|
19 | real :: rlat_rad(1),rlon_rad(1) |
---|
20 | |
---|
21 | integer ntime |
---|
22 | integer jour0,mois0,an0,day_step,anneeref,dayref |
---|
23 | integer klev,klon |
---|
24 | CHARACTER (len=10) :: calend |
---|
25 | CHARACTER(len=20) :: calendrier |
---|
26 | CHARACTER(len=20) :: lmax_replay |
---|
27 | |
---|
28 | !--------------------------------------------------------------------- |
---|
29 | ! L'appel a inigeomphy n'est utile que pour avoir getin_p dans |
---|
30 | ! les initialisations |
---|
31 | !--------------------------------------------------------------------- |
---|
32 | zcufi=1. |
---|
33 | zcvfi=1. |
---|
34 | rlat_rad(1)=0. |
---|
35 | rlon_rad(1)=0. |
---|
36 | |
---|
37 | preff=101325. |
---|
38 | !preff=100000. |
---|
39 | pa=50000. |
---|
40 | CALL disvert() |
---|
41 | CALL inigeomphy(1,1,llm, & |
---|
42 | 1, comm_lmdz, & |
---|
43 | (/rlat_rad(1),0./),(/0./), & |
---|
44 | (/0.,0./),(/rlon_rad(1),0./), & |
---|
45 | (/ (/airefi,0./),(/0.,0./) /), & |
---|
46 | (/zcufi,0.,0.,0./), & |
---|
47 | (/zcvfi,0./)) |
---|
48 | |
---|
49 | CALL suphel |
---|
50 | !ntime=4320 |
---|
51 | ntime=10000000 |
---|
52 | dayref=1 |
---|
53 | anneeref=2000 |
---|
54 | call getin('dayref',dayref) |
---|
55 | call getin('anneeref',anneeref) |
---|
56 | call getin('calend',calend) |
---|
57 | call getin('day_step',day_step) |
---|
58 | |
---|
59 | print*,'AVANT getin' |
---|
60 | klev=llm |
---|
61 | CALL getin('lmax_replay',lmax_replay) |
---|
62 | print*,'APRES getin',lmax_replay |
---|
63 | CALL getin(lmax_replay,klev) |
---|
64 | print*,'replay1d lmax_replay klev',lmax_replay,klev |
---|
65 | |
---|
66 | calendrier=calend |
---|
67 | if ( calendrier == "earth_360d" ) calendrier="360_day" |
---|
68 | |
---|
69 | |
---|
70 | jour0=dayref |
---|
71 | mois0=(jour0-1)/30+1 |
---|
72 | jour0=jour0-30*((jour0-1)/30) |
---|
73 | an0=anneeref |
---|
74 | |
---|
75 | !print*,"REPLAY1D jour0,mois0,an0",jour0,mois0,an0 |
---|
76 | |
---|
77 | |
---|
78 | klon=1 |
---|
79 | call iotd_ini('phys.nc',1,1,klev,0.,0.,presnivs,jour0,mois0,an0,0.,86400./day_step,calendrier) |
---|
80 | ! Consistent with ... CALL iophys_ini(600.) |
---|
81 | |
---|
82 | !--------------------------------------------------------------------- |
---|
83 | ! Initialisation de la parametrisation |
---|
84 | !--------------------------------------------------------------------- |
---|
85 | call call_ini_replay |
---|
86 | |
---|
87 | !--------------------------------------------------------------------- |
---|
88 | ! Boucle en temps sur l'appel à la parametrisation |
---|
89 | !--------------------------------------------------------------------- |
---|
90 | call call_param_replay(klon,klev) |
---|
91 | |
---|
92 | end |
---|
93 | |
---|
94 | !--------------------------------------------------------------------- |
---|
95 | !///////////////////////////////////////////////////////////////////// |
---|
96 | !///////////////////////////////////////////////////////////////////// |
---|
97 | ! routine additionnelles utiles, prises dans 1DUTILS.h |
---|
98 | !///////////////////////////////////////////////////////////////////// |
---|
99 | !///////////////////////////////////////////////////////////////////// |
---|
100 | !--------------------------------------------------------------------- |
---|
101 | |
---|
102 | !======================================================================= |
---|
103 | SUBROUTINE gr_dyn_fi(nfield,im,jm,ngrid,pdyn,pfi) |
---|
104 | IMPLICIT NONE |
---|
105 | ! passage d'un champ de la grille scalaire a la grille physique |
---|
106 | !======================================================================= |
---|
107 | |
---|
108 | !----------------------------------------------------------------------- |
---|
109 | ! declarations: |
---|
110 | ! ------------- |
---|
111 | |
---|
112 | INTEGER im,jm,ngrid,nfield |
---|
113 | REAL pdyn(im,jm,nfield) |
---|
114 | REAL pfi(ngrid,nfield) |
---|
115 | |
---|
116 | INTEGER j,ifield,ig |
---|
117 | |
---|
118 | !----------------------------------------------------------------------- |
---|
119 | ! calcul: |
---|
120 | ! ------- |
---|
121 | |
---|
122 | IF(ngrid.NE.2+(jm-2)*(im-1).AND.ngrid.NE.1) & |
---|
123 | & STOP 'probleme de dim' |
---|
124 | ! traitement des poles |
---|
125 | CALL SCOPY(nfield,pdyn,im*jm,pfi,ngrid) |
---|
126 | CALL SCOPY(nfield,pdyn(1,jm,1),im*jm,pfi(ngrid,1),ngrid) |
---|
127 | |
---|
128 | ! traitement des point normaux |
---|
129 | DO ifield=1,nfield |
---|
130 | DO j=2,jm-1 |
---|
131 | ig=2+(j-2)*(im-1) |
---|
132 | CALL SCOPY(im-1,pdyn(1,j,ifield),1,pfi(ig,ifield),1) |
---|
133 | ENDDO |
---|
134 | ENDDO |
---|
135 | |
---|
136 | RETURN |
---|
137 | END SUBROUTINE gr_dyn_fi |
---|