source: branches/GRISLIv3/SOURCES/Eurasie_files/output_eurasie_mod.f90 @ 465

Last change on this file since 465 was 465, checked in by aquiquet, 4 months ago

Cleaning branch: start cleaning module3D

File size: 14.6 KB
Line 
1module  output_eurasie_mod
2
3       USE module3D_phy
4       use bilan_eau_mod
5
6implicit none
7
8real ::  bmean                        !
9real ::  accmean                      ! accumulation moyenne
10real ::  ablmean                      ! ablation moyenne
11real ::  calvmean                     ! moyenne calving
12real ::  ablbordmean                  !
13real ::  ablatotmean
14real ::  bmeltmean                    ! moyenne fusion basale
15real ::  tbmean                       ! temperature basale moyenne
16real ::  tbdotmean                    ! moyenne variation / temps temperature basale
17real ::  vsmean                       ! vitesse de surface moyenne
18!real ::  vsdotmean                    ! moyenne variation / temps vitesse de surface
19real ::  uzsmean   !!!! utilise ?     ! vitesse verticale de surface moyenne
20real ::  uzsdotmean                   ! moyenne variation / temps vitesse verticale de surface
21real ::  uzkmean                      ! moyenne vitesse verticale de surface
22real ::  hdotmean                     ! moyenne derivee / temps de H
23real ::  bdotmean                     ! moyenne bedrock derive / temps
24!real ::  pf0mean                      ! moyenne de PF0
25!real ::  pf1mean                      ! moyenne de PF1
26!real ::  evapmean                     ! moyenne de EVAP
27!real ::  pwmean                       ! moyenne PW
28!real ::  pdfmean                      ! moyenne PDF
29integer, parameter :: nmask=7          ! nbr de masques
30logical,dimension(nx,ny,nmask) :: mask_cal ! masque regions calotte
31integer, dimension(nx,ny) :: write_mask
32CONTAINS
33!_________________________________________________________________________
34subroutine init_outshort
35
36mask_cal(:,:,:)=.false.
37mask_cal(:,:,1)=.true.
38! calcul d'un masque pour les regions des calottes
39do j=1,ny
40   do i=1,nx
41! -- Fennoscandie
42        IF( (((xlong(i,j).ge.345).AND.(xlong(i,j).lt.360)).AND. & !British
43            ((ylat(i,j).ge.50).AND.(ylat(i,j).le.60))).OR.      &
44            (((xlong(i,j).ge.0).AND.(xlong(i,j).le.40)).AND.    & !Scand
45            ((ylat(i,j).ge.50).AND.(ylat(i,j).le.70))).OR.      &
46!            (((xlong(i,j).ge.50).AND.(xlong(i,j).le.120)).AND.  &
47            (((xlong(i,j).ge.10).AND.(xlong(i,j).le.122)).AND.  & !BK
48            ((ylat(i,j).ge.65).AND.(ylat(i,j).le.85))) ) mask_cal(i,j,2)=.true.
49!! -- Scandinavian Ice Sheet Pauline
50        IF( ((xlong(i,j).gt.0.).AND.(xlong(i,j).le.40)).AND. &
51             ((ylat(i,j).ge.50).AND.(ylat(i,j).le.70))) mask_cal(i,j,3)=.true.
52! -- Barents Ice Sheet Pauline
53        IF ( (((xlong(i,j).gt.10.).AND.(xlong(i,j).le.60.)).AND. &
54             ((ylat(i,j).gt.70).AND.(ylat(i,j).le.85.))).OR.    &
55             (((xlong(i,j).gt.40.).AND.(xlong(i,j).le.60.)).AND. &
56              ((ylat(i,j).ge.65.).AND.(ylat(i,j).lt.70.)))) mask_cal(i,j,4)=.true.
57! -- Kara Ice Sheet Pauline
58        IF( (((xlong(i,j).gt.60.).AND.(xlong(i,j).le.122)).AND. &
59             ((ylat(i,j).ge.70).AND.(ylat(i,j).le.85))).OR.    &
60             (((xlong(i,j).gt.60.).AND.(xlong(i,j).le.80.)).AND. &
61              ((ylat(i,j).ge.65.).AND.(ylat(i,j).lt.70.))))  mask_cal(i,j,5)=.true.
62! -- British Ice Sheet Pauline
63        IF( ((xlong(i,j).gt.350.).AND.(xlong(i,j).le.360)).AND. &
64             ((ylat(i,j).ge.50).AND.(ylat(i,j).le.60))) mask_cal(i,j,6)=.true.
65! -- Siberian Ice Sheet
66        IF( ((xlong(i,j).gt.122.).AND.(xlong(i,j).lt.190)).AND. &
67             ((ylat(i,j).ge.60).AND.(ylat(i,j).le.85))) mask_cal(i,j,7)=.true.
68       enddo
69    enddo
70!        open (UNIT=7777,file='mask_hemin40-02.dat')
71!   do j=1,ny
72!        do i=1,nx
73!        if (mask_cal(i,j,2)) then
74!                write_mask(i,j)=2
75!        else
76!                write_mask(i,j)=0
77!        endif   
78!        write(7777,*) i,j,write_mask(i,j)
79!        enddo     
80!   enddo
81!   close(UNIT=7777)
82!   stop
83
84! ecriture entete avec les colonnes du fichier short :
85WRITE(num_ritz, '(a91)')"! hemin40    : time,isvol,deltavol,inp,isvolf,inf,isacc,isabl,ISABLBORD,ABLATOT,ISCALV,ISBM"
86WRITE(num_ritz, '(a90)')"! colonne    :  1    2      3       4    5     6    7     8      9        10      11    12"
87WRITE(num_ritz,'(a157)')"! calotte    : Fennoscandie ScandinavianIS BarentsIS KaraIS SiberianIS BritishIS"
88WRITE(num_ritz,'(a153)')"! isvol      :    13        26          39            52            65             78"
89WRITE(num_ritz,'(a153)')"! inp        :    14        27          40            53            66             79"
90WRITE(num_ritz,'(a153)')"! isvolf     :    15        28          41            54            67             80"
91WRITE(num_ritz,'(a153)')"! inf        :    16        29          42            55            68             81"
92WRITE(num_ritz,'(a153)')"! isacc      :    17        30          43            56            69             82"
93WRITE(num_ritz,'(a153)')"! isabl      :    18        31          44            57            70             83"
94WRITE(num_ritz,'(a153)')"! isablbord  :    19        32          45            58            71             84"
95WRITE(num_ritz,'(a153)')"! ablatot    :    20        33          46            59            72             85"
96WRITE(num_ritz,'(a153)')"! iscalv     :    21        34          47            60            73             86"
97WRITE(num_ritz,'(a153)')"! isbm       :    22        35          48            61            74             87"
98WRITE(num_ritz,'(a153)')"! itjjamean_ :    23        36          49            62            75             88"
99WRITE(num_ritz,'(a153)')"! hmean_     :    24        37          50            63            76             89"
100WRITE(num_ritz,'(a153)')"! Hmax_      :    25        38          51            64            77             90"
101WRITE(num_ritz,*)
102end subroutine init_outshort
103
104!_________________________________________________________________________
105subroutine shortoutput
106
107! 1_initialization
108!------------------
109      integer KK, np
110!     integer inpl, INPG, INPF
111!     integer inplab,inpkeew,inpinn,inpcord
112!     integer inpscaN,inpbar,inpkara,inpsib,inpbrit
113     integer inp(nmask) ! Surface posee (nb de noeuds)
114     integer inf(nmask) ! surface flottante
115
116!Variables pour sommer     
117      real isvol(nmask),isvolf(nmask) ! volume posé et flottants
118      REAL ISCALV(nmask),ISACC(nmask),ISBM(nmask),ISABL(nmask)
119      REAL ISABLBORD(nmask),ABLATOT(nmask),TACC(nmask),TBM(nmask)
120      REAL ITJJA(nmask)
121!      REAL ABLAMEAN
122!moyennes utilisées en output
123      REAL HMAX_(nmask) , HMEAN_(nmask) 
124      REAL BMEAN_(nmask) , ACCMEAN_(nmask) , ABLMEAN_(nmask) , ABLBORDMEAN_(nmask)
125      REAL ABLATOTMEAN_(nmask) , CALVMEAN_(nmask) , ITJJAMEAN_(nmask)
126
127
128
129!     REAL ITJJAMEAN_L, ITJJAMEAN_G, ITJJAMEAN_F ...
130!     REAL ITJJAMEAN_LAB,ITJJAMEAN_KEEW,ITJJAMEAN_INN,ITJJAMEAN_CORD
131!     REAL ITJJAMEAN_SCAN,ITJJAMEAN_BAR,ITJJAMEAN_KARA,ITJJAMEAN_SIB,ITJJAMEAN_BRIT
132
133      REAL HDOTMEAN_G
134!      REAL ABLA(NX,NY)
135      REAL DELTAVOL
136
137
138!     open(unit=4145,file='reg_output_nord.dat')
139
140      BMELTMEAN=0.
141      TBMEAN=0.
142      TBDOTMEAN=0.
143      VSMEAN=0.
144      UZSMEAN=0.
145      UZSDOTMEAN=0.
146      UZKMEAN=0.
147      HDOTMEAN=0.
148      HDOTMEAN_G = 0.
149      BDOTMEAN=0.
150
151      DO kk = 1,nmask
152        INP(kk) = 0
153        INF(kk) = 0
154        ISVOL(kk) = 0.
155        ISVOLF(kk) = 0.
156        ISBM(kk) = 0.
157        ISACC(kk) = 0.
158        ISCALV(kk) = 0.
159        ISABL(kk) = 0.
160        ISABLBORD(kk) = 0.
161        ABLATOT(kk)= 0.
162        TACC(kk) = 0.
163        TBM(kk) = 0.
164        ITJJA(kk) = 0.
165       
166! nouveau tof mai 2009
167!        where (mask_cal(:,:,kk).and.H(:,:).gt.2..and.flot(:,:)) ISVOLF(kk) = ISVOLF(kk) + H(I,J)
168        isvolf(kk) = sum(H(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and.flot(:,:)))
169        INF(kk) = count(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and.flot(:,:))
170
171        INP(kk) = count(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:))
172        isvol(kk) = sum(H(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:)))
173        isacc(kk) = sum(Acc(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:)))
174        isabl(kk) = sum(Abl(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:)))
175        itjja(kk) = sum(Tjuly(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:)))
176        Hmax_(kk) = maxval(H(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.).and..not.flot(:,:)))
177        Tacc(kk) = sum(Acc(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.)))
178        isablbord(kk) = sum(ablbord(:,:),mask=(mask_cal(:,:,kk)))
179        iscalv(kk) =  sum(calv(:,:),mask=(mask_cal(:,:,kk).and.(H(:,:).gt.2.)))/dt
180
181        ablatot(kk) = isabl(kk) + isablbord(kk)
182        isbm(kk) = isacc(kk)+isabl(kk)+iscalv(kk)+isablbord(kk)
183        Tbm(kk) = Tacc(kk)+isabl(kk)+iscalv(kk)+isablbord(kk)
184
185
186     enddo
187
188
189!!$
190!!$
191!!$            IF(H(i,j).gt.2.)  THEN
192!!$             if (mk(i,j).eq.1) then
193!!$               INF(2) = INF(2) + 1
194!!$               ISVOLF(2) = ISVOLF(2) + H(I,J)
195!!$             else
196!!$               INP(2) = INP(2) + 1
197!!$               ISVOL(2) = ISVOL(2) + H(I,J)
198!!$               ISACC(2) = ISACC(2) + ACC(I,J)
199!!$               ISABL(2) = ISABL(2) + ABL(I,J)
200!!$               ITJJA(2) = ITJJA(2) + TJULY(I,J)
201!!$               if (H(I,J).gt.HMAX_(2)) HMAX_(2)=H(I,J)
202!!$             endif
203!!$            ENDIF
204!!$            TACC(2) = TACC(2) + ACC(I,J)
205!!$             ISABLBORD(2) = ISABLBORD(2) + ABLBORD(I,J)
206!!$             ABLATOT(2) = ISABL(2) + ISABLBORD(2)
207!!$             ISCALV(2) = ISCALV(2) + CALV(I,J)
208!!$             ISBM(2) = ISACC(2)+ISABL(2)+ISCALV(2)+ISABLBORD(2)
209!!$             TBM(2) = TACC(2)+ISABL(2)+ISCALV(2)+ISABLBORD(2)
210!!$        ENDIF
211!!$
212!!$
213!!$      END DO 
214
215
216 
217do K=1,nmask
218
219! == Les moyennes     
220      IF(INP(K).ne.0)THEN
221          HMEAN_(K) = ISVOL(K)   /INP(K) ! /(DX*DY*INP(K))
222          BMEAN_(K) = ISBM(K)    /INP(K)
223          ACCMEAN_(K) = ISACC(K) /INP(K)
224          ABLMEAN_(K) = ISABL(K) /INP(K)
225          ABLBORDMEAN_(K) = ISABLBORD(K) /INP(K)
226          CALVMEAN_(K)    = ISCALV(K)    /INP(K)
227          ABLATOTMEAN_(K) = ABLATOT(K)   /INP(K)
228          ITJJAMEAN_(K)   = ITJJA(K)     /INP(K)
229       ENDIF
230! == Les volmes intergrées (3D)
231      ISVOL(K) = ISVOL(K)*DX*DY     
232              isacc(k)=isacc(k)*dx*dy
233              isabl(k)=isabl(k)*dx*dy
234              isablbord(k)=isablbord(k)*dx*dy
235              ablatot(k)=ablatot(k)*dx*dy
236              iscalv(k)=iscalv(k)*dx*dy
237              isbm(k)=isbm(k)*dx*dy
238              tacc(k)=tacc(k)*dx*dy
239              tbm(k)=tbm(k)*dx*dy
240enddo
241!nom_table='abl'
242!call printtable_r(abl,nom_table)
243
244!====================================================
245! -- Hemin40                : : 1   
246
247      if (NP.ne.0) then 
248!        HMEAN=VOL/NP
249!        VOL=VOL*DX*DY
250!        ISVOL(1) = VOL
251!        BMEAN=BMEAN/NP
252!        ACCMEAN=ACCMEAN/NP
253!        ITJJAMEAN = ITJJA(1)/NP
254!        ABLMEAN=BMEAN-ACCMEAN
255!!!     ABLMEAN = ABLMEAN/NP
256!        CALVMEAN=CALVMEAN/NP
257!!!     BMELTMEAN=BMELTMEAN/NP
258!!!     ABLBORDMEAN=ABLBORDMEAN/NP
259!!!     ABLAMEAN = ABLAMEAN/NP
260        TBMEAN=TBMEAN/NP
261        TBDOTMEAN=TBDOTMEAN/NP
262        VSMEAN=VSMEAN/NP
263!       VSDOTMEAN=VSDOTMEAN/NP
264        UZSMEAN=UZSMEAN/NP
265        UZSDOTMEAN=UZSDOTMEAN/NP
266        UZKMEAN=UZKMEAN/NP
267        DELTAVOL = HDOTMEAN*DX*DY
268        HDOTMEAN=HDOTMEAN/NP 
269    ELSE
270        TBMEAN=0.
271        TBDOTMEAN=0.
272        VSMEAN=0.
273        UZSMEAN=0.
274        UZSDOTMEAN=0.
275        UZKMEAN=0.
276        DELTAVOL = 0.
277        HDOTMEAN=0.
278      endif
279
280      BDOTMEAN=BDOTMEAN/NX/NY 
281
282! 2_writing outputs
283!------------------
284
285!         WRITE(35,904)TIME,VOL,DELTAVOL,NP,ISACC(1),ISABL(1),      &
286!          ISABLBORD(1),ABLATOT(1),ISCALV(1),ISBM(1),               &
287!          ISVOL(2),INPL,ISACC(2),                                  &
288!          ISABL(2),ISABLBORD(2),ABLATOT(2),ISCALV(2),ISBM(2),      &
289!          ISVOL(3),INPG,ISACC(3),ISABL(3),ISABLBORD(3),            &
290!          ABLATOT(3),ISCALV(3),ISBM(3),ISVOL(4),INPF,ISACC(4),     &
291!          ISABL(4),ISABLBORD(4),ABLATOT(4),ISCALV(4),ISBM(4),      &
292!          nint(HMEAN),nint(HMAX),BMEAN,TBMEAN,nint(VSMEAN),        &
293!          TBDOTMEAN,HDOTMEAN,BDOTMEAN,BMELTMEAN,NPAB,    &
294!!          TBDOTMEAN,VSDOTMEAN,HDOTMEAN,BDOTMEAN,BMELTMEAN,NPAB,    &
295!          NPCAL,HDOTMEAN_G,TACC(1),TBM(1),TACC(2),TBM(2),          &
296!          TACC(3),TBM(3),TACC(4),TBM(4),                           &
297!           ITJJAMEAN,ITJJAMEAN_L,ITJJAMEAN_G,ITJJAMEAN_F,          &
298!           ISVOL(5),INPLAB,ISACC(5),ABLATOT(5),ITJJAMEAN_LAB,      &
299!           ISVOL(6),INPKEEW,ISACC(6),ABLATOT(6),ITJJAMEAN_KEEW,    &
300!           ISVOL(7),INPINN,ISACC(7),ABLATOT(7),ITJJAMEAN_INN,      &
301!           ISVOL(8),INPCORD,ISACC(8),ABLATOT(8),ITJJAMEAN_CORD,    &
302!           ISVOL(9),INPSCAN,ISACC(9),ABLATOT(9),ITJJAMEAN_SCAN,    &
303!           ISVOL(10),INPBAR,ISACC(10),ABLATOT(10),ITJJAMEAN_BAR,   &
304!           ISVOL(11),INPKARA,ISACC(11),ABLATOT(11),ITJJAMEAN_KARA, &     
305!           ISVOL(12),INPSIB,ISACC(12),ABLATOT(12),ITJJAMEAN_SIB,   &     
306!           ISVOL(13),INPBRIT,ISACC(13),ABLATOT(13),ITJJAMEAN_BRIT, &
307!           HMEAN,HMEAN_L,HMEAN_G,HMEAN_F,HMEAN_LAB,HMEAN_KEEW,     &
308!           HMEAN_INN,HMEAN_CORD,HMEAN_SCAN,HMEAN_BAR,HMEAN_KARA,   &
309!           HMEAN_SIB,HMEAN_BRIT,                                   &
310!           HMAX,HMAX_L,HMAX_G,HMAX_F,HMAX_LAB,HMAX_KEEW,HMAX_INN,  &
311!           HMAX_CORD, HMAX_SCAN,HMAX_BAR,HMAX_KARA,HMAX_SIB,HMAX_BRIT     
312
313
314
315
316!print*,'========================='
317!print*,'ecrit short, time = ',time,dt
318!print*,'hdot ISABLBORD',hdot(30:40,100),ISABLBORD(2)
319
320          write(num_ritz,905)   time,isvol(1),deltavol,inp(1),isvolf(1),inf(1),isacc(1),isabl(1),    &   ! 8
321              ISABLBORD(1),ABLATOT(1),ISCALV(1),ISBM(1),     &                                     ! 4
322  isvol(2),inp(2),isvolf(2),inf(2),isacc(2),isabl(2),isablbord(2),ablatot(2),iscalv(2),isbm(2),itjjamean_(2),hmean_(2),Hmax_(2), & ! 13
323  isvol(3),inp(3),isvolf(3),inf(3),isacc(3),isabl(3),isablbord(3),ablatot(3),iscalv(3),isbm(3),itjjamean_(3),hmean_(3),hmax_(3), & ! 13
324  isvol(4),inp(4),isvolf(4),inf(4),isacc(4),isabl(4),isablbord(4),ablatot(4),iscalv(4),isbm(4),itjjamean_(4),hmean_(4),hmax_(4), & ! 13
325  isvol(5),inp(5),isvolf(5),inf(5),isacc(5),isabl(5),isablbord(5),ablatot(5),iscalv(5),isbm(5),itjjamean_(5),hmean_(5),hmax_(5), & ! 13
326  isvol(6),inp(6),isvolf(6),inf(6),isacc(6),isabl(6),isablbord(6),ablatot(6),iscalv(6),isbm(6),itjjamean_(6),hmean_(6),hmax_(6), & ! 13
327  isvol(7),inp(7),isvolf(7),inf(7),isacc(7),isabl(7),isablbord(7),ablatot(7),iscalv(7),isbm(7),itjjamean_(7),hmean_(7),hmax_(7), &
328  diff_H, water_bilan, sum(calv_dtt(:,:))/dtt, sum(ablbord_dtt(:,:))/dtt, sum(Bm_dtt(:,:))/dtt, sum(bmelt_dtt(:,:))/dtt !6
329
330 
331! !! format 900 faux, a reprendre
332
333905 format(f9.1,1x, e11.4,1x,e11.5, 1x,i5, 1x,e10.4,1x,i5 , 6(1x,e12.5), &
334         12(2(1x,e10.4,1x,i5), 9(1x,e11.4) ) , 6(1x,e15.8)) 
335 
336   
337940   format('%%%% ',a,'   time=',f8.0,' %%%%')
338end subroutine shortoutput
339
340
341end module output_eurasie_mod
Note: See TracBrowser for help on using the repository browser.