source: trunk/SOURCES/Eurasie_files/output_eurasie_mod.f90 @ 336

Last change on this file since 336 was 336, checked in by vaalder, 3 years ago

Bug in output eurasie

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