source: trunk/SOURCES/Grismip6_files/lect-grismip6_mod.f90 @ 334

Last change on this file since 334 was 271, checked in by aquiquet, 5 years ago

Further computations of mass conservation in double precision for small timesteps

File size: 3.3 KB
Line 
1module lect_topo_grismip6
2
3  use module3D_phy
4  use interface_input
5  use io_netcdf_grisli
6
7  implicit none
8 
9  character(len=100) :: topo_dep       ! Topo de départ
10  character(len=100) :: topo_ref       ! Topo de référence
11  character(len=100) :: ghf_fich       ! geothermal heat flux
12  character(len=100) :: lon_fich       ! longitude
13  character(len=100) :: lat_fich       ! latitude
14  character(len=80) :: filin
15  character(len=100) :: file_ncdf      !< fichier netcdf issue des fichiers .dat
16
17  real,dimension(nx,ny) :: varloc
18
19contains
20 
21subroutine input_topo
22
23  integer :: ios
24
25  namelist/topo_file_grismip6/topo_ref,topo_dep,ghf_fich,lon_fich,lat_fich
26  rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
27  read(num_param,topo_file_grismip6)
28
29  write(num_rep_42,'(A)')'!___________________________________________________________' 
30  write(num_rep_42,'(A)') '&topo_file                                  ! nom du bloc '
31  write(num_rep_42,*)
32  write(num_rep_42,'(A,A,A)') 'topo_ref = "',trim(topo_ref),'"'
33  write(num_rep_42,'(A,A,A)') 'topo_dep = "',trim(topo_dep),'"'
34  write(num_rep_42,'(A,A,A)') 'ghf_fich = "',trim(ghf_fich),'"'
35  write(num_rep_42,'(A,A,A)') 'lon_fich = "',trim(lon_fich),'"'
36  write(num_rep_42,'(A,A,A)') 'lat_fich = "',trim(lat_fich),'"'
37  write(num_rep_42,*)'/'                     
38  write(num_rep_42,'(A)') '! topo_ref= topo ref isostasie'
39  write(num_rep_42,'(A)') '! topo_dep= topo de depart'
40  write(num_rep_42,'(A)') '! ghf_fich  : fichier flux geothermique'
41  write(num_rep_42,'(A)') '! lon_fich  : fichier longitude'
42  write(num_rep_42,'(A)') '! lat_fich  : fichier latitude'
43 
44  write(num_rep_42,*)
45
46  topo_ref=trim(dirnameinp)//trim(topo_ref) 
47  topo_dep=trim(dirnameinp)//trim(topo_dep) 
48  ghf_fich=trim(dirnameinp)//trim(ghf_fich)
49  lon_fich=trim(dirnameinp)//trim(lon_fich)
50  lat_fich=trim(dirnameinp)//trim(lat_fich)
51
52!     lecture de la topo de référence
53  call lect_input(1,'Bsoc',1,varloc,topo_ref,file_ncdf)    ! socle
54  Bsoc0(:,:)=varloc(:,:)
55  call lect_input(1,'S',1,varloc,topo_ref,file_ncdf)          ! surface
56  S0(:,:)=varloc(:,:)
57  call lect_input(1,'H',1,varloc,topo_ref,file_ncdf)          ! epaisseur
58  H0(:,:)=varloc(:,:)
59  H0(:,:)=max(0.,H0(:,:))
60  where(H0(:,:).le.20) H0(:,:)=0
61
62
63!     lecture de la topo de départ
64  call lect_input(1,'Bsoc',1,varloc,topo_dep,file_ncdf)    ! socle
65  Bsoc(:,:)=varloc(:,:)
66  call lect_input(1,'S',1,varloc,topo_dep,file_ncdf)          ! surface
67  S(:,:)=varloc(:,:)
68  call lect_input(1,'H',1,varloc,topo_dep,file_ncdf)          ! epaisseur
69  H(:,:)=varloc(:,:)
70  H(:,:)=max(0.,H(:,:))
71  where(H(:,:).le.20) H(:,:)=0
72
73! determination des flot
74  do j=1,ny
75     do i=1,nx
76        if ((bsoc(i,j)+h(i,j)*ro/row -sealevel_2d(i,j)).LT.0.) then
77           flot(i,j)=.TRUE.
78        else
79           flot(i,j)=.FALSE.
80        endif
81     enddo
82  enddo
83
84  xmin=-720000./1000.
85  ymin=-3450000./1000.
86  xmax=-960000./1000.
87  ymax=-570000./1000.
88                       
89  call lect_input(1,'ghf',1,ghf,ghf_fich,file_ncdf)
90
91! pour passer les flux des W/m2 au J/m2/an     
92  ghf(:,:)=-SECYEAR*ghf(:,:)
93 
94!------------------------------------------------
95! pour l'Hemisphere Nord mko vrai partout (version 2006)
96  MK0(:,:)=1
97
98!------------------------------------------------     
99end subroutine input_topo
100
101end module lect_topo_grismip6
Note: See TracBrowser for help on using the repository browser.