/[lmdze]/trunk/Sources/dyn3d/Dissipation/inidissip.f
ViewVC logotype

Annotation of /trunk/Sources/dyn3d/Dissipation/inidissip.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 71 - (hide annotations)
Mon Jul 8 18:12:18 2013 UTC (10 years, 10 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/inidissip.f90
File size: 3755 byte(s)
No reason to call inidissip in ce0l.

In inidissip, set random seed to 1 beacuse PGI compiler does not
accept all zeros.

dq was computed needlessly in caladvtrac. Arguments masse and dq of
calfis not used.

Replaced real*8 by double precision.

Pass arrays with inverted order of vertical levels to conflx instead
of creating local variables for this inside conflx.

1 guez 26 module inidissip_m
2 guez 3
3 guez 26 use dimens_m, only: llm
4 guez 3
5 guez 26 IMPLICIT NONE
6 guez 3
7 guez 26 private llm
8 guez 3
9 guez 57 REAL dtdiss ! in s
10 guez 47 integer idissip ! période de la dissipation (en pas de temps)
11 guez 65 real tetaudiv(llm), tetaurot(llm), tetah(llm) ! in s-1
12 guez 26 real cdivu, crot, cdivh
13 guez 3
14 guez 26 contains
15 guez 3
16 guez 27 SUBROUTINE inidissip
17 guez 3
18 guez 26 ! From dyn3d/inidissip.F, version 1.1.1.1 2004/05/19 12:53:06
19 guez 3
20 guez 54 ! Initialisation de la dissipation horizontale. Calcul des valeurs
21     ! propres des opérateurs par méthode itérative.
22    
23 guez 64 USE comconst, ONLY: dtvr
24     use comdissnew, only: nitergdiv, nitergrot, niterh, tetagdiv, tetagrot, &
25     tetatemp
26 guez 66 USE disvert_m, ONLY: preff, presnivs
27 guez 64 USE conf_gcm_m, ONLY: iperiod
28     USE dimens_m, ONLY: iim, jjm
29 guez 65 use divgrad2_m, only: divgrad2
30 guez 27 use filtreg_m, only: filtreg
31 guez 54 use gradiv2_m, only: gradiv2
32 guez 57 use jumble, only: new_unit
33 guez 65 use nxgraro2_m, only: nxgraro2
34 guez 64 USE paramet_m, ONLY: jjp1
35 guez 3
36 guez 26 ! Variables local to the procedure:
37 guez 57 REAL zvert(llm), max_zvert ! no dimension
38     REAL, dimension(iim + 1, jjm + 1, 1):: zh, zu, gx, divgra, deltap
39     real zv(iim + 1, jjm, 1), gy(iim + 1, jjm, 1)
40 guez 40 REAL zllm
41 guez 54 INTEGER l, seed_size, ii, unit
42 guez 27 REAL tetamin ! in s
43 guez 3
44 guez 26 !-----------------------------------------------------------------------
45 guez 3
46 guez 26 PRINT *, 'Call sequence information: inidissip'
47 guez 54 call random_seed(size=seed_size)
48 guez 71 call random_seed(put=(/(1, ii = 1, seed_size)/))
49 guez 3
50 guez 54 PRINT *, 'Calcul des valeurs propres de divgrad'
51 guez 40 deltap = 1.
52 guez 54 call random_number(zh)
53     zh = zh - 0.5
54 guez 64 CALL filtreg(zh, jjp1, 1, 2, 1, .TRUE.)
55 guez 3
56 guez 26 DO l = 1, 50
57 guez 64 CALL divgrad2(1, zh, deltap, niterh, divgra, -1.)
58 guez 57 zllm = abs(maxval(divgra))
59     zh = divgra / zllm
60 guez 26 END DO
61 guez 3
62 guez 64 cdivh = 1. / zllm
63 guez 54 PRINT *, 'cdivh = ', cdivh
64 guez 3
65 guez 54 PRINT *, 'Calcul des valeurs propres de gradiv'
66     call random_number(zu)
67     zu = zu - 0.5
68 guez 64 CALL filtreg(zu, jjp1, 1, 2, 1, .TRUE.)
69 guez 54 call random_number(zv)
70     zv = zv - 0.5
71 guez 64 CALL filtreg(zv, jjm, 1, 2, 1, .FALSE.)
72 guez 3
73 guez 54 DO l = 1, 50
74 guez 64 CALL gradiv2(zu, zv, nitergdiv, gx, gy, -1.)
75 guez 57 zllm = max(abs(maxval(gx)), abs(maxval(gy)))
76     zu = gx / zllm
77     zv = gy / zllm
78 guez 54 end DO
79 guez 3
80 guez 64 cdivu = 1. / zllm
81 guez 54 PRINT *, 'cdivu = ', cdivu
82 guez 3
83 guez 54 PRINT *, 'Calcul des valeurs propres de nxgrarot'
84     call random_number(zu)
85     zu = zu - 0.5
86 guez 64 CALL filtreg(zu, jjp1, 1, 2, 1, .TRUE.)
87 guez 54 call random_number(zv)
88     zv = zv - 0.5
89 guez 64 CALL filtreg(zv, jjm, 1, 2, 1, .FALSE.)
90 guez 3
91 guez 54 DO l = 1, 50
92 guez 65 CALL nxgraro2(zu, zv, nitergrot, gx, gy, -1.)
93 guez 57 zllm = max(abs(maxval(gx)), abs(maxval(gy)))
94     zu = gx / zllm
95     zv = gy / zllm
96 guez 54 end DO
97    
98 guez 64 crot = 1. / zllm
99 guez 26 PRINT *, 'crot = ', crot
100 guez 3
101 guez 26 ! Variation verticale du coefficient de dissipation :
102 guez 27 zvert = 2. - 1. / (1. + (preff / presnivs - 1.)**2)
103     ! (between 1 and 2)
104 guez 3
105 guez 26 tetaudiv = zvert / tetagdiv
106     tetaurot = zvert / tetagrot
107     tetah = zvert / tetatemp
108 guez 54
109 guez 27 max_zvert = maxval(zvert)
110 guez 54 tetamin = min(1e6, tetagdiv / max_zvert, tetagrot / max_zvert, &
111 guez 27 tetatemp / max_zvert)
112 guez 26 PRINT *, 'tetamin = ', tetamin
113 guez 27 idissip = max(1, int(tetamin / (2 * dtvr * iperiod))) * iperiod
114 guez 26 PRINT *, 'idissip = ', idissip
115     dtdiss = idissip * dtvr
116 guez 57 PRINT *, 'dtdiss = ', dtdiss, "s"
117 guez 26
118 guez 65 call new_unit(unit)
119     open(unit, file="inidissip.csv", status="replace", action="write")
120    
121     ! Title line:
122     write(unit, fmt=*) '"presnivs (hPa)" "dtdiss * tetaudiv" ' &
123     // '"dtdiss * tetaurot" "dtdiss * tetah"'
124    
125     do l = 1, llm
126     write(unit, fmt=*) presnivs(l) / 100., dtdiss * tetaudiv(l), &
127     dtdiss * tetaurot(l), dtdiss * tetah(l)
128     end do
129     close(unit)
130     print *, 'Created file "inidissip.csv".'
131    
132 guez 26 END SUBROUTINE inidissip
133    
134     end module inidissip_m

  ViewVC Help
Powered by ViewVC 1.1.21