source: branches/GRISLIv3/SOURCES/deformation_mod_2lois_isotherme.f90 @ 425

Last change on this file since 425 was 391, checked in by dumas, 16 months ago

use only in deformation_mod_2lois_isoth : compile but not tested in a simulation

File size: 6.4 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
29  use module3d_phy, only:nx,ny,nz,e,num_param,num_rep_42,secyear,iglen
30  use param_phy_mod, only: rog,ro,row
31 
32  implicit none
33
34
35  ! declarations ne dependant pas du nombre de lois
36
37  real, dimension(nx,ny,nz)   :: visc           !< viscosite de la glace (pour les shelves)
38  real, dimension(nz)         :: edecal         !< travail (decalage de E de 1 indice)
39
40  ! declaration des lois
41  ! la valeur de n1poly et de n2poly determine le nombre de lois additionnees
42
43  integer, parameter :: n1poly=1     !< 2 lois numerotees de 1 a 2
44  integer, parameter :: n2poly=2
45
46
47  ! Tous les parametres de la loi sous forme de tableau (n1poly:n2poly)
48
49  real, dimension(n1poly:n2poly) :: glen             !< l'exposant
50  real, dimension(n1poly:n2poly) :: sf               !< softening factor for flow law
51  real, dimension(n1poly:n2poly) :: B_isoth          !< coefficient
52
53
54
55
56  ! declaration des tableaux utilises dans le calcul des vitesses, viscosites, ...
57
58  real, dimension(nx,ny,nz,n1poly:n2poly) :: Btt     !< coefficient au point considere
59  real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa      !< sert dans l'integration des vitesses
60  real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa_mx   !< Sa sur demi mailles >
61  real, dimension(nx,ny,nz,n1poly:n2poly) :: Sa_my   !< Sa sur demi mailles ^
62  real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a     !< sert dans l'integration des vitesses
63  real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a_mx  !< S2a sur demi mailles >
64  real, dimension(nx,ny,nz,n1poly:n2poly) :: S2a_my  !< S2a sur demi mailles ^
65  real, dimension(nx,ny,n1poly:n2poly)    :: ddx     !< sert dans le calcul de conserv. masse
66  real, dimension(nx,ny,n1poly:n2poly)    :: ddy     !< sert dans le calcul de conserv. masse
67
68  real                                    :: de= 1./(nz-1)
69
70
71
72
73contains
74
75  !-------------------------------------------------------------------------------------------
76
77  !> SUBROUTINE: init_deformation
78  !! Routine qui lit les variables de deformation
79  !>
80  subroutine init_deformation 
81
82    integer :: k
83    real :: exposant_1
84    real :: enhanc_fact_1
85    real :: coef_iso_1
86
87    real :: exposant_2
88    real :: enhanc_fact_2
89    real :: coef_iso_2
90
91
92    namelist/loidef_1_iso/exposant_1,enhanc_fact_1,coef_iso_1
93    namelist/loidef_2_iso/exposant_2,enhanc_fact_2,coef_iso_2
94
95
96    ! loi 1
97    !--------------------------------------------------------------------------------
98
99    rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
100    read(num_param,loidef_1_iso)
101
102    write(num_rep_42,*)'!___________________________________________________________' 
103    write(num_rep_42,*)'! loi de deformation 1    module deformation_mod_2lois_isoth'
104    write(num_rep_42,*)
105    write(num_rep_42,loidef_1_iso)
106    write(num_rep_42,*)'! exposant (glen), coefficient et enhancement factor (sf)   '
107    write(num_rep_42,*)'!___________________________________________________________' 
108
109    glen(1)    = exposant_1 
110    sf(1)      = enhanc_fact_1 
111    B_isoth(1) = coef_iso_1*2.*secyear
112    write(6,*) 'loi de deformation B=',B_isoth(1)
113    write(6,*) 'gamma=', rog*(1.-ro/row)
114    write(6,*) 'epsilon = coef1 * H^3,   coef1 =',B_isoth(1)/2.*(rog*(1.-ro/row)/4.)**3
115    write(6,*) 'pvi = coef2 /H,          coef2 =',(4./(rog*(1.-ro/row)))**2 / B_isoth(1)
116
117    ! loi 2
118    !--------------------------------------------------------------------------------
119
120    rewind(num_param)        ! pour revenir au debut du fichier param_list.dat
121    read(num_param,loidef_2_iso)
122
123    write(num_rep_42,*)'!___________________________________________________________' 
124    write(num_rep_42,*)'! loi de deformation 2    module deformation_mod_2lois_isoth'
125    write(num_rep_42,*)
126    write(num_rep_42,loidef_2_iso)
127    write(num_rep_42,*)'! exposant (glen), coefficient et enhancement factor (sf)   '
128    write(num_rep_42,*)'!___________________________________________________________' 
129
130    glen(2)    = exposant_2 
131    sf(2)      = enhanc_fact_2 
132    B_isoth(2) = coef_iso_2
133
134    ! calcul coordonnées reduites
135
136    e(1)=0.
137    e(nz)=1.
138    do k=1,nz
139       if ((k.ne.1).and.(k.ne.nz)) e(k)=(k-1.)/(nz-1.)
140    end do
141
142    do iglen= n1poly,n2poly
143       call flowlaw(iglen)
144    end do
145
146    ddx(:,:,:)=0.
147    ddy(:,:,:)=0.
148
149
150  end subroutine init_deformation
151
152
153  !--------------------------------------------------------------------------------
154  subroutine flow_general  ! fake
155  end subroutine flow_general
156
157  !--------------------------------------------------------------------------------
158  ! application des sf et calcul des btt, Sa, ...
159  ! Tous independants de x et y
160
161  subroutine flowlaw (iiglen)
162
163    implicit none
164    integer :: k
165    integer ::  iiglen   !< compteur pour la boucle flowlaw
166    real    :: n1        !< glen+1
167    real    :: n2        !< glen+2
168
169
170
171    B_isoth(iiglen)    =  B_isoth(iiglen)*sf(iiglen)
172    Btt(:,:,:,iiglen)  =  B_isoth(iiglen)
173    n1                 =  glen(iiglen)+1.
174    n2                 =  glen(iiglen)+2.
175
176
177    do k = 1,nz
178       Sa (:,:,k,iiglen)    =  B_isoth(iiglen)/n1 * (1.-e(k)**n1 )
179       S2a(:,:,k,iiglen)    =  B_isoth(iiglen)/n2 * (1+ (e(k)**n2-n2*e(k))/n1 ) 
180    end do
181    Sa_mx(:,:,:,iiglen)  =  Sa (:,:,:,iiglen)
182    Sa_my(:,:,:,iiglen)  =  Sa (:,:,:,iiglen)
183    S2a_mx(:,:,:,iiglen) =  S2a (:,:,:,iiglen)
184    S2a_my(:,:,:,iiglen) =  S2a (:,:,:,iiglen)
185
186  end subroutine flowlaw
187
188end module deformation_mod_2lois_isoth
189
190
Note: See TracBrowser for help on using the repository browser.