source: branches/GRISLIv3/SOURCES/3D-physique-gen_mod.f90 @ 468

Last change on this file since 468 was 468, checked in by aquiquet, 4 months ago

Cleaning branch: removing weird useless boolean

File size: 14.8 KB
Line 
1!> \file 3D-physique-gen_mod.f90
2!! Module de declaration des variables generales
3!! de la physique du modele.
4!<
5
6!> \namespace module3D_phy
7!! Module de declaration des variables generales
8!! de la physique du modele.
9!! \author CatRitz
10!! \date 30 juin 2007
11!! @note Used module
12!! @note   - use geography
13!! @note   - use runparam
14!<
15
16module MODULE3D_phy
17
18  ! declaration des variables
19  ! implicit none
20  use geography, only: nx,ny,nz,nzm   ! indirectement donne acces au nx,ny, appropries
21
22  implicit none
23  real, parameter :: PI = 3.1415927
24
25
26  !   **** integer declaration  *************************************
27
28  integer ::  ispinup                   !< pour les differentes etapes du spinup
29  integer ::  err                       !< pour l'allocation des tableaux
30  integer ::  igrdline                  !< si 1 fixe la position en jouant sur la fusion shelf
31  integer ::  ibmelt_inv                !< si 1 inversion du bmelt (avec igrdline=1)
32  integer ::  i_resolmeca               !< defini le type d'association SIA-L1
33  integer ::  inv_beta                  !< 0 : run std, 1 : inversion du beta
34  integer ::  ICOUPLE                   !<
35  integer ::  ICOMPTEUR                 !< reprise fichier cptr
36  integer ::  IOUT                      !< type de fichier de sortie pour reprise
37  integer ::  iglen                     !< compteur pour la boucle flowlaw
38  integer ::  ISYNCHRO                  !< synchronisation pas de temps dt et dtt
39  integer ::  Schoof                    !< 0 : pas de flux de Schoof , 1 : flux de Schoof a la grounding line
40  integer ::  NTMAX                     !<
41
42  integer ::  ITEMP                     !<
43  integer ::  niter_nolin               !< number of velocity iterations for non-linear dragging laws
44  integer ::  ndebug                    !< pour faire des sorties de debug a plusieurs pas de temps
45  integer ::  ndebug_max                !< pour faire des sorties de debug a plusieurs pas de temps
46
47  !     ************ common des scalaires *************************
48
49  real :: coefbmshelf                   !< coef permettant de faire varier la fusion basale :
50
51  real ::  DT                           !< pas de temps court
52  real ::  DTT                          !< pas de temps long
53  real ::  DTMIN                        !< pas de temps mini
54  real ::  DX1                          !< 1/dx
55  real ::  DTDX                         !< dt/dx
56  real ::  dtdx2                        !< dt/dx**2
57  real ::  DTMAX                        !<
58  real ::  SECYEAR                      !< for relation an/seconds
59  real ::  sealevel                     !< niveau des mers, afq: now used as eustatic sea level
60  real (kind=kind(0.d0)) ::  TIME       !< temps : en double precision
61  real ::  TAFOR                        !< temperature forcing : annual
62  real ::  TESTDIAG                     !< for time step calculation (icethick)
63  real ::  V_limit                      !< vitesse maxi (limitateur de flux pour conserv masse)
64  real ::  betamax                      !< (Pa) frottement maxi sous les streams
65
66
67  !     ************** common des caracteres **************
68  !character(len=8), dimension(NPL) :: VARNAME  !
69  character(len=320) :: reprcptr                ! nom du fichier de reprise CPTR
70
71  !     *************** common des tableaux a 1 dimension *****
72  real,dimension(nz) :: e               !< vertical coordinate in ice, scaled to H zeta
73  real,dimension(nz) :: CDE             !< 
74
75  !    ************* common des tableaux a deux dimensions ******
76
77  integer,dimension(nx,ny) :: FRONT     !< point d'un shelf situe sur le front
78  integer,dimension(nx,ny) :: gr_line_schoof ! points ou on impose le flux de schoof (pour sorties)
79  integer,dimension(nx,ny) :: gr_line   !< points grounding line pour les sorties
80  integer,dimension(nx,ny) :: ICE       !< presence de glace au point considere,
81  !< seuil 0 si pose, 1 si flottant
82  integer,dimension(nx,ny) :: MASQUE_BMSHELF !< masque pour determiner a quel bassin oceanique
83  !< appartiennent les points de la grille
84  integer,dimension(nx,ny) :: MK0          !< masks (ice sheet, max, above water, below water, 1)
85  integer,dimension(nx,ny) :: Mk_init      !< initial mask (with islands, outcrops, ...
86  integer,dimension(nx,ny) :: MK           !< masks (ice sheet, max, above water, below water, 1)
87  integer,dimension(nx,ny) :: IBASE     !< type de base (froide, temperee)
88
89  real,dimension(nx,ny) :: ACC          !< Accumulation  'o'
90  real,dimension(nx,ny) :: ABL          !< Ablation  'o'  negative quand perte
91  real,dimension(nx,ny) :: ABLBORD      !< Ablation dans les zones non englacees
92  real,dimension(nx,ny) :: ablbord_dtt  !< Ablation sur le bord de la calotte (flux de glace inférieur à ablation sur le bord) sur dtt
93  double precision,dimension(nx,ny) :: B            !< Altitude de la base de la glace  'o'
94  real,dimension(nx,ny) :: BDOT         !< derivee de B / t
95  double precision,dimension(nx,ny) :: BSOC0        !< ice free bedrock
96  real,dimension(nx,ny) :: betamx       !< coefficient beta du frottement basal, betamx=cf*neffmx et tobmx=betamx*uxbar
97  real,dimension(nx,ny) :: betamy       !< coefficient beta du frottement basal, betamy=cf*neffmy et tobmy=betamy*uybar
98  real, dimension(nx,ny) :: beta_centre !< beta on major node (average)
99  real, dimension(nx,ny) :: betamax_2d  !< (Pa) frottement maxi sous les streams
100  !
101  real,dimension(nx,ny) :: BM           !< mass balance   'o'
102  real,dimension(nx,ny) :: BMELT        !< basal melting  'o'
103  real,dimension(nx,ny) :: CORRBMELT    !< correction du basal melting  'o'
104  real,dimension(nx,ny) :: HWATER       !< hauteur d'eau basale dans le sediment
105  real,dimension(nx,ny) :: COEFMXBMELT  !<
106  real,dimension(nx,ny) :: COEFMYBMELT  !<
107  real,dimension(nx,ny) :: CALV         !< calving
108 
109  real,dimension(nx,ny) :: DDBX         !< UBX/(-SDX) '>'
110  real,dimension(nx,ny) :: DDBY         !< UBY/(-SDY) '^'
111  real,dimension(nx,ny) :: Diffmx       !< partie diffusive en x
112  real,dimension(nx,ny) :: Diffmy       !< partie diffusive en y
113
114  real,dimension(nx,ny) :: DHDT         !< derive lagrangienne de l'epaisseur 'o'
115  real,dimension(nx,ny) :: epsxx     !< vitesse de deformation selon x
116  real,dimension(nx,ny) :: epsyy     !< vitesse de deformation selon y
117  real,dimension(nx,ny) :: epsxy     !< vitesse de deformation selon xy
118  real,dimension(nx,ny) :: eps       !< vitesse de deformation (invariant)
119
120  real,dimension(nx,ny) :: FT           !< proportion of year with air temp below 2C
121  real,dimension(nx,ny) :: FROTMX       !< beta coefficient used in the remplimat routine
122  real,dimension(nx,ny) :: FROTMY       !<
123  real,dimension(nx,ny) :: GHF          !< geothermal heat flux J/m2/a 'o'
124  double precision,dimension(nx,ny) :: H            !< ice thickness  'o'
125  double precision,dimension(nx,ny) :: H0           !< initial ice thickness, must be initialized before init_iso
126
127! dimensionnements qui etaient avant dans H_prescribe
128  real,dimension(nx,ny)    :: Hp           !< H value if prescribed
129  real,dimension(nx,ny)    :: Hp0          !< H value if prescribed (reference value)
130  integer,dimension(nx,ny) :: i_Hp         !< 1 if H is prescribed on this node, else 0
131  integer,dimension(nx,ny) :: i_Hp0        !< i_hp mask reference value does not change with time
132  integer, dimension(nx,ny) :: imx_diag    !< masque pour eq elliptique 
133  integer, dimension(nx,ny) :: imy_diag    !< masque pour eq elliptique
134
135  double precision,dimension(nx,ny) :: HDOT         !< ice thickness derivee / t
136  real,dimension(nx,ny) :: HDOTWATER
137  real,dimension(nx,ny) :: HMX          !< ice thickness moy selon x '>'
138  real,dimension(nx,ny) :: HMY          !< ice thickness moy selon y '^'
139
140  real,dimension(nx,ny) :: PHID         !< flux de chaleur lie a la deformation et glissement basal
141  real,dimension(nx,ny) :: NEFFMX       !< pression effective '>'
142  real,dimension(nx,ny) :: NEFFMY       !< pression effective '^'
143  real,dimension(nx,ny) :: TOBMX        !< cisaillement basal '>'
144  real,dimension(nx,ny) :: TOBMY        !< cisaillement basal '^'
145  double precision,dimension(nx,ny) :: S            !< altitude of ice sheet surface
146  real,dimension(nx,ny) :: sealevel_2d  !< local sea surface elevation
147  real,dimension(nx,ny) :: SLOPE        !< slope 'o'
148  real,dimension(nx,ny) :: SDX          !< slope derivee / x '>'
149  real,dimension(nx,ny) :: SDY          !< slope derivee / y '^'
150  real,dimension(nx,ny) :: SLOPE2mx     !< = Sdx**2 + Sdymx**2 '>'
151  real,dimension(nx,ny) :: SLOPE2my     !< = Sdy**2 + Sdxmy**2 '^'
152  double precision,dimension(nx,ny) :: S0           !< altitude actuelle de la surface
153!afq -- replaced by sealevel_2D:  real,dimension(nx,ny) :: slv          !< niveau de flottaison (sealevel et lakes)
154  real,dimension(nx,ny) :: TJULY        !< Ground air temperature July
155  real,dimension(nx,ny) :: TANN         !< Ground air temperature annual
156  real,dimension(nx,ny,12) :: Tmois        !< Ground air temperature monthly
157  real,dimension(nx,ny) :: TAUB         !< basal shear stress (for output)
158  real,dimension(nx,ny) :: TAUSHELF     !< effective stress in ice shelves (vertical av.)
159  real,dimension(nx,ny) :: TS           !< surface ice temperature  'o'
160  real,dimension(nx,ny) :: TB           !< basal ice temperature  'o'
161  real,dimension(nx,ny) :: TBDOT        !< variation in time of basal temperature
162  real,dimension(nx,ny) :: UZK          !< vertical velocity at the ice surface (kinematic boundary)
163  real,dimension(nx,ny) :: UXBAR        !< vertically integrated velocity '>'
164  real,dimension(nx,ny) :: UYBAR        !< vertically integrated velocity '^'
165  real,dimension(nx,ny) :: uxdef        !< partie due a la deformation
166  real,dimension(nx,ny) :: uydef        !< partie due a la deformation
167  real,dimension(nx,ny) :: uxflgz       !< vitesse stream-shelf
168  real,dimension(nx,ny) :: uyflgz       !< vitesse stream-shelf
169  real,dimension(nx,ny) :: UBX          !< basal sliding '>'
170  real,dimension(nx,ny) :: UBY          !< basal sliding '^'
171  real,dimension(nx,ny) :: UZSDOT       !< variation in time of surface vertical velocity
172  real,dimension(nx,ny) :: XLONG        !< longitude
173  real,dimension(nx,ny) :: YLAT         !< latitude
174  real,dimension(nx,ny) :: xcc          ! grille Xkm
175  real,dimension(nx,ny) :: ycc          ! grille Ykm
176  real,dimension(nx,ny) :: BSOC         !< altitude (ou bathymetrie) du socle 'o'
177  real,dimension(nx,ny) :: PVI          !< viscosite ice shelf
178  real,dimension(nx,ny) :: PVM          !< viscosite ice shelf
179  real,dimension(nx,ny) :: Abar         !< coefficient de Glen integre
180
181
182  ! nouveaux tableaux (aout 2006) pour dragging-sliding
183  ! ces tableaux peuvent avoir des roles differents selon les modules de dragging
184  ! et de sliding utilises. Ils servent a  faire passer des contraintes geographiques entre
185  ! le main et les rounines de sliding-dragging.
186
187  integer,dimension(nx,ny) :: mstream_mx  !< masque stream selon x
188  integer,dimension(nx,ny) :: mstream_my  !< masque stream selon y
189  integer,dimension(nx,ny) :: mstream     !< masque stream sur les noeuds majeurs
190  real,dimension(nx,ny) :: drag_mx        !< coefficient pour tenir compte de variations       
191  real,dimension(nx,ny) :: drag_my        !< geographiques eventuelles dans le basal drag
192
193  !      ********** common des tableaux a 3 dimensions *****
194
195  real,dimension(nx,ny,nz) :: SUX       !<
196  real,dimension(nx,ny,nz) :: SUY       !<
197  real,dimension(nx,ny,nz) :: TPMP      !< pressure melting point temperature in ice sheet 'o'
198  real,dimension(nx,ny,nz) :: UX        !< ice velocity '>'
199  real,dimension(nx,ny,nz) :: UY        !< ice velocity '^'
200  real,dimension(nx,ny,nz) :: UZR       !< ice velocity and derivatives
201  real,dimension(nx,ny,nz) :: ETA       !<
202
203
204  ! tableaux qui permettent de faire facilement des sorties debug via ncdf
205
206  real,dimension(nx,ny) :: debug_2D
207  real,dimension(nx,ny,220) :: debug_3D
208
209  !  tableaux qui permettent de faire des sorties netcdf avec les variables qui ne sont pas globales
210  !  real,dimension(nx,ny,199) :: netcdf_glob           ! pas l'air utilise
211
212
213  !real,dimension(NX,NY,NPL) :: XXX      !< work array, for temperature and output
214
215  real,dimension(nx,ny,nz+nzm) :: T     !< temperature in ice and mantle 'o'
216
217
218
219
220  !======================= common pour l'equilibrage en temperature
221  !real,dimension(NX,NY) :: Uxbilan      ! vitesse de bilan '>'
222  !real,dimension(NX,NY) :: Uybilan      ! vitesse de bilan '^'
223
224
225
226  ! ===================== Booleens ========================================
227  logical,dimension(nx,ny) :: FLOT      !< vrai si flottant (test d'archimede) 'o'
228  logical,dimension(nx,ny) :: FLOTMX    !< if flotting (one neighboord  floats) '>'
229  logical,dimension(nx,ny) :: FLOTMY    !< if flotting (one neighboord  floats) '^' 
230  logical,dimension(nx,ny) :: FRONT_RESC!< comme front (mais boolean) pour remplimat rescue
231  logical,dimension(nx,ny) :: FBM       !<
232  logical,dimension(nx,ny) :: GZMX      !< point stream ">"
233  logical,dimension(nx,ny) :: GZMY      !< point stream "^"
234  logical,dimension(nx,ny) :: FLGZMX    !< points stream ou shelf ou ile (equ. ellpt) ">"
235  logical,dimension(nx,ny) :: FLGZMY    !< points stream ou shelf ou ile (equ ellipt) "^"
236  logical,dimension(nx,ny) :: ILEMX     !< points ile ">"
237  logical,dimension(nx,ny) :: ILEMY     !< points ile "^"
238  logical,dimension(nx,ny) :: fleuvemx  !< actual grounded stream
239  logical,dimension(nx,ny) :: fleuvemy  !< actual grounded stream
240  logical,dimension(nx,ny) :: flot_marais  !< afq -- vrai si flottant et coince entre points poses 'o'
241  logical,dimension(nx,ny) :: iceberg   !< point iceberg
242
243  ! ===================== File id =========================================
244  integer :: num_param     = 10   !< Id of param_list.dat
245  integer :: num_coupe     = 11   !< Id of coupe.ijz
246  integer :: num_vitbil    = 12   !< Id of vitbil
247  integer :: num_newton    = 15   !< Id of corrextion-newton.res
248  integer :: num_file1     = 18   !< Id of
249  integer :: num_file2     = 19   !< Id of
250  integer :: num_forc      = 20   !< Id of forcage
251  integer :: num_dat       = 21   !< Id of dat
252  integer :: num_cptr      = 30   !< Id of cptr
253  integer :: num_debug     = 33   !< Id of ritz debug
254  integer :: num_ritz      = 35   !< Id of ritz
255  integer :: num_templlib  = 36   !< Id of ritz templlib
256  integer :: num_rep_42    = 42   !< Id of reponse
257  integer :: num_trace     = 81   !< Id of trace-reboot
258  integer :: num_file      = 88   !< Id of
259  integer :: num_ts_ritz   = 89
260  integer :: num_kelvin    = 90   !< Id of kelvin.res
261  integer :: num_phil      = 91
262  integer :: num_templin   = 98   !< Id of templin.res
263  integer :: num_sealevel  = 110
264  integer :: num_mk_vitbil = 122  !< Id of masque_vitbil
265  integer :: num_ic_vo     = 171  !< vostok
266  integer :: num_ic_by     = 172  !< byrd
267  integer :: num_ic_dm     = 173  !< dml
268  integer :: num_ic_dc     = 174  !< dome C
269  integer :: num_ic_df     = 175  !< dome Fuji
270  integer :: num_file3     = 993
271  integer :: num_file4     = 995  !< Id of
272  integer :: num_coor      = 2004 !< Id of coord-Ant-40km
273
274  ! Variables communes au main et aux subroutines du step
275  real  :: timemax
276
277end module MODULE3D_PHY
Note: See TracBrowser for help on using the repository browser.