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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 178 - (hide annotations)
Fri Mar 11 18:47:26 2016 UTC (8 years, 2 months ago) by guez
Original Path: trunk/Sources/dyn3d/Dissipation/inidissip.f
File size: 3827 byte(s)
Moved variables date0, deltat, datasz_max, ncvar_ids, point, buff_pos,
buffer, regular from module histcom_var to modules where they are
defined.

Removed procedure ioipslmpp, useless for a sequential program.

Added argument datasz_max to histwrite_real (to avoid circular
dependency with histwrite).

Removed useless variables and computations everywhere.

Changed real litteral constants from default kind to double precision
in lwb, lwu, lwvn, sw1s, swtt, swtt1, swu.

Removed unused arguments: paer of sw, sw1s, sw2s, swclr; pcldsw of
sw1s, sw2s; pdsig, prayl of swr; co2_ppm of clmain, clqh; tsol of
transp_lay; nsrf of screenp; kcrit and kknu of gwstress; pstd of
orosetup.

Added output of relative humidity.

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 137 use filtreg_scal_m, only: filtreg_scal
31     use filtreg_v_m, only: filtreg_v
32 guez 54 use gradiv2_m, only: gradiv2
33 guez 57 use jumble, only: new_unit
34 guez 65 use nxgraro2_m, only: nxgraro2
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 137 CALL filtreg_scal(zh, direct = .true., intensive = .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 137 CALL filtreg_scal(zu, direct = .true., intensive = .true.)
69 guez 54 call random_number(zv)
70     zv = zv - 0.5
71 guez 137 CALL filtreg_v(zv, intensive = .true.)
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 137 CALL filtreg_scal(zu, direct = .true., intensive = .true.)
87 guez 54 call random_number(zv)
88     zv = zv - 0.5
89 guez 137 CALL filtreg_v(zv, intensive = .true.)
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