source: trunk/00FlowSolve_PL/PROJECTS/NEW_SRC/set_ambient_stratification.f90

Last change on this file was 11, checked in by xlvlod, 18 years ago

Import initial

File size: 5.7 KB
Line 
1!============================================================================
2! SET_AMBIENT_STRATIFICATION
3! FUNCTION TO DEFINE s1_bar [K] & s2_bar [ppt]
4subroutine set_ambient_stratification
5
6  ! routine to set the ambient profiles for the scalars s1 and s2
7  ! where total_s1 = s1_bar(x,z) + s1(x,y,z,t)
8  ! and   total_s2 = s2_bar(x,z) + s2(x,y,z,t)
9
10  use grid_info
11  use user_parameters       ! for z_N,z_N_scale,Smax,Smin,Tmax,Tmin,dTdz
12  use dependent_variables   ! s1_bar, s2_bar,rho_bar
13  use dimensional_scales    ! s1_scale, s2_scale
14  use counters_flags_etc
15  use mpi_parameters
16  implicit none
17  include '../input/problem_size.h'
18  include 'mpif.h'
19
20!!! local variables
21  real        :: xpos,zpos,Temp,Salinity
22  integer     :: kglobal
23  real,dimension(:,:),allocatable :: tabforcing
24
25
26  print*,'Ambient_stratification, Lz',Lz 
27
28  if ( pomme_data_flag == 'no') then
29
30
31     !!! these are just values pulled out of a hat for testing
32     Smax =  35.0          ! [psu]
33     Smin =  35.0          ! [psu]
34     Tmax =  15.0          ! [deg C]
35     Tmin =  10.0          ! [deg C]   !!! must be the same as T0 in EOS.f90
36
37     !!! defined in params.h
38     !!! dTdz=1.4133829e-3*4
39
40     !!! we'll use s1 for temperature (deg C) and s2 for salinity (g/kg or ppt)
41     ! both of these test profiles are stable
42     do k=1,locnz
43        do i=1,nx
44
45           zpos = Grid(0)%z(i,k)*L_scale     ! [m]
46           Salinity= Smin + (Smax-Smin)/Lz * zpos
47           Temp    = Tmin + dTdz * zpos             !!!!!(Tmax-Tmin)/Lz * zpos
48
49           s1_bar(i,k) = Temp / s1_scale       
50           s2_bar(i,k) = Salinity / s2_scale
51
52        enddo
53     enddo
54
55  else
56
57     !!! xlv lecture profil vertical [T,S] POMME
58     !============================================
59     allocate (tabforcing(nz,2))
60
61     if(myid==0) write(0,*) '... Reading POMME data into file : '
62     if(myid==0) print*,'   --> ',trim(pomme_filename)
63     open(911,file=pomme_filename,status='old')
64     do k=1,nz
65        read(911,*) tabforcing(k,1),tabforcing(k,2)
66     enddo
67     close(911)
68
69     do k=1,locnz
70        do i=1,nx
71           kglobal = k + myid*locnz
72           s1_bar(i,k)=tabforcing(kglobal,1)
73           s2_bar(i,k)=tabforcing(kglobal,2)
74        enddo
75     enddo
76
77     s1_bar = s1_bar / s1_scale 
78     s2_bar = s2_bar / s2_scale 
79
80     if(myid==0) write(0,*) '... POMME data saved....'
81
82     deallocate( tabforcing )
83     !===================================
84
85  endif
86
87
88  print*,'MINVAL(T)=',minval(s1_bar),'MAXVAL(T)=',maxval(s1_bar)
89  print*,'MINVAL(S)=',minval(s2_bar),'MAXVAL(S)=',maxval(s2_bar)
90
91
92
93  return
94end subroutine set_ambient_stratification
95!============================================================================
96
97
98
99!=============================================================================
100!  TEMPD
101!  FUNCTION TO GET INTERPOLATED VALUE OF TEMP FROM GRIDDED DATA
102!
103      REAL FUNCTION TEMPD(ZK)
104!
105      PARAMETER(NT=23)
106!
107      REAL ZK
108!
109      REAL ZD(NT),TD(NT)
110!
111      DATA IZTOPT/NT/
112!
113!!!      DATA ZD/-60.,-55.,-50.,-47.2,-45.,-44.3,-42.2,-40.,-38.5,-35., &
114!!!      -34.5,-32.5,-30.,-28.9,-27.4,-25.,-24.1,-20.,-17.6,-15.,-10., &
115!!!      -5.,0./
116      DATA ZD/0.,5.,10.,12.8,15.,15.7,17.8,20.,21.5,25.,25.5,27.5,30.,31.1, &
117              32.6,35.,35.9,40.,42.4,45.,50.,55.,60./
118      DATA TD/-1.15,-1.15,-1.15,-1.05,-1.16,-1.18,-0.92,-0.73,-0.55, &
119      -0.05,-0.02,-0.10,-0.28,-0.45,-0.70,-1.26,-1.43,-1.58,-1.61, &
120      -1.61,-1.62,-1.62,-1.62/
121!
122!!!      ZD(:) = 60. + ZD(:)
123      TEMPD = FK(ZK,ZD,TD,NT,IZTOPT)
124!
125      RETURN
126      END
127!==============================================================================
128
129
130
131!============================================================================
132!  SALTD
133!  FUNCTION TO GET INTERPOLATED VALUE OF SALINITY FROM GRIDDED DATA
134!
135      REAL FUNCTION SALTD(ZK)
136!
137      PARAMETER(NS=20)
138!
139      REAL ZK
140!
141      REAL ZD(NS),SD(NS)
142!
143      DATA IZTOPS/NS/
144!
145!!!      DATA ZD/-60.,-55.,-50.,-47.1,-45.,-43.3,-40.,-37.9,-35.,-32.7, &
146!!!      -30.,-28.9,-27.8,-25.,-24.3,-20.,-15.,-10.,-5.,0./
147      DATA ZD/0.,5.,10.,12.9,15.,16.7,20.,22.1,25.,27.3,30.,31.1,32.2, &
148              35.,35.7,40.,45.,50.,55.,60./
149      DATA SD/31.83,31.83,31.83,31.82,31.78,31.75,31.72,31.68,31.58, &
150      31.53,31.44,31.38,31.27,30.96,30.87,30.80,30.79,3*30.78/
151!
152!!!      ZD(:) = 60. + ZD(:)
153      SALTD = FK(ZK,ZD,SD,NS,IZTOPS)
154!
155      RETURN
156      END
157!=============================================================================
158
159
160
161!==============================================================================
162!  FK
163!  FK IS A FUNCTION THAT USES LINEAR INTERPOLATION TO FIND  FK,
164!  GIVEN  ZK  AND THE ARRAYS  Z  AND  F. FOR EXAMPLE, IN ROUTINE
165!  DERIVS,  BVF = FK(ALT,BVFZ,BVFF)  WILL BE USED TO GET  BVF  AT  ALT
166!  FROM THE ARRAYS  BVFZ  AND  BVFF.
167      REAL FUNCTION FK(ZK,Z,F,NZ,IZTOP)
168      REAL Z(*), F(*)
169!
170!  MAKE SURE Z(IZTOP) .GE. ZK
171!!      PRINT 99, zk,nz,iztop
172!!   99 FORMAT('zk,nz,iztop = ',1pe15.5,2i15)
173    5 CONTINUE
174      IF(ZK.GT.Z(IZTOP)) THEN
175         IZTOP = IZTOP + 1
176         IF(IZTOP.GT.NZ) THEN
177            WRITE(2,9) ZK,Z(NZ)
178    9       FORMAT(' ZK TOO HIGH. ZK,Z(NZ) = ',2(1PE15.5))
179            CLOSE(2)
180            CLOSE(3)
181            STOP
182         ENDIF
183         GO TO 5
184      ENDIF
185!
186      IF(ZK.EQ.Z(IZTOP)) THEN
187         FK = F(IZTOP)
188         RETURN
189      ENDIF
190!
191!  FIND IZK SUCH THAT  Z(IZK) .GT. ZK .GE. Z(IZK-1)
192      DO 100 IZ=IZTOP,2,-1
193      IZM1 = IZ - 1
194      IF(Z(IZ).GT.ZK .AND. ZK.GE.Z(IZM1)) THEN
195         ZRATIO = (ZK - Z(IZM1)) / (Z(IZ) - Z(IZM1))
196         FK = F(IZM1) + ZRATIO * (F(IZ) - F(IZM1))
197         IZTOP = IZM1 + 1
198         RETURN
199      ENDIF
200  100 CONTINUE
201!
202!  ZK TOO LOW
203      WRITE(2,109) ZK,Z(1)
204  109 FORMAT(' ZK TOO LOW. ZK,Z(1) = ',2(1PE15.5))
205      CLOSE(2)
206      CLOSE(3)
207      STOP
208!
209      END
210!
Note: See TracBrowser for help on using the repository browser.