source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/wrgrads.f90 @ 5327

Last change on this file since 5327 was 5159, checked in by abarral, 3 months ago

Put dimensions.h and paramet.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 3.5 KB
Line 
1! $Header$
2
3SUBROUTINE 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
122END SUBROUTINE wrgrads
123
Note: See TracBrowser for help on using the repository browser.