1 | subroutine massb_perturb_mois_lapsecouche ! calcule le mass balance en mode perturbation |
---|
2 | |
---|
3 | use climat_perturb_mois_lapsecouche_mod |
---|
4 | use declare_month_lapsecouche |
---|
5 | |
---|
6 | implicit none |
---|
7 | |
---|
8 | |
---|
9 | real zel ! variable de travail |
---|
10 | real T_surf_ref |
---|
11 | |
---|
12 | |
---|
13 | do j=1,ny |
---|
14 | do i=1,nx |
---|
15 | ! Zs est l'altitude de la surface qu'elle soit mer, glace ou lac |
---|
16 | ZS(i,j)=max(slv(i,j),S(I,J)) |
---|
17 | |
---|
18 | do mo=1,mois |
---|
19 | |
---|
20 | ! on utilise un lapserate par tranche d'altitude |
---|
21 | if(ZS(i,j).gt.3000) then |
---|
22 | T_surf_ref=Tsol(i,j,mo)+(lapserate(mo,4)*(ZS(i,j)-3000)+lapserate(mo,3)*1000+lapserate(mo,2)*1000+lapserate(mo,1)*1000) |
---|
23 | end if |
---|
24 | if((ZS(i,j).le.3000).and.(zel.gt.2000)) then |
---|
25 | T_surf_ref=Tsol(i,j,mo)+(lapserate(mo,3)*(ZS(i,j)-2000)+lapserate(mo,2)*1000+lapserate(mo,1)*1000) |
---|
26 | end if |
---|
27 | if ((ZS(i,j).le.2000).and.(zel.gt.1000)) then |
---|
28 | T_surf_ref=Tsol(i,j,mo)+(lapserate(mo,2)*(ZS(i,j)-1000)+lapserate(mo,1)*1000) |
---|
29 | end if |
---|
30 | if (ZS(i,j).le.1000) then |
---|
31 | T_surf_ref=Tsol(i,j,mo)+lapserate(mo,1)*ZS(i,j) |
---|
32 | end if |
---|
33 | |
---|
34 | T_surf_ref=T_surf_ref+Tafor ! on applique la perturbation homogene |
---|
35 | |
---|
36 | if(retroac.eq.1) then ! full retroaction acc. |
---|
37 | Pm_surf(i,j,mo)= Pm_surf(i,j,mo)*exp(rappact*(T_surf_ref-Tm_surf(i,j,mo))) |
---|
38 | else if (retroac.eq.0) then |
---|
39 | Pm_surf(i,j,mo)=Pm_surf(i,j,mo) |
---|
40 | end if |
---|
41 | Tm_surf(i,j,mo)=T_surf_ref |
---|
42 | |
---|
43 | |
---|
44 | end do |
---|
45 | end do |
---|
46 | end do |
---|
47 | |
---|
48 | |
---|
49 | |
---|
50 | ! Pour les modulos |
---|
51 | Tm_surf(:,:,mois+1)=Tm_surf(:,:,1) |
---|
52 | Pm_surf(:,:,mois+1)=Pm_surf(:,:,1) |
---|
53 | |
---|
54 | |
---|
55 | do j=1,ny |
---|
56 | do i=1,nx |
---|
57 | Tann(i,j)=(sum(Tm_surf(i,j,:))-Tm_surf(i,j,1))/12 ! janvier compte en double |
---|
58 | Tjuly(i,j)= Tm_surf(i,j,7) |
---|
59 | end do |
---|
60 | end do |
---|
61 | |
---|
62 | |
---|
63 | debug_3D(:,:,59)=Tjuly(:,:) |
---|
64 | |
---|
65 | |
---|
66 | |
---|
67 | call accum_month_lapsecouche() ! on calcule l'accumulation deduite de ce champ (temp, precipes) |
---|
68 | |
---|
69 | |
---|
70 | |
---|
71 | ! ablation et bilan de masse sont maintenant appeles par forclim |
---|
72 | |
---|
73 | |
---|
74 | |
---|
75 | !-------------------------------------------------------------------------------------- |
---|
76 | ! etape 3 : calcul tann et tjuly // sortie de debug3D |
---|
77 | |
---|
78 | !!$do j=1,ny |
---|
79 | !!$ do i=1,nx |
---|
80 | !!$ Tann(i,j)=sum(Tm_surf(i,j,:))/12 |
---|
81 | !!$ Tjuly(i,j)=(Tm_surf(i,j,6)+Tm_surf(i,j,7)+Tm_surf(i,j,8))/3 |
---|
82 | !!$ zel=max(S(i,j),20.*(ylat(i,j)-65.)) |
---|
83 | !!$ Tann_par(i,j)=49.13-0.007992*Zel-0.7576*ylat(i,j) |
---|
84 | !!$ Tjuly_par(i,j)= 30.78-0.006277*S(i,j)-0.3262*ylat(i,j) |
---|
85 | !!$ end do |
---|
86 | !!$end do |
---|
87 | |
---|
88 | !!$debug_3D(:,:,29)=Tann(:,:)-Ta0(:,:) |
---|
89 | !!$debug_3D(:,:,30)=Acc(:,:)-precip(:,:) |
---|
90 | !!$debug_3D(:,:,31)=Acc(:,:)-bmelt(:,:) |
---|
91 | !!$debug_3D(:,:,46)=Tann(:,:)-Tann_par(:,:) |
---|
92 | !!$debug_3D(:,:,47)=Tjuly(:,:)-Tjuly_par(:,:) |
---|
93 | !!$debug_3D(:,:,48)=Tm_surf(:,:,7)-Tjuly_par(:,:) |
---|
94 | |
---|
95 | return |
---|
96 | end subroutine massb_perturb_mois_lapsecouche |
---|
97 | |
---|