1 | module lect_clim_act_greeneem_mar |
---|
2 | ! c'est pour une version annuelle utilisant les donnees mar. |
---|
3 | |
---|
4 | use module3D_phy |
---|
5 | use ablation_ann ! le module pdd base sur Tann et Tjuly |
---|
6 | |
---|
7 | real,dimension(nx,ny) :: S0CLIM ! topo de reference du GCM |
---|
8 | |
---|
9 | contains |
---|
10 | |
---|
11 | subroutine input_climat_ref() |
---|
12 | |
---|
13 | |
---|
14 | |
---|
15 | ! pour les precip et la temp on prend les valeurs mensuelles et on en deduit des Tann/tjuly |
---|
16 | real,dimension(nx,ny,12) :: Tm ! temperature mensuelle sur la calotte de ref |
---|
17 | real,dimension(nx,ny,12) :: Pm ! precipitation mensuelle sur la calotte de ref |
---|
18 | |
---|
19 | |
---|
20 | character(len=200) :: filin !nom temporaire |
---|
21 | character (len=200) :: filtr_topo, filtr_t, filtr_p |
---|
22 | |
---|
23 | real :: ti, tj ! variable provisoire de lecture |
---|
24 | |
---|
25 | |
---|
26 | namelist/clim_init_ann/filtr_topo,filtr_t,filtr_p |
---|
27 | |
---|
28 | |
---|
29 | ! formats pour les ecritures dans 42 |
---|
30 | 428 format(A) |
---|
31 | |
---|
32 | rewind(num_param) ! pour revenir au debut du fichier param_list.dat |
---|
33 | read(num_param,clim_init_ann) |
---|
34 | |
---|
35 | |
---|
36 | write(num_rep_42,428)'!___________________________________________________________' |
---|
37 | write(num_rep_42,428) '&clim_perturb_ann ! module climat_perturb_mar_mod' |
---|
38 | write(num_rep_42,'(A,A)') 'filtr_topo =', filtr_topo |
---|
39 | write(num_rep_42,'(A,A)') 'filtr_t =', filtr_t |
---|
40 | write(num_rep_42,'(A,A)') 'filtr_p =', filtr_p |
---|
41 | write(num_rep_42,*)'/' |
---|
42 | write(num_rep_42,428) '! fichiers temperature et precip : 12 mois' |
---|
43 | write(num_rep_42,428) '! faire un bloc namelist par snapshot' |
---|
44 | write(num_rep_42,*) |
---|
45 | |
---|
46 | |
---|
47 | |
---|
48 | write(6,*) 'fichiers snapshots' |
---|
49 | |
---|
50 | ! lecture de la topo de surface de reference du GCM |
---|
51 | filin=trim(dirnameinp)//trim(filtr_topo) |
---|
52 | write(6,*) filin |
---|
53 | open(20,file=filin) |
---|
54 | do j=1,ny |
---|
55 | do i=1,nx |
---|
56 | read (20,*) S0CLIM(i,j) |
---|
57 | S0CLIM(i,j)=max(S0CLIM(i,j),sealevel_2d(i,j)) ! pour etre au niveau des mers |
---|
58 | end do |
---|
59 | end do |
---|
60 | close(20) |
---|
61 | |
---|
62 | |
---|
63 | ! temperature : temperature a l'altitude de la calotte de ref (MAR) |
---|
64 | filin=trim(dirnameinp)//trim(filtr_t) |
---|
65 | write(6,*) filin |
---|
66 | open(20,file=filin) |
---|
67 | do j=1,ny |
---|
68 | do i=1,nx |
---|
69 | read(20,*) ti, tj, (Tm(i,j,mo),mo=1,12) |
---|
70 | end do |
---|
71 | end do |
---|
72 | close(20) |
---|
73 | |
---|
74 | ! precipitation a l'altitude de la calotte de ref (MAR) |
---|
75 | filin=trim(dirnameinp)//trim(filtr_p) |
---|
76 | write(6,*) filin |
---|
77 | open(20,file=filin) |
---|
78 | do j=1,ny |
---|
79 | do i=1,nx |
---|
80 | read(20,*) ti, tj, (Pm(i,j,mo),mo=1,12) |
---|
81 | end do |
---|
82 | end do |
---|
83 | close(20) |
---|
84 | |
---|
85 | do j=1,ny |
---|
86 | do i=1,nx |
---|
87 | Tann(i,j)=sum(Tm(i,j,:))/12 |
---|
88 | Tjuly(i,j)=Tm(i,j,7) |
---|
89 | !Tjuly(i,j)=(Tm_surf(i,j,6)+Tm_surf(i,j,7)+Tm_surf(i,j,8))/3 ! en fait un Tjja |
---|
90 | precip(i,j)=sum(Pm(i,j,:))/12 !attention a l'unite des precipes mensuelles (mm/mois ramenee sur l'annee...) |
---|
91 | if(Tann(i,j).lt.(-10)) then |
---|
92 | acc(i,j)=precip(i,j) |
---|
93 | else if(Tann(i,j).lt.(-2)) then |
---|
94 | acc(i,j)=0.9*precip(i,j) |
---|
95 | else if(Tann(i,j).lt.2) then |
---|
96 | acc(i,j)=0.8*precip(i,j) |
---|
97 | else if(Tann(i,j).lt.(5)) then |
---|
98 | acc(i,j)=0.6*precip(i,j) |
---|
99 | else |
---|
100 | acc(i,j)=0. |
---|
101 | end if |
---|
102 | end do |
---|
103 | end do |
---|
104 | |
---|
105 | |
---|
106 | |
---|
107 | |
---|
108 | ! temperature a l'altitude du GCM |
---|
109 | TA0(:,:)=Tann(:,:) |
---|
110 | TJ0(:,:)=Tjuly(:,:) |
---|
111 | |
---|
112 | call Tsgreen |
---|
113 | |
---|
114 | Tann(:,:)=Tann(:,:)+Tafor |
---|
115 | Tjuly(:,:)=Tjuly(:,:)+Tafor |
---|
116 | |
---|
117 | do j=1,ny |
---|
118 | do i=1,nx |
---|
119 | if(retroac.eq.1) then ! full retroaction acc. |
---|
120 | acc(i,j)=precip(i,j)*exp(rappact*(tann(i,j)-ta0(i,j))) |
---|
121 | else if(retroac.eq.0) then |
---|
122 | acc(i,j)=precip(i,j) |
---|
123 | endif |
---|
124 | end do |
---|
125 | end do |
---|
126 | |
---|
127 | end subroutine input_climat_ref |
---|
128 | |
---|
129 | !--------------------------------------------------------------------------------------------- |
---|
130 | ! parametrisation de la temperature . Cette routine gere la partie dependance en altitude |
---|
131 | ! c'est donc le S courant qui compte |
---|
132 | |
---|
133 | subroutine Tsgreen |
---|
134 | |
---|
135 | real alti |
---|
136 | real lapse_ann |
---|
137 | real lapse_july |
---|
138 | |
---|
139 | |
---|
140 | |
---|
141 | ! valeur de lapse de Fausto et al. |
---|
142 | lapse_ann = -6.309/1000 |
---|
143 | lapse_july = -5.426/1000 |
---|
144 | |
---|
145 | |
---|
146 | do j=1,ny |
---|
147 | do i=1,nx |
---|
148 | alti=max(sealevel_2d(i,j),S(I,J)) |
---|
149 | Tann(i,j)=TA0(i,j)+lapse_ann*(alti-S0CLIM(i,j)) |
---|
150 | Tjuly(i,j)=TJ0(i,j)+lapse_july*(alti-S0CLIM(i,j)) |
---|
151 | end do |
---|
152 | end do |
---|
153 | ! la retroac des precipes de fait dans massb |
---|
154 | |
---|
155 | end subroutine Tsgreen |
---|
156 | |
---|
157 | |
---|
158 | end module lect_clim_act_greeneem_mar |
---|