source: tags/LIM1D_v3.20/SOURCES/source_3.20/ice_phy_ini.f @ 6

Last change on this file since 6 was 6, checked in by vancop, 8 years ago

initial import of v3.20 /Users/ioulianikolskaia/Boulot/CODES/LIM1D/ARCHIVE/TMP/LIM1D_v3.20/

File size: 5.8 KB
Line 
1      SUBROUTINE ice_phy_ini(kideb,kiut, nlay_s, nlay_i)
2
3      ! BIO-LIM1D, 2008 (M. Vancoppenolle)
4      ! update 2014, v3.04
5
6      ! This routine initializes ice variables
7     
8!------------------------------------------------------------------------------!
9
10      INCLUDE 'type.com'
11      INCLUDE 'para.com'
12      INCLUDE 'const.com'
13      INCLUDE 'ice.com'
14      INCLUDE 'thermo.com'
15      INCLUDE 'bio.com'
16
17      CHARACTER(len=10) :: 
18     &   filenc='init.nc'
19
20      REAL(4)        zini(1)  ! forcing field dummy array
21      REAL(4)        zzi(maxnlay), zti(maxnlay), zsi(maxnlay) ! forcing field dummy array
22      REAL(4)        zdsi(maxnlay), zno3(maxnlay), zpo4(maxnlay)
23      REAL(4)        zdaf(maxnlay)
24
25      REAL(8), DIMENSION (maxnlay) :: 
26     &   zsh_i0              ,   !: old ice salt content (ppt.m-2)
27     &   zsh_i1                  !: new ice salt content (ppt.m-2)
28
29      REAL(8), DIMENSION (maxnlay) :: 
30     &   zqh_i0              ,   !: old ice heat content (J.m-2)
31     &   zqh_i1                  !: new ice heat content (J.m-2)
32
33      REAL(8), DIMENSION (maxnlay+2) ::
34     &   zthick0                 !: thickness of old layers
35
36      WRITE(numout,*) ' * ice_phy_ini : '
37      WRITE(numout,*) ' ~~~~~~~~~~~~~~~~'
38      WRITE(numout,*) 
39
40      zeps = 1.0e-10
41      ji = 1
42
43!
44!------------------------------------------------------------------------------|
45!  1) Case of a NETCDF file
46!------------------------------------------------------------------------------|
47!
48      !-----------
49      ! Open file
50      !-----------
51      CALL CF_OPEN  (filenc,id) ! open forcing file
52
53      !-----------
54      ! Read data
55      !-----------
56      zn = 0.0
57      CALL CF_READ1D ( filenc, 'nlay', 1, 1, zini )
58      zn = REAL(zini(1))
59
60      zj_d = 0.0
61      CALL CF_READ1D ( filenc, 'j_d', 1, 1, zini )
62      zj_d = REAL(zini(1))
63
64      CALL CF_READ1D ( filenc, 'h_s', 1, 1, zini)
65      ht_s_b(ji) = REAL(zini(1))
66       
67
68      CALL CF_READ1D ( filenc, 'h_i', 1, 1, zini)
69      ht_i_b(ji) = REAL(zini(1))
70
71      CALL CF_READ1D ( filenc, 't_s', 1, 1, zini)
72      t_s_b(ji,1) = REAL(zini(1))
73
74      CALL CF_READ1D ( filenc, 't_su', 1, 1, zini)
75      t_su_b(ji) = REAL(zini(1))
76
77      DO layer = 1, INT(zn)
78         CALL CF_READ1D ( filenc, 'z_i', layer, 1, zini)
79         zzi(layer) = zini(1)
80         CALL CF_READ1D ( filenc, 't_i', layer, 1, zini)
81         zti(layer) = zini(1)
82         CALL CF_READ1D ( filenc, 's_i', layer, 1, zini)
83         zsi(layer) = zini(1)
84      END DO
85
86      CALL CF_CLOSE (filenc) ! close nc file
87
88      t_bo_b(ji)   =  273.15-tmut*oce_sal 
89
90      !----------------------
91      ! Interpolate profiles
92      !----------------------
93
94            !------
95            ! Snow
96            !------
97            CALL ice_phy_grid(1,1,nlay_s,ht_s_b(ji), .FALSE., "sno" )   ! compute the physical grid
98
99            !-----
100            ! Ice
101            !-----
102            CALL ice_phy_grid(1,1,nlay_i,ht_i_b(ji), .FALSE., "ice" )   ! compute the physical grid
103
104            ! grid indexes for redistribution
105            ntop0  = 1 
106            nbot0  = INT(zn)
107            ntop1  = 1
108            nbot1  = nlay_i
109
110            !--- Salinity
111            zm0(0) = 0.0         ! layer interfaces cotes
112            DO layer = 1, nbot0-1
113               zm0(layer) = REAL( zzi(layer) + zzi(layer+1) ) / 2.
114            END DO
115            zm0(nbot0) = ht_i_b(ji)
116
117            DO layer = 1, nbot0  !layer thickness and salt content
118               zthick0(layer) = zm0(layer)-zm0(layer-1)
119               zsh_i0(layer) = rhog*zthick0(layer)*REAL(zsi(layer)) !mass of salt
120            END DO
121
122            CALL ice_phy_relay( nbot0 , nbot1 , ntop0 , ntop1 , 
123     &                       zthick0, deltaz_i_phy, zsh_i0 , zsh_i1 )
124
125            DO layer = 1, nlay_i
126               s_i_b(ji,layer) = zsh_i1(layer) / 
127     &         (rhog*deltaz_i_phy(layer))
128            END DO
129
130            DO layer = 1, nbot0  ! heat content
131               ztmelts    =   - tmut * REAL(zsi(layer)) + tpw 
132               zq         = rhog * ( cpg * ( ztmelts -REAL(zti(layer)) )
133     &                      + lfus*( 1.0 - (ztmelts-tpw) / 
134     &                        MIN( (REAL( zti(layer) ) -tpw),-zeps) ) 
135     &                      - cpw      * ( ztmelts-tpw  ) ) 
136               zqh_i0(layer) = zq * zthick0(layer)
137           END DO
138           CALL ice_phy_relay( nbot0 , nbot1 , ntop0 , ntop1 , 
139     &                       zthick0, deltaz_i_phy, zqh_i0 , zqh_i1 )
140
141           DO layer = 1, nlay_i
142              zq = zqh_i1(layer) / MAX( deltaz_i_phy(layer) , zeps )
143              ztmelts = -tmut*s_i_b(ji,layer) + tpw
144              aaa = cpg
145              bbb = (cpw-cpg)*(ztmelts-tpw) + zq / rhog - lfus
146              ccc = lfus * (ztmelts-tpw)
147              discrim = SQRT( bbb*bbb - 4.0*aaa*ccc )
148              t_i_b(ji,layer) = tpw + (- bbb - discrim) / ( 2.0*aaa )
149           END DO
150
151!
152!------------------------------------------------------------------------------|
153! x) Write in output file
154!------------------------------------------------------------------------------|
155
156            WRITE(numout,*) ' --- Initial values --- '
157            WRITE(numout,*) ' '
158            WRITE(numout,*) ' Surface temperature t_su : ', t_su_b(ji)
159            WRITE(numout,*) ' Basal   temperature t_bo : ', t_bo_b(ji)
160            WRITE(numout,*) ' Snow temperature    t_s  : ', t_s_b(ji,1)
161            WRITE(numout,*) ' Ice temperatures    t_i  : ', 
162     &                      ( t_i_b(ji,jk), jk = 1, nlay_i )
163            WRITE(numout,*) ' Ice salinities      s_i  : ', 
164     &                      ( s_i_b(ji,jk), jk = 1, nlay_i )
165            WRITE(numout,*) ' Ice thickness       ht_i_b : ', ht_i_b(ji)
166            WRITE(numout,*) ' Snow depth          ht_s_b : ', ht_s_b(ji)
167            WRITE(numout,*) ' '
168
169!------------------------------------------------------------------------------|
170!- end of ice_phy_ini
171!
172      RETURN
173      END
Note: See TracBrowser for help on using the repository browser.