source: branches/GRISLIv3/SOURCES/isostasie_mod-0.3.f90 @ 465

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

Cleaning branch: start cleaning module3D

File size: 4.2 KB
Line 
1!> \file isostasie_mod-0.3.f90
2!!Package isostasie
3!<
4
5!> \namespace isostasie_mod
6!! Module pour le calcul de l'isostasie
7!! \author ...
8!! \date ...
9!! @note Used modules
10!! @note    - use iso_declar
11!! @note    - use module3D_phy
12!! @note    - use param_phy_mod
13!<
14
15
16
17module isostasie_mod
18 
19   use iso_declar,only: nbed 
20
21contains
22
23!> SUBROUTINE: init_iso
24!! Routine qui permet d'initialiser les variables
25!>
26  subroutine init_iso ! routine qui permet d'initialiser les variables
27
28    use iso_declar,only: nlith,dt_iso,tausoc,dl,rl,lbloc,we,charge
29    use module3D_phy, only: icouple,marine,err,h0,bsoc0,sealevel_2d,w0,w1
30    use geography, only: geoplace,nx,ny,dx,dy
31    use param_phy_mod, only: ro,row,rog,rowg,romg
32
33    implicit none
34
35    !     nbed=0 pas d'isostasie
36    !     nbed=1 temps de reaction
37
38    integer :: i,j
39
40    if (GEOPLACE.eq.'eismint') then
41       NBED=0
42       NLITH=0
43    else if (GEOPLACE(1:6).eq.'marine') then
44       NBED=1
45       NLITH=1
46    else if ((geoplace.eq.'anteis1').or.(geoplace.eq.'ant20km')) then
47
48       if (icouple.eq.2) then
49          NBED=0
50          NLITH=0
51          if (marine) then
52             NBED=1
53             NLITH=1
54          endif
55       else
56          NBED=1
57          NLITH=1
58       endif
59    else
60       NBED=1
61       !       switch sur la lithosphere
62       NLITH=1
63    endif
64
65    !      temps de reaction en annees
66    if (NBED.eq.1) tausoc=3000
67
68    if (NLITH.eq.1) then
69       !        DL lithosphere flexural rigidity (N.m)
70       DL=9.87E24
71       !        radius of relative stiffness  (metre)
72       RL=131910.
73       !        LBLOC, 400 km de part et d'autre
74       LBLOC=int((400000.-0.1)/DX)+1
75       !         LBLOC=int((480000.-0.1)/DX)+1
76       !         LBLOC=int(400000./DX)+1
77
78
79       !******** allocation des tableaux en fonction de la valeur de LBLOC *****
80
81       if (.not.allocated(WE)) then
82          allocate(WE(-LBLOC:LBLOC,-LBLOC:LBLOC),stat=err)
83          if (err/=0) then
84             print *,"Erreur a l'allocation du tableau WE",err
85             stop 4
86          end if
87       end if
88       !    PRINT*,'shape(we)',SHAPE(we),'lbloc',lbloc
89
90       if (.not.allocated(CHARGE)) then
91          allocate(CHARGE(1-LBLOC:NX+LBLOC,1-LBLOC:NY+LBLOC),stat=err)
92          if (err/=0) then
93             print *,"Erreur a l'allocation du tableau CHARGE",err
94             stop 4
95          end if
96       end if
97       !********* FIN DE L'ALLOCATION DES TABLEAUX ***********
98       call tab_litho
99    end if
100
101    !******** initialisation de CHARGE ***********
102
103    !       pour calcul du socle initial on calcule la charge
104    !       avec l'etat initial suppose en equilibre S0, H0, Bsoc0
105
106    do i=1,nx
107       do j=1,ny
108          if (ro*h0(i,j).ge.-row*(BSOC0(i,j)-sealevel_2d(i,j))) then
109
110             !        glace ou terre
111             charge(i,j)=rog*h0(i,j)
112
113          else
114             !        ocean
115             charge(i,j)=-rowg*(Bsoc0(i,j)-sealevel_2d(i,j))
116          endif
117       end do
118    end do
119
120    do j=1,ny  ! parties de charge a l'exterieure de la grille
121       charge(1-lbloc:0,j)=charge(1,j)
122       charge(nx+1:nx+lbloc,j)=charge(nx,j)
123    end do
124    do i=1,nx
125       charge(i,1-lbloc:0)=charge(i,1)
126       charge(i,ny+1:ny+lbloc)=charge(i,ny)
127    end do
128
129    do j=1,ny  ! parties de charge a l'exterieure de la grille
130       charge(1-lbloc:0,j)=charge(1,j)
131       charge(nx+1:nx+lbloc,j)=charge(nx,j)
132    end do
133    do i=1,nx
134       charge(i,1-lbloc:0)=charge(i,1)
135       charge(i,ny+1:ny+lbloc)=charge(i,ny)
136    end do
137    charge(1-lbloc:0,1-lbloc:0)=charge(1,1) !valeurs aux quatres coins
138    charge(1-lbloc:0,ny+1:ny+lbloc)=charge(1,ny) ! exterieurs au domaine
139    charge(nx+1:nx+lbloc,1-lbloc:0)=charge(nx,1)
140    charge(nx+1:nx+lbloc,ny+1:ny+lbloc)=charge(nx,ny)
141
142    !     deflection de la lithosphere
143    if (nlith.eq.1) then
144
145       call litho
146
147       do j=1,ny
148          do i=1,nx
149             w0(i,j)=w1(i,j)
150          end do
151       end do
152    else
153       do j=1,ny
154          do i=1,nx
155             w0(i,j)=charge(i,j)/romg
156          end do
157       end do
158    end if
159
160    dt_iso = 50.
161
162  end subroutine init_iso
163
164
165
166!> SUBROUTINE: bedrock
167!! Routine qui calcule l'isostasie
168!>
169
170subroutine bedrock
171  call taubed  ! routine qui calcule l'isostasie
172end subroutine bedrock
173
174end module isostasie_mod
Note: See TracBrowser for help on using the repository browser.