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 | |
---|
16 | module 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 | |
---|
277 | end module MODULE3D_PHY |
---|