source: branches/iLoveclim/SOURCES/Greenmint40_files/lect-greenmint_mod.f90 @ 123

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

initial import GRISLI trunk

File size: 4.5 KB
Line 
1!> \file lect-greenmint_mod.f90
2!!Module pour la lecture de la topography
3!<
4
5!> \namespace lect_topo_greenmint
6!! Module pour la lecture de la topography
7!! \author ...
8!! \date ...
9!! @note Used module
10!! @note   - use module3D_phy
11!<
12
13module lect_topo_greenmint
14
15use module3D_phy
16 
17character(len=100) :: topo_dep       !< Topo de départ
18character(len=100) :: topo_ref       !< Topo de référence
19character(len=100) :: grid_topo      !< fichier grille
20character(len=100) :: filin
21real,dimension(nx,ny) ::  xcc , ycc      !< coordeonnes en m
22real :: ghf0                             !< flux geothermique constant en mW/m2
23
24integer :: n1,n2,ndx
25
26contains
27 
28subroutine input_topo
29
30namelist/topogreen/topo_ref,topo_dep,grid_topo,ghf0
31
32428 format(A)
33
34rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
35read(num_param,topogreen)
36
37write(num_rep_42,428)'!___________________________________________________________' 
38write(num_rep_42,428) '&topogreen                     ! module lect_topo_greenmint'
39write(num_rep_42,'(A,A)')   'topo_ref  =', topo_ref
40write(num_rep_42,'(A,A)')   'topo_dep  =', topo_dep
41write(num_rep_42,'(A,A)')   'grid_topo =', grid_topo
42write(num_rep_42,*)         'ghf0      =', ghf0
43write(num_rep_42,*)'/'                     
44write(num_rep_42,428) '! topo_ref= topo actuelle'
45write(num_rep_42,428) '! ghf0 flux geothermique en mW/m2'
46write(num_rep_42,*)
47
48
49topo_ref=trim(dirnameinp)//trim(topo_ref) 
50topo_dep=trim(dirnameinp)//trim(topo_dep) 
51grid_topo=trim(dirnameinp)//trim(grid_topo)
52
53!     lecture de la topo de référence
54!     -------------------------------
55! Cette topo sert a calculer le socle de reference pour l'isostasie
56! voir init_iso et a avoir une surface de reference pour les temperatures
57
58     open (20,file=topo_ref)
59     read(20,*) n1,n2,ndx
60
61
62     if ((n1.eq.nx).and.(n2.eq.ny).and.(ndx.eq.nint(dx/1000.))) then
63                               ! le fichier correspond bien a
64                               ! la grille definie dans paradim
65         read(20,*)            ! saute la ligne nom des colonnes
66         do J=1,ny 
67          do I=1,nx
68            read (20,*) S0(I,J),H0(I,J),Bsoc0(I,J),precip(i,j)
69
70             S0(i,j)=max(S0(i,j),0.)   ! pour être au niveau des mers
71
72          end do
73        end do
74       
75     else
76        write(6,*) 'le fichier ne correspond pas a la grille definie'
77        STOP
78     end if
79       
80     close(20)
81
82mk0(:,:) = 1                   ! mk0=0 pour les zones interdites
83
84
85
86     
87!     lecture de la topo de depart
88!     ---------------------------
89     open (20,file=topo_dep)
90     read(20,*) n1,n2,ndx
91
92     if ((n1.eq.nx).and.(n2.eq.ny).and.(ndx.eq.nint(dx/1000.))) then
93                               ! le fichier correspond bien a
94                               ! la grille definie dans paradim
95         read(20,*)            ! saute la ligne nom des colonnes     
96         do J=1,ny 
97          do I=1,nx
98              read (20,*) S(I,J),H(I,J),BSOC(I,J)
99              S(i,j)=max(S(i,j),0.)   ! pour etre au niveau des mers : ATTENTION si SEALEV <0
100              H(i,j)=max(H(i,j),1.)   ! pour avoir au moins 1 m
101          end do
102        end do
103 
104     else
105        write(6,*) 'le fichier ne correspond pas a la grille definie'
106        STOP
107     end if
108     close(20)
109
110! calcul de flottaison
111do j=1,ny
112   do i=1,nx
113
114      archim = Bsoc(i,j)+H(i,j)*ro/row -sealevel
115
116      if ((ARCHIM.LT.0.).and.(H(I,J).gt.1.E-3)) then    ! le point flotte
117         flot(i,j)=.true.
118      else
119         flot(i,j)=.false.
120      end if
121   
122   end do
123end do
124
125! lecture des coordonnées geographiques
126
127
128
129! les fichiers EISMINT etaient ranges i,j,lat,lon
130! je n'arrive pas a retrouver la projection exacte.
131! le x est donc calcule en partant de 0, 0
132
133open(unit=20,file=grid_topo,iostat=ios)
134read(20,*) n1,n2,ndx
135 
136     if ((n1.eq.nx).and.(n2.eq.ny).and.(ndx.eq.nint(dx/1000.))) then
137                               ! le fichier correspond bien a
138                               ! la grille definie dans paradim
139         read(20,*)            ! saute la ligne nom des colonnes   
140
141         do k=1,nx*ny
142            read(20,*) i,j,ylat(i,j),xlong(i,j)
143         enddo
144      else
145        write(6,*) 'le fichier ne correspond pas a la grille definie'
146        STOP
147     end if
148     close(20)
149xmin=0.
150ymin=0.
151
152do j=1,ny
153   do i=1,nx
154      xcc(i,j)=xmin+dx*(i-1)
155      ycc(i,j)=ymin+dx*(j-1)
156   end do
157end do
158
159xmax=xcc(nx,ny)/1000.
160ymax=ycc(nx,ny)/1000.
161
162
163!  flux geothermique  : pour passer les flux des mW/m2 aux J/m2/an     
164ghf(:,:)=-secyear/1000.*ghf0
165
166
167
168
169!------------------------------------------------     
170end subroutine input_topo
171
172
173end module lect_topo_greenmint
Note: See TracBrowser for help on using the repository browser.