source: trunk/SOURCES/climat_forcage_mois_mod.f90 @ 10

Last change on this file since 10 was 9, checked in by dumas, 9 years ago

Mise en place de Hemin-40 avec nouveaux module climat : climat_forcage_mois_mod.f90, ablation_mod.f90, pdd_declar_mod.f90. Suppression de l'appel à lect-clim-act-hemin40_mod.f90

File size: 6.9 KB
Line 
1module climat_forcage_mois_mod                   
2
3! forcage avec champs mensuels
4! ce qui a trait aux lacs proglaciaires passe dans un module separe.
5! les tests sur geoplace sont enleves et sont remplacés par les
6! lectures de fichers appropries.
7! fonctionne avec un index en co2 et des snapshots a differents tx de co2
8
9
10USE module3D_phy,only:nx,ny,S,S0,slv,Tann,Tjuly,Tmois,acc,coefbmshelf,ro,num_param,num_rep_42,DIRNAMEINP                       
11!USE printtable
12       
13implicit none
14
15! 1=decalaration variables
16!-------------------------
17
18!integer :: nft                 !   NFT est le nombre de lignes a lire dans le fichier contenant le forcage climatique
19
20                       
21integer,parameter :: mois=12
22!integer,parameter :: ntr=1     ! nb of snapshot files : 1 pour stationnaire - ntr is now explicitely specified in the climat module
23!integer :: itr        ! index of snapshot                     
24!real,dimension(:),allocatable :: TDATE                 ! time for climate forcing
25!real,dimension(:),allocatable :: indexco2              ! index en co2 du forcage
26!real :: co2                                            ! co2 a l'instant t
27!real :: coefindex                                       ! pour le calcul du climat en fn de l'index
28!real,dimension(:),allocatable :: alphaT                 ! index temperature
29!real,dimension(:),allocatable :: alphaP                 ! index precipitation
30!real,dimension(:),allocatable :: SPERT                  ! sealevel forcing
31
32!real,dimension(ntr) :: ttr                             ! le co2 des snapshots  (len=ntr)
33!real :: ttrfile                                         ! pour lecture du co2 des snapshots
34!real alphaTTR(ntr) ! Le alphaT de l'index glaciologiq. aux snapshots
35
36real,dimension(nx,ny)      :: Ssnap                 ! altitude de surface dans le snapshot
37real,dimension(nx,ny,mois) :: Tm                    ! temperature mensuelle
38real,dimension(nx,ny,mois) :: Pm                    ! precipitation mensuelle
39
40real,dimension(nx,ny,mois) :: Tm_surf                 ! surface temperature (after topo. correction) 13 mois pour modulo
41real,dimension(nx,ny,mois) :: Pm_surf                 ! surface precipitation (after topo. correction)
42
43real,dimension(nx,ny) :: ZS                             !< surface topography above sea level
44
45real,dimension(nx,ny,mois) :: lapserate                 ! lapse rate
46real :: psolid=2.                                      ! temp limit between liquid and solid precip
47
48character(len=200)  :: filin                            ! nom temporaire
49!character(len=100) :: file_temporel                    ! forcage temporel
50!character(len=100),dimension(ntr) :: filtr_t, filtr_p   ! snapshot file name
51character(len=100) :: filtr_t1,filtr_p1                 ! snapshot file name
52
53
54contains
55
56! 2=lecture des inputs
57!--------------------
58
59subroutine input_clim                                   ! routine qui permet d'initialiser les variables climatiques
60
61! variables locales
62!-------------------
63
64  implicit none
65  integer :: i,j,mo,ti,tj 
66  character(len=8) :: control   ! label to check clim. forc. file (filin) is usable
67  integer :: l                  ! In snapshot files:the first column is the mask, read but not used
68  real :: T_surf_ref            ! variable de travail calcul temp a l'instant t a la surface S
69
70! lecture des fichiers snapshots pour tout geoplace
71! -------------------------------------------------
72  write(6,*) 'lecture fichiers snapshots'
73
74!temperature
75  filin=trim(dirnameinp)//'climat_forcage_mois_file/'//trim(filtr_t1)
76  write(6,*) 'lecture fichier ', trim(filin)
77
78  open(20,file=trim(filin))
79  do j=1,ny 
80     do i=1,nx
81        read(20,*) ti, tj, (Tm(i,j,mo),mo=1,12)
82     end do
83  end do
84  close(20)
85
86!precipitation
87  filin=trim(dirnameinp)//'climat_forcage_mois_file/'//trim(filtr_p1)
88  write(6,*) 'lecture fichier ', trim(filin)
89
90  open(20,file=trim(filin))
91  do j=1,ny 
92     do i=1,nx
93        read(20,*) ti, tj, (Pm(i,j,mo),mo=1,12)
94     end do
95  end do
96  close(20)
97
98
99
100!print*,'dans climat-forcage-mois'
101!print*,'Tm et Pm', Tm(100,100,3,1), Pm(100,100,3,1)
102
103!  Correction d'altitude pour que la temperature des snapshots soit celle
104!  sur l'altitude de reference S0
105
106!  ATTENTION. Pour l'instant Ssnap(:,:,itr)= S topo initiale
107!  ensuite il faudra lire Ssnap dans le  fichier forcage
108  Ssnap(:,:)=S0(:,:)
109
110end subroutine input_clim
111
112
113
114!-------------------------------------------------------------------------------
115! lecture de la namelist
116subroutine init_forclim
117
118  real,dimension(12) :: lect_lapse       ! lecture lapse rate
119  integer :: mo
120
121! fichiers snapshots
122  namelist/snap_forcage_mois/filtr_t1,filtr_p1
123
124! formats pour les ecritures dans 42
125428 format(A)
126  rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
127  read(num_param,snap_forcage_mois)
128  write(num_rep_42,428)'!___________________________________________________________' 
129  write(num_rep_42,428) '&snap_forcage_mois                            ! module climat_forcage_mois_mod'
130  write(num_rep_42,'(A,A)')   'filtr_t1 = ', filtr_t1
131  write(num_rep_42,'(A,A)')   'filtr_p1 = ', filtr_p1
132  write(num_rep_42,*)'/'                     
133  write(num_rep_42,428) '! fichiers temperature et precip : 12 mois'
134  write(num_rep_42,*)
135
136! lapserate
137  namelist/lapse_month/lect_lapse
138  rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
139  read(num_param,lapse_month)
140  write(num_rep_42,428)'!___________________________________________________________' 
141  write(num_rep_42,428) '&lapse_month                                   !  module climat_forcage_mois_mod'
142  write(num_rep_42,'(A,12(f0.2,","))')  'lapse_month  = ', lect_lapse
143  write(num_rep_42,*)'/'                     
144  write(num_rep_42,428) '! laspe rates janvier -> decembre en deg/km'
145  write(num_rep_42,*)
146
147! pour repasser en deg/m et copier dans lapserate
148  do mo=1,mois
149     lapserate(:,:,mo)=lect_lapse(mo)/1000.
150  enddo
151
152! coefbmshelf coefficient pour la fusion basale sous les ice shelves
153! ici pas d'evolution temporelle donc coefbmshelf est fixe
154  coefbmshelf=1.
155
156end subroutine init_forclim
157
158
159!---------------------------------------------------------------------
160!forcage climatique au cours du temps
161subroutine forclim
162 
163  integer i,j,mo
164
165!  Correction d'altitude pour la temperature y compris sur les lacs
166! Zs est l'altitude de la surface qu'elle soit mer, glace ou lac
167
168  do j=1,ny
169     do i=1,nx
170        ZS(I,J)=max(slv(i,j),S(I,J))
171        do mo=1,mois
172           Tm_surf(i,j,mo)= - lapserate(i,j,mo) * (Zs(i,j)-S0(i,j)) + Tm(i,j,mo) 
173           Pm_surf(i,j,mo)= Pm(i,j,mo)*exp(0.05*(Tm_surf(i,j,mo)-Tm(i,j,mo)))
174        end do
175     end do
176  end do
177
178!print*,'dans climat-forcage-mois aprec correction altitude surface'
179!print*,'Tm_surf et Pm_surf :', Tm_surf(100,100,3), Pm_surf(100,100,3)
180
181
182! Tm_surf dans Tmois pour visibilite dans tous le code
183  Tmois(:,:,:)=tm_surf(:,:,:)
184
185! calcul de Tann et Tjuly pour les sorties :
186  Tann(:,:)=sum(Tmois,dim=3)/12.     ! moy annuelle
187  Tjuly(:,:)=Tmois(:,:,7)            ! temp juillet
188
189  acc(:,:)=sum(Pm_surf,dim=3,mask=Tmois < psolid) ! /12.
190  acc(:,:)=acc(:,:)*1000./ro
191
192END subroutine forclim
193
194
195end module climat_forcage_mois_mod
Note: See TracBrowser for help on using the repository browser.