1 | ! $Header$ |
---|
2 | |
---|
3 | SUBROUTINE wrgrads(if, nl, field, name, titlevar) |
---|
4 | USE lmdz_formcoord, ONLY: formcoord |
---|
5 | USE lmdz_gradsdef |
---|
6 | |
---|
7 | IMPLICIT NONE |
---|
8 | |
---|
9 | ! Declarations |
---|
10 | ! if indice du fichier |
---|
11 | ! nl nombre de couches |
---|
12 | ! field champ |
---|
13 | ! name petit nom |
---|
14 | ! titlevar Titre |
---|
15 | |
---|
16 | ! arguments |
---|
17 | INTEGER :: if, nl |
---|
18 | REAL :: field(imx * jmx * lmx) |
---|
19 | CHARACTER(LEN = 10) :: name, file |
---|
20 | CHARACTER(LEN = 10) :: titlevar |
---|
21 | |
---|
22 | ! local |
---|
23 | |
---|
24 | INTEGER :: im, jm, lm, i, j, l, iv, iii, iji, iif, ijf |
---|
25 | |
---|
26 | LOGICAL :: writectl |
---|
27 | |
---|
28 | writectl = .FALSE. |
---|
29 | |
---|
30 | PRINT*, if, iid(if), jid(if), ifd(if), jfd(if) |
---|
31 | iii = iid(if) |
---|
32 | iji = jid(if) |
---|
33 | iif = ifd(if) |
---|
34 | ijf = jfd(if) |
---|
35 | im = iif - iii + 1 |
---|
36 | jm = ijf - iji + 1 |
---|
37 | lm = lmd(if) |
---|
38 | |
---|
39 | PRINT*, 'im,jm,lm,name,firsttime(if)' |
---|
40 | PRINT*, im, jm, lm, name, firsttime(if) |
---|
41 | |
---|
42 | IF(firsttime(if)) THEN |
---|
43 | IF(name==var(1, if)) THEN |
---|
44 | firsttime(if) = .FALSE. |
---|
45 | ivar(if) = 1 |
---|
46 | PRINT*, 'fin de l initialiation de l ecriture du fichier' |
---|
47 | PRINT*, file |
---|
48 | PRINT*, 'fichier no: ', if |
---|
49 | PRINT*, 'unit ', unit(if) |
---|
50 | PRINT*, 'nvar ', nvar(if) |
---|
51 | PRINT*, 'vars ', (var(iv, if), iv = 1, nvar(if)) |
---|
52 | else |
---|
53 | ivar(if) = ivar(if) + 1 |
---|
54 | nvar(if) = ivar(if) |
---|
55 | var(ivar(if), if) = name |
---|
56 | tvar(ivar(if), if) = trim(titlevar) |
---|
57 | nld(ivar(if), if) = nl |
---|
58 | PRINT*, 'initialisation ecriture de ', var(ivar(if), if) |
---|
59 | PRINT*, 'if ivar(if) nld ', if, ivar(if), nld(ivar(if), if) |
---|
60 | endif |
---|
61 | writectl = .TRUE. |
---|
62 | itime(if) = 1 |
---|
63 | else |
---|
64 | ivar(if) = mod(ivar(if), nvar(if)) + 1 |
---|
65 | IF (ivar(if)==nvar(if)) THEN |
---|
66 | writectl = .TRUE. |
---|
67 | itime(if) = itime(if) + 1 |
---|
68 | endif |
---|
69 | |
---|
70 | IF(var(ivar(if), if)/=name) THEN |
---|
71 | PRINT*, 'Il faut stoker la meme succession de champs a chaque' |
---|
72 | PRINT*, 'pas de temps' |
---|
73 | PRINT*, 'fichier no: ', if |
---|
74 | PRINT*, 'unit ', unit(if) |
---|
75 | PRINT*, 'nvar ', nvar(if) |
---|
76 | PRINT*, 'vars ', (var(iv, if), iv = 1, nvar(if)) |
---|
77 | CALL abort_gcm("wrgrads", "problem", 1) |
---|
78 | endif |
---|
79 | ENDIF |
---|
80 | |
---|
81 | PRINT*, 'ivar(if),nvar(if),var(ivar(if),if),writectl' |
---|
82 | PRINT*, ivar(if), nvar(if), var(ivar(if), if), writectl |
---|
83 | DO l = 1, nl |
---|
84 | irec(if) = irec(if) + 1 |
---|
85 | ! PRINT*,'Ecrit rec=',irec(if),iii,iif,iji,ijf, |
---|
86 | ! s (l-1)*imd(if)*jmd(if)+(iji-1)*imd(if)+iii |
---|
87 | ! s ,(l-1)*imd(if)*jmd(if)+(ijf-1)*imd(if)+iif |
---|
88 | WRITE(unit(if) + 1, rec = irec(if)) & |
---|
89 | ((field((l - 1) * imd(if) * jmd(if) + (j - 1) * imd(if) + i) & |
---|
90 | , i = iii, iif), j = iji, ijf) |
---|
91 | enddo |
---|
92 | IF (writectl) THEN |
---|
93 | file = fichier(if) |
---|
94 | ! WARNING! on reecrase le fichier .ctl a chaque ecriture |
---|
95 | open(unit(if), file = trim(file) // '.ctl' & |
---|
96 | , form = 'formatted', status = 'unknown') |
---|
97 | WRITE(unit(if), '(a5,1x,a40)') & |
---|
98 | 'DSET ', '^' // trim(file) // '.dat' |
---|
99 | |
---|
100 | WRITE(unit(if), '(a12)') 'UNDEF 1.0E30' |
---|
101 | WRITE(unit(if), '(a5,1x,a40)') 'TITLE ', title(if) |
---|
102 | CALL formcoord(unit(if), im, xd(iii, if), 1., .FALSE., 'XDEF') |
---|
103 | CALL formcoord(unit(if), jm, yd(iji, if), 1., .TRUE., 'YDEF') |
---|
104 | CALL formcoord(unit(if), lm, zd(1, if), 1., .FALSE., 'ZDEF') |
---|
105 | WRITE(unit(if), '(a4,i10,a30)') & |
---|
106 | 'TDEF ', itime(if), ' LINEAR 02JAN1987 1MO ' |
---|
107 | WRITE(unit(if), '(a4,2x,i5)') 'VARS', nvar(if) |
---|
108 | DO iv = 1, nvar(if) |
---|
109 | ! PRINT*,'if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if)' |
---|
110 | ! PRINT*,if,var(iv,if),nld(iv,if),nld(iv,if)-1/nld(iv,if) |
---|
111 | WRITE(unit(if), 1000) var(iv, if), nld(iv, if) - 1 / nld(iv, if) & |
---|
112 | , 99, tvar(iv, if) |
---|
113 | enddo |
---|
114 | WRITE(unit(if), '(a7)') 'ENDVARS' |
---|
115 | |
---|
116 | 1000 format(a5, 3x, i4, i3, 1x, a39) |
---|
117 | |
---|
118 | close(unit(if)) |
---|
119 | |
---|
120 | ENDIF ! writectl |
---|
121 | |
---|
122 | END SUBROUTINE wrgrads |
---|
123 | |
---|