/[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 64 - (hide annotations)
Wed Aug 29 14:47:17 2012 UTC (11 years, 8 months ago) by guez
Original Path: trunk/libf/dyn3d/Dissipation/inidissip.f90
File size: 3567 byte(s)
Removed variable lstardis in module comdissnew and procedures gradiv
and nxgrarot. lstardir had to be true. gradiv and nxgrarot were called
if lstardis was false. Removed argument iter of procedure
filtreg. iter had to be 1. gradiv and nxgrarot called filtreg with
iter == 2.

Moved procedure flxsetup into module yoecumf. Module yoecumf is only
used in program units of directory Conflx, moved it there.

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 57 real tetaudiv(llm), tetaurot(llm), tetah(llm) ! in s
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     USE comvert, ONLY: preff, presnivs
27     USE conf_gcm_m, ONLY: iperiod
28     USE dimens_m, ONLY: iim, jjm
29 guez 27 use filtreg_m, only: filtreg
30 guez 54 use gradiv2_m, only: gradiv2
31 guez 57 use jumble, only: new_unit
32 guez 64 USE paramet_m, ONLY: jjp1
33 guez 3
34 guez 26 ! Variables local to the procedure:
35 guez 57 REAL zvert(llm), max_zvert ! no dimension
36     REAL, dimension(iim + 1, jjm + 1, 1):: zh, zu, gx, divgra, deltap
37     real zv(iim + 1, jjm, 1), gy(iim + 1, jjm, 1)
38 guez 40 REAL zllm
39 guez 54 INTEGER l, seed_size, ii, unit
40 guez 27 REAL tetamin ! in s
41 guez 3
42 guez 26 !-----------------------------------------------------------------------
43 guez 3
44 guez 26 PRINT *, 'Call sequence information: inidissip'
45 guez 54 call random_seed(size=seed_size)
46     call random_seed(put=(/(0, ii = 1, seed_size)/))
47 guez 3
48 guez 54 PRINT *, 'Calcul des valeurs propres de divgrad'
49 guez 40 deltap = 1.
50 guez 54 call random_number(zh)
51     zh = zh - 0.5
52 guez 64 CALL filtreg(zh, jjp1, 1, 2, 1, .TRUE.)
53 guez 3
54 guez 26 DO l = 1, 50
55 guez 64 CALL divgrad2(1, zh, deltap, niterh, divgra, -1.)
56 guez 57 zllm = abs(maxval(divgra))
57     zh = divgra / zllm
58 guez 26 END DO
59 guez 3
60 guez 64 cdivh = 1. / zllm
61 guez 54 PRINT *, 'cdivh = ', cdivh
62 guez 3
63 guez 54 PRINT *, 'Calcul des valeurs propres de gradiv'
64     call random_number(zu)
65     zu = zu - 0.5
66 guez 64 CALL filtreg(zu, jjp1, 1, 2, 1, .TRUE.)
67 guez 54 call random_number(zv)
68     zv = zv - 0.5
69 guez 64 CALL filtreg(zv, jjm, 1, 2, 1, .FALSE.)
70 guez 3
71 guez 54 DO l = 1, 50
72 guez 64 CALL gradiv2(zu, zv, nitergdiv, gx, gy, -1.)
73 guez 57 zllm = max(abs(maxval(gx)), abs(maxval(gy)))
74     zu = gx / zllm
75     zv = gy / zllm
76 guez 54 end DO
77 guez 3
78 guez 64 cdivu = 1. / zllm
79 guez 54 PRINT *, 'cdivu = ', cdivu
80 guez 3
81 guez 54 PRINT *, 'Calcul des valeurs propres de nxgrarot'
82     call random_number(zu)
83     zu = zu - 0.5
84 guez 64 CALL filtreg(zu, jjp1, 1, 2, 1, .TRUE.)
85 guez 54 call random_number(zv)
86     zv = zv - 0.5
87 guez 64 CALL filtreg(zv, jjm, 1, 2, 1, .FALSE.)
88 guez 3
89 guez 54 DO l = 1, 50
90 guez 64 CALL nxgraro2(1, zu, zv, nitergrot, gx, gy, -1.)
91 guez 57 zllm = max(abs(maxval(gx)), abs(maxval(gy)))
92     zu = gx / zllm
93     zv = gy / zllm
94 guez 54 end DO
95    
96 guez 64 crot = 1. / zllm
97 guez 26 PRINT *, 'crot = ', crot
98 guez 3
99 guez 26 ! Variation verticale du coefficient de dissipation :
100 guez 27 zvert = 2. - 1. / (1. + (preff / presnivs - 1.)**2)
101     ! (between 1 and 2)
102 guez 3
103 guez 26 tetaudiv = zvert / tetagdiv
104     tetaurot = zvert / tetagrot
105     tetah = zvert / tetatemp
106 guez 54
107 guez 26 call new_unit(unit)
108     open(unit, file="inidissip.csv", status="replace", action="write")
109 guez 57 write(unit, fmt=*) '"tetaudiv (s)" "tetaurot (s)" "tetah (s)"' ! title line
110 guez 26 do l = 1, llm
111     write(unit, fmt=*) tetaudiv(l), tetaurot(l), tetah(l)
112     end do
113     close(unit)
114     print *, 'Created file "inidissip.csv".'
115 guez 3
116 guez 27 max_zvert = maxval(zvert)
117 guez 54 tetamin = min(1e6, tetagdiv / max_zvert, tetagrot / max_zvert, &
118 guez 27 tetatemp / max_zvert)
119 guez 26 PRINT *, 'tetamin = ', tetamin
120 guez 27 idissip = max(1, int(tetamin / (2 * dtvr * iperiod))) * iperiod
121 guez 26 PRINT *, 'idissip = ', idissip
122     dtdiss = idissip * dtvr
123 guez 57 PRINT *, 'dtdiss = ', dtdiss, "s"
124 guez 26
125     END SUBROUTINE inidissip
126    
127     end module inidissip_m

  ViewVC Help
Powered by ViewVC 1.1.21