source: trunk/SOURCES/deformation_mod_2lois_isotherme.f90 @ 4

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

initial import GRISLI trunk

File size: 6.0 KB
Line 
1!> \file deformation_mod_2lois.f90
2!! C'est ce module qui doit etre selectionne pour faire le calcul de la deformation de la glace 
3!! en utilisant une loi de deformation polynomiale
4!! a deux composantes (habituellement n=3 + n=1)
5!!
6!<
7
8!> \namespace deformation_mod_2lois
9!! C'est ce module qui doit etre selectionne pour faire le calcul de la
10!! deformation de la glace en utilisant une loi de deformation polynomiale
11!! a deux composantes (habituellement n=3 + n=1)
12!! \author CatRitz
13!! \date decmebre 2008
14!! @note Used modules
15!! @note  - use module3D_phy
16!! @note  Contient :
17!! @note  - les declarations des tableaux (etait avant dans deform_declar)
18!! en fait la declaration est independante du nombre d'elements de la loi
19!! et peut etre simplement copie pour un autre nombre
20!! @note  - lecture des valeurs utilisees par namelist
21!! N'est valable que pour la loi a 2 composants. Pour un nombre different de composants,
22!! le recopier et modifier
23!! @note  -  les parameters n1poly et n2poly
24!! @note  -  init_deformation en ajoutant ou supprimant des blocs de namelist
25!!
26!<
27module deformation_mod_2lois_isoth
28
29use module3d_phy
30implicit none
31
32
33! declarations ne dependant pas du nombre de lois
34
35real, dimension(nx,ny,nz)   :: visc           !< viscosite de la glace (pour les shelves)
36real, dimension(nz)         :: edecal         !< travail (decalage de E de 1 indice)
37
38! declaration des lois
39! la valeur de n1poly et de n2poly determine le nombre de lois additionnees
40
41integer, parameter :: n1poly=1     !< 2 lois numerotees de 1 a 2
42integer, parameter :: n2poly=2
43
44
45! Tous les parametres de la loi sous forme de tableau (n1poly:n2poly)
46
47real, dimension(n1poly:n2poly) :: glen             !< l'exposant
48real, dimension(n1poly:n2poly) :: sf               !< softening factor for flow law
49real, dimension(n1poly:n2poly) :: B_isoth          !< coefficient
50
51
52
53
54! declaration des tableaux utilises dans le calcul des vitesses, viscosites, ...
55
56real, dimension(nx,ny,nz,n1poly:n2poly) :: Btt     !< coefficient au point considere
57real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa      !< sert dans l'integration des vitesses
58real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa_mx   !< Sa sur demi mailles >
59real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa_my   !< Sa sur demi mailles ^
60real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a     !< sert dans l'integration des vitesses
61real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a_mx  !< S2a sur demi mailles >
62real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a_my  !< S2a sur demi mailles ^
63real, dimension(nx,ny,n1poly:n2poly)    :: ddx     !< sert dans le calcul de conserv. masse
64real, dimension(nx,ny,n1poly:n2poly)    :: ddy     !< sert dans le calcul de conserv. masse
65
66real                                    :: de= 1./(nz-1)
67
68
69
70
71contains
72
73!-------------------------------------------------------------------------------------------
74
75!> SUBROUTINE: init_deformation
76!! Routine qui lit les variables de deformation
77!>
78subroutine init_deformation 
79
80real :: exposant_1
81real :: enhanc_fact_1
82real :: coef_iso_1
83
84real :: exposant_2
85real :: enhanc_fact_2
86real :: coef_iso_2
87
88
89namelist/loidef_1_iso/exposant_1,enhanc_fact_1,coef_iso_1
90namelist/loidef_2_iso/exposant_2,enhanc_fact_2,coef_iso_2
91
92
93! loi 1
94!--------------------------------------------------------------------------------
95
96rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
97read(num_param,loidef_1_iso)
98
99write(num_rep_42,*)'!___________________________________________________________' 
100write(num_rep_42,*)'! loi de deformation 1    module deformation_mod_2lois_isoth'
101write(num_rep_42,*)
102write(num_rep_42,loidef_1_iso)
103write(num_rep_42,*)'! exposant (glen), coefficient et enhancement factor (sf)   '
104write(num_rep_42,*)'!___________________________________________________________' 
105
106glen(1)    = exposant_1 
107sf(1)      = enhanc_fact_1 
108B_isoth(1) = coef_iso_1*2.*secyear
109write(6,*) 'loi de deformation B=',B_isoth(1)
110write(6,*) 'gamma=', rog*(1.-ro/row)
111write(6,*) 'epsilon = coef1 * H^3,   coef1 =',B_isoth(1)/2.*(rog*(1.-ro/row)/4.)**3
112write(6,*) 'pvi = coef2 /H,          coef2 =',(4./(rog*(1.-ro/row)))**2 / B_isoth(1)
113
114! loi 2
115!--------------------------------------------------------------------------------
116 
117rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
118read(num_param,loidef_2_iso)
119
120write(num_rep_42,*)'!___________________________________________________________' 
121write(num_rep_42,*)'! loi de deformation 2    module deformation_mod_2lois_isoth'
122write(num_rep_42,*)
123write(num_rep_42,loidef_2_iso)
124write(num_rep_42,*)'! exposant (glen), coefficient et enhancement factor (sf)   '
125write(num_rep_42,*)'!___________________________________________________________' 
126
127glen(2)    = exposant_2 
128sf(2)      = enhanc_fact_2 
129B_isoth(2) = coef_iso_2
130
131! calcul coordonnées reduites
132
133e(1)=0.
134e(nz)=1.
135do k=1,nz
136   if ((k.ne.1).and.(k.ne.nz)) e(k)=(k-1.)/(nz-1.)
137end do
138
139do iglen= n1poly,n2poly
140   call flowlaw(iglen)
141end do
142
143ddx(:,:,:)=0.
144ddy(:,:,:)=0.
145
146
147end subroutine init_deformation
148
149
150!--------------------------------------------------------------------------------
151subroutine flow_general  ! fake
152end subroutine flow_general
153
154!--------------------------------------------------------------------------------
155! application des sf et calcul des btt, Sa, ...
156! Tous independants de x et y
157
158subroutine flowlaw (iiglen)
159
160  implicit none
161  integer ::  iiglen   !< compteur pour la boucle flowlaw
162  real    :: n1        !< glen+1
163  real    :: n2        !< glen+2
164
165
166
167  B_isoth(iiglen)    =  B_isoth(iiglen)*sf(iiglen)
168  Btt(:,:,:,iiglen)  =  B_isoth(iiglen)
169  n1                 =  glen(iiglen)+1.
170  n2                 =  glen(iiglen)+2.
171 
172
173  do k = 1,nz
174     Sa (:,:,k,iiglen)    =  B_isoth(iiglen)/n1 * (1.-e(k)**n1 )
175     S2a(:,:,k,iiglen)    =  B_isoth(iiglen)/n2 * (1+ (e(k)**n2-n2*e(k))/n1 ) 
176  end do
177  Sa_mx(:,:,:,iiglen)  =  Sa (:,:,:,iiglen)
178  Sa_my(:,:,:,iiglen)  =  Sa (:,:,:,iiglen)
179  S2a_mx(:,:,:,iiglen) =  S2a (:,:,:,iiglen)
180  S2a_my(:,:,:,iiglen) =  S2a (:,:,:,iiglen)
181
182end subroutine flowlaw
183
184end module deformation_mod_2lois_isoth
185
186
Note: See TracBrowser for help on using the repository browser.