Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/post/src/sico2elmer/sico2elmer.f90
3204 views
1
!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
! Main prog
3
!++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4
!
5
PROGRAM sico2elmer
6
IMPLICIT NONE
7
8
INTEGER :: &
9
noption=999, i, j, k, flag = 1, ndata, istat, imax,jmax,kcmax,ktmax,krmax, gotit
10
REAL ::&
11
deform, Dx=0.0e0, time_gr, H_R_gr, YEAR_SEC = 31556926.0
12
CHARACTER :: &
13
runname * 5, ergnum * 5, rname * 5, enum * 5, grid
14
LOGICAL :: &
15
dataread=.FALSE.
16
INTEGER, ALLOCATABLE ::&
17
maske_gr(:,:), n_cts_gr(:,:)
18
REAL, ALLOCATABLE :: &
19
xi_gr(:), eta_gr(:),&
20
zs_gr(:,:), zm_gr(:,:),zb_gr(:,:), zb0_gr(:,:),&
21
z_c_gr(:,:,:), z_t_gr(:,:,:), z_r_gr(:,:,:),&
22
H_c_gr(:,:), H_t_gr(:,:),&
23
vx_c_gr(:,:,:), vy_c_gr(:,:,:), vz_c_gr(:,:,:),&
24
vx_t_gr(:,:,:), vy_t_gr(:,:,:), vz_t_gr(:,:,:),&
25
temp_c_gr(:,:,:), temp_r_gr(:,:,:), temp_t_gr(:,:,:),&
26
temph_c_gr(:,:,:), temph_t_gr(:,:,:),&
27
age_c_gr(:,:,:), age_t_gr(:,:,:), omega_t_gr(:,:,:),am_perp_gr(:,:),&
28
qx_gr(:,:), qy_gr(:,:), Q_bm_gr(:,:), Q_tld_gr(:,:)
29
30
SAVE dataread, runname
31
32
! inquire run identifyer and allocate fields arcording to information in log-file
33
!--------------------------------------------------------------------------------
34
WRITE( *, '(A)', ADVANCE = 'YES')' '
35
WRITE( *, '(A)', ADVANCE = 'YES')'This is sico2elmer'
36
WRITE( *, '(A)', ADVANCE = 'YES')'******************'
37
WRITE( *, '(A)', ADVANCE = 'YES')' '
38
WRITE( *, '(A)', ADVANCE = 'NO') 'Input of run identifyer (5 characters): '
39
READ (*,'(A5)',ADVANCE = 'YES') runname
40
WRITE( *, '(A,A)', ADVANCE = 'YES') 'chosen run identifyer: ', runname
41
CALL readlog_c(runname, imax,jmax,kcmax,ktmax,krmax,deform,Dx,gotit)
42
IF (gotit .EQ. 0) THEN
43
WRITE(6,'(A)', ADVANCE = 'YES') 'Error occurred while opening log-file!'
44
STOP
45
ELSE
46
WRITE( *, '(A)', ADVANCE = 'YES') 'Log read successful'
47
! WRITE( *, '(I4,I4,I4,I4,F8.4,F8.4)', ADVANCE = 'YES') imax,jmax,kcmax,ktmax,deform,dx
48
END IF
49
ALLOCATE( &
50
maske_gr(0:imax,0:jmax), n_cts_gr(0:imax,0:jmax),&
51
xi_gr(0:imax), eta_gr(0:jmax),&
52
z_c_gr(0:imax,0:jmax,0:kcmax),&
53
z_t_gr(0:imax,0:jmax,0:ktmax),&
54
z_r_gr(0:imax,0:jmax,0:krmax),&
55
zs_gr(0:imax,0:jmax), zm_gr(0:imax,0:jmax),&
56
zb_gr(0:imax,0:jmax), zb0_gr(0:imax,0:jmax),&
57
H_c_gr(0:imax,0:jmax),H_t_gr(0:imax,0:jmax),&
58
vx_c_gr(0:imax,0:jmax,0:kcmax),&
59
vy_c_gr(0:imax,0:jmax,0:kcmax),&
60
vz_c_gr(0:imax,0:jmax,0:kcmax),&
61
vx_t_gr(0:imax,0:jmax,0:ktmax),&
62
vy_t_gr(0:imax,0:jmax,0:ktmax),&
63
vz_t_gr(0:imax,0:jmax,0:ktmax),&
64
temp_c_gr(0:imax,0:jmax,0:kcmax),&
65
temph_c_gr(0:imax,0:jmax,0:kcmax),&
66
age_c_gr(0:imax,0:jmax,0:kcmax),&
67
omega_t_gr(0:imax,0:jmax,0:ktmax),&
68
temp_t_gr(0:imax,0:jmax,0:ktmax),&
69
temph_t_gr(0:imax,0:jmax,0:ktmax),&
70
age_t_gr(0:imax,0:jmax,0:ktmax),&
71
temp_r_gr(0:imax,0:jmax,0:krmax),&
72
qx_gr(0:imax,0:jmax), qy_gr(0:imax,0:jmax),&
73
Q_bm_gr(0:imax,0:jmax), Q_tld_gr(0:imax,0:jmax),&
74
am_perp_gr(0:imax,0:jmax),&
75
STAT=istat )
76
77
IF ( istat /= 0 ) THEN
78
WRITE( *, '(A)', ADVANCE = 'YES') 'Error in allocation of memory!'
79
STOP
80
ELSE
81
WRITE( *, '(A)', ADVANCE = 'YES') 'Allocation of arrays done'
82
END IF
83
84
! Main Menu
85
!--------------------------------------------------------------------------------
86
DO
87
WRITE( *, '(A)', ADVANCE = 'YES') ' '
88
WRITE( *, '(A)', ADVANCE = 'YES') ' '
89
WRITE( *, '(A)', ADVANCE = 'YES') 'Options:'
90
WRITE( *, '(A)', ADVANCE = 'YES') ' '
91
WRITE( *, '(A)', ADVANCE = 'YES') ' (1) Read SICOPOLIS timeslice-file'
92
WRITE( *, '(A)', ADVANCE = 'YES') ' (2) Output of timestep-grid for ELMERPOST'
93
WRITE( *, '(A)', ADVANCE = 'YES') ' (3) Output of timestep-data for ELMERPOST'
94
WRITE( *, '(A)', ADVANCE = 'YES') ' (4) Output of timestep for input to ELMER SOLVER'
95
WRITE( *, '(A)', ADVANCE = 'YES') ' (5) Output of timestep-data in ASCII-format'
96
WRITE( *, '(A)', ADVANCE = 'YES') ' '
97
WRITE( *, '(A)', ADVANCE = 'YES') ' (0) Quit'
98
WRITE( *, '(A)', ADVANCE = 'YES') ' '
99
WRITE( *, '(A)', ADVANCE = 'NO') 'Your choice: '
100
READ ( *, '(I1)', ADVANCE = 'YES') noption
101
WRITE( *, '(A)', ADVANCE = 'YES') ' '
102
WRITE( *, '(A)', ADVANCE = 'YES') ' '
103
104
IF ((noption == 1).and.(.NOT.dataread)) THEN
105
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Reading timeslice for run: ', runname
106
CALL ReadData(runname, ergnum, &
107
imax,jmax,kcmax,ktmax,krmax,deform,&
108
maske_gr, n_cts_gr,&
109
time_gr, xi_gr, eta_gr, zs_gr, zm_gr,zb_gr, zb0_gr,&
110
z_c_gr, z_t_gr, z_r_gr,&
111
H_c_gr, H_t_gr, H_R_gr, vx_c_gr, vy_c_gr, vz_c_gr,&
112
vx_t_gr, vy_t_gr, vz_t_gr, temp_c_gr, temp_r_gr, temp_t_gr,&
113
temph_c_gr, temph_t_gr, am_perp_gr, age_c_gr, age_t_gr, omega_t_gr,&
114
qx_gr, qy_gr, Q_bm_gr, Q_tld_gr)
115
dataread = .TRUE.
116
ELSE IF ((noption == 2).and.(dataread)) THEN
117
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Writing timestep-grid (ElmerPost) for run: ', runname
118
CALL postgrid(xi_gr, eta_gr, z_c_gr, z_t_gr, Dx, imax, jmax, kcmax, ktmax,&
119
runname, ergnum, maske_gr, 1)
120
ELSE IF ((noption == 3).and.(dataread)) THEN
121
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Writing timestep-data (ElmerPost) for run: ', runname
122
CALL elmerdata(imax, jmax, kcmax, ktmax, z_c_gr, z_t_gr,&
123
vx_c_gr, vy_c_gr, vz_c_gr, age_c_gr, temp_c_gr, vx_t_gr, vy_t_gr,&
124
vz_t_gr, temp_t_gr, age_t_gr, omega_t_gr, Q_bm_gr, Q_tld_gr,&
125
am_perp_gr, qx_gr, qy_gr, n_cts_gr, maske_gr, runname, ergnum, flag)
126
ELSE IF ((noption == 4).and.(dataread)) THEN
127
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Writing timestep-grid (ElmerSolver) for run: ', runname
128
call pregrid(xi_gr, eta_gr, z_c_gr, z_t_gr, imax, jmax, kcmax, ktmax, runname, ergnum,&
129
maske_gr, DX, flag)
130
ELSE IF ((noption == 5).and.(dataread)) THEN
131
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Output of timestep-data in ASCII-format for run: ',runname
132
CALL asciidata(xi_gr,eta_gr,IMAX,JMAX,KCMAX,KTMAX,&
133
z_c_gr, z_t_gr, vx_c_gr,vy_c_gr,vz_c_gr,age_c_gr,temph_c_gr,&
134
vx_t_gr,vy_t_gr,vz_t_gr,temph_t_gr,age_t_gr, omega_t_gr,&
135
Q_bm_gr, Q_tld_gr,am_perp_gr,qx_gr,qy_gr,n_cts_gr,&
136
maske_gr,runname,ergnum,1)
137
ELSE IF (noption == 0) THEN
138
DO i=1,5
139
WRITE( *, '(A)', ADVANCE = 'YES') ' '
140
END DO
141
WRITE( *, '(A)', ADVANCE = 'YES') 'Thank you for using sico2elmer!'
142
WRITE( *, '(A)', ADVANCE = 'YES') 'Bye'
143
STOP
144
ELSE
145
WRITE( *, '(A)', ADVANCE = 'NO') 'Could not perform command due to '
146
IF (noption > 5) THEN
147
WRITE( *, '(A)', ADVANCE = 'YES') 'invalid selection!'
148
ELSE
149
WRITE( *, '(A)', ADVANCE = 'YES') 'missing timeslice data! Select option (1) first'
150
END IF
151
END IF
152
! clear screen
153
! PAUSE
154
DO i=1,5
155
WRITE( *, '(A)', ADVANCE = 'YES') ' '
156
END DO
157
END DO
158
159
CONTAINS
160
!==============================================================================
161
SUBROUTINE ReadData(runname, ergnum, &
162
imax,jmax,kcmax,ktmax,krmax,deform,&
163
maske_gr, n_cts_gr,&
164
time_gr, xi_gr, eta_gr, zs_gr, zm_gr,zb_gr, zb0_gr,&
165
z_c_gr, z_t_gr, z_r_gr,&
166
H_c_gr, H_t_gr, H_R_gr, vx_c_gr, vy_c_gr, vz_c_gr,&
167
vx_t_gr, vy_t_gr, vz_t_gr, temp_c_gr, temp_r_gr, temp_t_gr,&
168
temph_c_gr, temph_t_gr, am_perp_gr, age_c_gr, age_t_gr, omega_t_gr,&
169
qx_gr, qy_gr, Q_bm_gr, Q_tld_gr)
170
IMPLICIT NONE
171
! external variables:
172
! ------------------------------------------------------------------------
173
CHARACTER :: &
174
runname * 5, ergnum * 2
175
INTEGER ::&
176
imax,jmax,kcmax,ktmax,krmax
177
REAL :: &
178
time_gr, deform, H_R_gr
179
INTEGER ::&
180
maske_gr(0:imax,0:jmax), n_cts_gr(0:imax,0:jmax)
181
REAL ::&
182
xi_gr(0:imax), eta_gr(0:jmax),&
183
zs_gr(0:imax,0:jmax), zm_gr(0:imax,0:jmax),zb_gr(0:imax,0:jmax), zb0_gr(0:imax,0:jmax),&
184
z_c_gr(0:imax,0:jmax,0:kcmax), z_t_gr(0:imax,0:jmax,0:ktmax), z_r_gr(0:imax,0:jmax,0:krmax),&
185
H_c_gr(0:imax,0:jmax), H_t_gr(0:imax,0:jmax),&
186
vx_c_gr(0:imax,0:jmax,0:kcmax), vy_c_gr(0:imax,0:jmax,0:kcmax), vz_c_gr(0:imax,0:jmax,0:kcmax),&
187
vx_t_gr(0:imax,0:jmax,0:ktmax), vy_t_gr(0:imax,0:jmax,0:ktmax), vz_t_gr(0:imax,0:jmax,0:ktmax),&
188
temp_c_gr(0:imax,0:jmax,0:kcmax), temp_r_gr(0:imax,0:jmax,0:krmax), temp_t_gr(0:imax,0:jmax,0:ktmax),&
189
temph_c_gr(0:imax,0:jmax,0:kcmax), temph_t_gr(0:imax,0:jmax,0:ktmax),&
190
age_c_gr(0:imax,0:jmax,0:kcmax), age_t_gr(0:imax,0:jmax,0:ktmax), omega_t_gr(0:imax,0:jmax,0:ktmax),&
191
am_perp_gr(0:imax,0:jmax),&
192
qx_gr(0:imax,0:jmax), qy_gr(0:imax,0:jmax), Q_bm_gr(0:imax,0:jmax), Q_tld_gr(0:imax,0:jmax)
193
! internal variables:
194
! ------------------------------------------------------------------------
195
CHARACTER :: &
196
ergfile * 11
197
INTEGER :: &
198
ios, kmax=0, i, j, k
199
REAL :: &
200
ScalarDummy
201
REAL, PARAMETER :: &
202
YEAR_SEC = 3.1556926e07, BETA = 8.70e-04
203
INTEGER, ALLOCATABLE :: &
204
TwoDimDummyI(:,:)
205
REAL, ALLOCATABLE :: &
206
OneDimDummyX(:), OneDimDummyY(:), TwoDimDummy(:,:),&
207
ThreeDimDummyR(:,:,:), ThreeDimDummyT(:,:,:), ThreeDimDummyC(:,:,:)
208
LOGICAL :: &
209
FirstTime = .TRUE.
210
211
SAVE ScalarDummy, TwoDimDummy, TwoDimDummyI, ThreeDimDummyR, ThreeDimDummyT,&
212
ThreeDimDummyC, OneDimDummyX, OneDimDummyY, FirstTime
213
214
! allocate some stuff (first time only)
215
!---------------------------------------------------------------
216
IF (FirstTime) THEN
217
ALLOCATE(&
218
OneDimDummyX(0:imax),&
219
OneDimDummyY(0:jmax),&
220
TwoDimDummy(0:jmax,0:imax),&
221
TwoDimDummyI(0:jmax,0:imax),&
222
ThreeDimDummyR(0:krmax,0:jmax,0:imax),&
223
ThreeDimDummyT(0:ktmax,0:jmax,0:imax),&
224
ThreeDimDummyC(0:kcmax,0:jmax,0:imax),&
225
STAT=istat )
226
227
IF ( istat /= 0 ) THEN
228
WRITE( *, '(A)', ADVANCE = 'YES') 'Error in allocation of memory!'
229
STOP
230
ELSE
231
WRITE( *, '(A)', ADVANCE = 'YES') 'Allocation of dummy arrays done'
232
END IF
233
FirstTime = .FALSE.
234
END IF
235
236
! inquire timeslice and open file
237
!--------------------------------
238
WRITE( *, '(A)', ADVANCE = 'NO') 'Enter number of timeslice (may start with 0 if < 10): '
239
READ (*,'(A)', ADVANCE = 'YES') ergnum
240
241
ergfile = runname//ergnum//'.erg'
242
243
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Atempting to open timeslice-file ', ergfile
244
245
OPEN(UNIT=10, IOSTAT=ios, FILE=ergfile, STATUS='old', FORM='unformatted')
246
IF (ios /= 0) THEN
247
WRITE(6,'(A,A,A)') 'Error occurred while opening timeslice-file ', ergfile,'!'
248
STOP
249
ELSE
250
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Reading from ', ergfile
251
END IF
252
253
! read in stuff
254
!-------------
255
!time
256
READ(10) ScalarDummy
257
time_gr = ScalarDummy/YEAR_SEC ! sec -> a
258
!x-coords
259
READ(10) OneDimDummyX
260
xi_gr(0:imax) = 1.0e-03 * OneDimDummyX(0:imax) ! m -> km
261
!y-coords
262
READ(10) OneDimDummyY
263
eta_gr(0:jmax) = 1.0e-03 * OneDimDummyY(0:jmax) ! m -> km
264
! glaciation mask
265
read(10) TwoDimDummyI
266
WRITE( *, '(A)', ADVANCE = 'NO') '.'
267
CALL ConvertFieldI2(imax, jmax, TwoDimDummyI, maske_gr) ! 1 -> 1
268
! poly-thermal condition mask
269
read(10) TwoDimDummyI
270
WRITE( *, '(A)', ADVANCE = 'NO') '.'
271
CALL ConvertFieldI2(imax, jmax, TwoDimDummyI, n_cts_gr) ! 1 -> 1
272
! z-coords
273
read(10) TwoDimDummy
274
WRITE( *, '(A)', ADVANCE = 'NO') '.'
275
CALL ConvertField2(imax, jmax, TwoDimDummy, zs_gr, 1.0e-03) ! m -> km
276
read(10) TwoDimDummy
277
WRITE( *, '(A)', ADVANCE = 'NO') '.'
278
CALL ConvertField2(imax, jmax, TwoDimDummy, zm_gr, 1.0e-03) ! m -> km
279
read(10) TwoDimDummy
280
WRITE( *, '(A)', ADVANCE = 'NO') '.'
281
CALL ConvertField2(imax, jmax, TwoDimDummy, zb_gr, 1.0e-03) ! m -> km
282
! depths
283
read(10) TwoDimDummy
284
WRITE( *, '(A)', ADVANCE = 'NO') '.'
285
CALL ConvertField2(imax, jmax, TwoDimDummy, H_c_gr, 1.0e-03) ! m -> km
286
read(10) TwoDimDummy
287
WRITE( *, '(A)', ADVANCE = 'NO') '.'
288
CALL ConvertField2(imax, jmax, TwoDimDummy, H_t_gr, 1.0e-03) ! m -> km
289
read(10) ScalarDummy
290
H_R_gr = 1.0e-03 * ScalarDummy! m --> km
291
! convert heights
292
! CALL ElevationColdD(imax, jmax, kcmax, deform, xi_gr, eta_gr, z_c_gr)
293
CALL ElevationCold(imax, jmax, kcmax, deform, zm_gr, H_c_gr, z_c_gr)
294
CALL ElevationTemp(imax, jmax, ktmax, zb_gr, H_t_gr, z_t_gr)
295
WRITE( *, '(A)', ADVANCE = 'NO') '.'
296
! velocity components cold region
297
read(10) ThreeDimDummyC
298
WRITE( *, '(A)', ADVANCE = 'NO') '....'
299
CALL ConvertField3(imax, jmax, kcmax, ThreeDimDummyC, vx_c_gr, YEAR_SEC) ! (m/s) --> (m/yr)
300
read(10) ThreeDimDummyC
301
WRITE( *, '(A)', ADVANCE = 'NO') '....'
302
CALL ConvertField3(imax, jmax, kcmax, ThreeDimDummyC, vy_c_gr, YEAR_SEC) ! (m/s) --> (m/yr)
303
read(10) ThreeDimDummyC
304
WRITE( *, '(A)', ADVANCE = 'NO') '....'
305
CALL ConvertField3(imax, jmax, kcmax, ThreeDimDummyC, vz_c_gr, YEAR_SEC) ! (m/s) --> (m/yr)
306
! velocity components temperate region
307
read(10) ThreeDimDummyT
308
WRITE( *, '(A)', ADVANCE = 'NO') '....'
309
CALL ConvertField3(imax, jmax, ktmax, ThreeDimDummyT, vx_t_gr, YEAR_SEC) ! (m/s) --> (m/yr)
310
read(10) ThreeDimDummyT
311
WRITE( *, '(A)', ADVANCE = 'NO') '....'
312
CALL ConvertField3(imax, jmax, ktmax, ThreeDimDummyT, vy_t_gr, YEAR_SEC) ! (m/s) --> (m/yr)
313
read(10) ThreeDimDummyT
314
WRITE( *, '(A)', ADVANCE = 'NO') '....'
315
CALL ConvertField3(imax, jmax, ktmax, ThreeDimDummyT, vz_t_gr, YEAR_SEC) ! (m/s) --> (m/yr)
316
! temperature field cold region (Celsius and homologe temperature)
317
read(10) ThreeDimDummyC
318
WRITE( *, '(A)', ADVANCE = 'NO') '....'
319
CALL ConvertField3(imax, jmax, kcmax, ThreeDimDummyC, temp_c_gr, 1.0e0) ! in C
320
CALL HomologousTempC(imax, jmax, kcmax, temp_c_gr, H_c_gr, deform, BETA, temph_c_gr) ! with respect to pressure melting point
321
! water content in temperate layer
322
read(10) ThreeDimDummyT
323
WRITE( *, '(A)', ADVANCE = 'NO') '....'
324
CALL ConvertField3(imax, jmax, ktmax, ThreeDimDummyT, omega_t_gr, 1.0e0) ! dimensionless
325
! temperature field bedrock
326
read(10) ThreeDimDummyR(0:krmax,0:jmax,0:imax)
327
WRITE( *, '(A)', ADVANCE = 'NO') '....'
328
CALL ConvertField3(imax, jmax, krmax, ThreeDimDummyR, temp_r_gr, 1.0e0) ! in C
329
read(10) TwoDimDummy
330
WRITE( *, '(A)', ADVANCE = 'NO') '.'
331
CALL ConvertField2(imax, jmax, TwoDimDummy, Q_bm_gr, YEAR_SEC) ! m3/(m2*s) --> m3/(m2*yr)
332
!!$ DO i = 0, imax
333
!!$ WRITE( *,'(I):', ADVANCE = 'NO') i
334
!!$ DO j = 0, jmax
335
!!$ WRITE( *,'(F8.4) ', ADVANCE = 'NO') Q_bm_gr(j,i)
336
!!$ END DO
337
!!$ WRITE( *,'(A)', ADVANCE = 'YES') 'END'
338
!!$ END DO
339
! water drainage rate from the temperated region
340
read(10) TwoDimDummy
341
WRITE( *, '(A)', ADVANCE = 'NO') '.'
342
CALL ConvertField2(imax, jmax, TwoDimDummy, Q_tld_gr, YEAR_SEC) ! m3/(m2*s) --> m3/(m2*yr)
343
! ice volume flux through CTS
344
read(10) TwoDimDummy
345
WRITE( *, '(A)', ADVANCE = 'NO') '.'
346
CALL ConvertField2(imax, jmax, TwoDimDummy, am_perp_gr, YEAR_SEC) ! (m/s) --> (m/yr)
347
! volume-flux components
348
read(10) TwoDimDummy
349
WRITE( *, '(A)', ADVANCE = 'NO') '.'
350
CALL ConvertField2(imax, jmax, TwoDimDummy, qx_gr, 1.0e-03) ! m2/s --> 1000 m2/yr
351
read(10) TwoDimDummy
352
WRITE( *, '(A)', ADVANCE = 'NO') '.'
353
CALL ConvertField2(imax, jmax, TwoDimDummy, qy_gr, 1.0e-03) ! m2/s --> 1000 m2/yr
354
read(10) ThreeDimDummyC
355
WRITE( *, '(A)', ADVANCE = 'NO') '....'
356
CALL ConvertField3(imax, jmax, kcmax, ThreeDimDummyC, age_c_gr, 1.0e0/(1.0e03*YEAR_SEC)) ! s --> kyr
357
read(10) ThreeDimDummyT
358
WRITE( *, '(A)', ADVANCE = 'YES') '....'
359
CALL ConvertField3(imax, jmax, ktmax, ThreeDimDummyT, age_t_gr, 1.0e0/(1.0e03*YEAR_SEC)) ! s --> kyr
360
WRITE( *, '(A)', ADVANCE = 'YES') 'Read in completed'
361
! close file
362
!-----------
363
CLOSE(10, STATUS='keep')
364
!==============================================================================
365
END SUBROUTINE ReadData
366
!--------------------------------------------------------------------------
367
! Writes 2d arrays read in from file into graphical output arrays
368
!--------------------------------------------------------------------------
369
SUBROUTINE ConvertField2(imax, jmax, in, out, factor)
370
IMPLICIT NONE
371
! external variables
372
!-------------------
373
INTEGER ::&
374
imax, jmax
375
REAL ::&
376
in(0:jmax,0:imax), out(0:imax,0:jmax), factor !in(0:(imax+1)*(jmax+1)-1)
377
! internal variables
378
!-------------------
379
INTEGER ::&
380
i, j
381
382
DO i = 0, imax
383
DO j = 0, jmax
384
! out(i,j) = factor * in(i*(jmax+1) + j)
385
out(i,j) = factor * in(j,i)
386
END DO
387
END DO
388
END SUBROUTINE ConvertField2
389
!==============================================================================
390
!--------------------------------------------------------------------------
391
! Writes 2d integer arrays read in from file into graphical output arrays
392
!--------------------------------------------------------------------------
393
SUBROUTINE ConvertFieldI2(imax, jmax, in, out)
394
IMPLICIT NONE
395
! external variables
396
!-------------------
397
INTEGER ::&
398
imax, jmax
399
INTEGER ::&
400
in(0:jmax,0:imax), out(0:imax,0:jmax)
401
! internal variables
402
!-------------------
403
INTEGER ::&
404
i, j
405
406
DO i = 0, imax
407
DO j = 0, jmax
408
out(i,j) = in(j,i)
409
END DO
410
END DO
411
END SUBROUTINE ConvertFieldI2
412
!==============================================================================
413
!--------------------------------------------------------------------------
414
! Writes 3d arrays read in from file into graphical output arrays
415
!--------------------------------------------------------------------------
416
SUBROUTINE ConvertField3(imax, jmax, kmax, in, out, factor)
417
IMPLICIT NONE
418
! external variables
419
!-------------------
420
INTEGER ::&
421
imax, jmax, kmax
422
REAL ::&
423
in(0:kmax,0:jmax,0:imax), out(0:imax,0:jmax,0:kmax), factor
424
! internal variables
425
!-------------------
426
INTEGER ::&
427
i, j, k
428
429
DO i = 0, imax
430
DO j = 0, jmax
431
DO k=0, kmax
432
out(i,j,k) = factor * in(k,j,i)
433
END DO
434
END DO
435
END DO
436
END SUBROUTINE ConvertField3
437
!==============================================================================
438
!--------------------------------------------------------------------------
439
! Transforms Celsius temperature into pressure meltinghomologous temperature
440
!--------------------------------------------------------------------------
441
SUBROUTINE HomologousTempC(imax, jmax, kcmax, in, depth, deform, BETA, out)
442
IMPLICIT NONE
443
! external variables
444
!-------------------
445
INTEGER ::&
446
imax, jmax, kcmax
447
REAL ::&
448
in(0:imax,0:jmax,0:kcmax), out(0:imax,0:jmax,0:kcmax),&
449
depth(0:imax,0:jmax)
450
REAL :: &
451
BETA, deform
452
! internal variables
453
!-------------------
454
INTEGER ::&
455
i, j, k
456
REAL :: &
457
ea, eaz_c_quotient, zeta_c, eaz_c
458
459
ea = exp(deform)
460
DO k=0, kcmax
461
zeta_c = real(k)/real(kcmax)
462
eaz_c = exp(DEFORM*zeta_c)
463
eaz_c_quotient =(eaz_c-1.0)/(ea-1.0)
464
DO i = 0, imax
465
DO j = 0, jmax
466
out(i,j,k) = in(i,j,k)&
467
- ( -1000.0*BETA*depth(i,j)*(1.0-eaz_c_quotient) )
468
END DO
469
END DO
470
END DO
471
END SUBROUTINE HomologousTempC
472
473
!==============================================================================
474
!--------------------------------------------------------------------------
475
! Transforms Celsius temperature into pressure meltinghomologous temperature
476
!--------------------------------------------------------------------------
477
SUBROUTINE HomologousTempT(imax, jmax, ktmax, in, depth1, depth2, BETA, out)
478
IMPLICIT NONE
479
! external variables
480
!-------------------
481
INTEGER ::&
482
imax, jmax, ktmax
483
REAL ::&
484
in(0:imax,0:jmax,0:ktmax), out(0:imax,0:jmax,0:ktmax),&
485
depth1(0:imax,0:jmax), depth2(0:imax,0:jmax)
486
REAL :: &
487
BETA
488
! internal variables
489
!-------------------
490
INTEGER ::&
491
i, j, k
492
REAL :: &
493
zeta_t
494
495
DO k=0, ktmax
496
zeta_t = real(k)/real(ktmax)
497
DO i = 0, imax
498
DO j = 0, jmax
499
out(i,j,k) = in(i,j,k)&
500
- ( -1000.0*BETA*(depth1(i,j)+depth2(i,j))*(1.0-zeta_t) )
501
END DO
502
END DO
503
END DO
504
END SUBROUTINE HomologousTempT
505
!==============================================================================
506
!--------------------------------------------------------------------------
507
! Transforms normalized into real elevations in cold layer
508
!--------------------------------------------------------------------------
509
SUBROUTINE ElevationTemp(imax, jmax, ktmax, zb_gr, H_t_gr, z_t_gr)
510
! external variables
511
!-------------------
512
INTEGER ::&
513
imax, jmax, ktmax
514
REAL ::&
515
zm_gr(0:imax,0:jmax), zb_gr(0:imax,0:jmax),&
516
H_t_gr(0:imax,0:jmax), z_t_gr(0:imax,0:jmax,0:ktmax)
517
! internal variables
518
!-------------------
519
INTEGER ::&
520
i, j, k
521
REAL :: &
522
zeta_t
523
524
DO k=0, ktmax
525
zeta_t = real(k)/real(ktmax)
526
DO i = 0, imax
527
DO j = 0, jmax
528
z_t_gr(i,j,k) = zb_gr(i,j) +H_t_gr(i,j)*zeta_t
529
END DO
530
END DO
531
END DO
532
END SUBROUTINE ElevationTemp
533
!==============================================================================
534
!--------------------------------------------------------------------------
535
! Transforms normalized into real elevations in cold layer
536
!--------------------------------------------------------------------------
537
SUBROUTINE ElevationColdD(imax, jmax, kcmax, deform, xi_gr, eta_gr, z_c_gr)
538
! external variables
539
!-------------------
540
INTEGER ::&
541
imax, jmax, kcmax
542
REAL ::&
543
xi_gr(0:imax), eta_gr(0:jmax), z_c_gr(0:imax,0:jmax,0:kcmax)
544
REAL :: &
545
deform
546
! internal variables
547
!-------------------
548
INTEGER ::&
549
i, j, k
550
DO i = 0, imax
551
DO j = 0, jmax
552
DO k=0, kcmax
553
! z_c_gr(i,j,k) = xi_gr(i) * eta_gr(j)
554
z_c_gr(i,j,k) = 0.0e0
555
END DO
556
END DO
557
END DO
558
END SUBROUTINE ElevationColdD
559
560
SUBROUTINE ElevationCold(imax, jmax, kcmax, deform, zm_gr, H_c_gr, z_c_gr)
561
! external variables
562
!-------------------
563
INTEGER ::&
564
imax, jmax, kcmax
565
REAL ::&
566
zm_gr(0:imax,0:jmax), H_c_gr(0:imax,0:jmax), z_c_gr(0:imax,0:jmax,0:kcmax)
567
REAL :: &
568
deform
569
! internal variables
570
!-------------------
571
INTEGER ::&
572
i, j, k
573
REAL :: &
574
ea, eaz_c_quotient, zeta_c, eaz_c
575
576
ea = exp(deform)
577
DO k=0, kcmax
578
zeta_c = real(k)/real(kcmax)
579
eaz_c = exp(DEFORM*zeta_c)
580
eaz_c_quotient =(eaz_c-1.0e0)/(ea-1.0e0)
581
DO i = 0, imax
582
DO j = 0, jmax
583
z_c_gr(i,j,k) = zm_gr(i,j) + H_c_gr(i,j)*eaz_c_quotient
584
END DO
585
END DO
586
END DO
587
END SUBROUTINE ElevationCold
588
!==============================================================================
589
SUBROUTINE ReadLog(runname, imax,jmax,kcmax,ktmax,krmax,deform,Dx)
590
IMPLICIT NONE
591
! external variables:
592
! ------------------------------------------------------------------------
593
594
INTEGER ::&
595
imax,jmax,kcmax,ktmax,krmax
596
CHARACTER :: &
597
runname * 5
598
REAL ::&
599
deform, Dx, rDummy
600
! internal variables:
601
! ------------------------------------------------------------------------
602
CHARACTER :: &
603
logdat * 9, chtrash
604
INTEGER :: &
605
ios
606
607
logdat = runname//'.log'
608
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Atempting to open log-file ', logdat
609
OPEN(UNIT=10, iostat=ios, file=logdat, status='old')
610
IF (ios.ne.0) THEN
611
WRITE(6,'(A)') 'Error occurred while opening log-file!'
612
STOP
613
ELSE
614
WRITE( *, '(A,A)', ADVANCE = 'YES') 'Reading from ', logdat
615
END IF
616
! READ(10,'(a7,i4)') chtrash
617
! READ(10,'(a7,i4)') chtrash
618
! READ(10,'(a7,i4)') chtrash
619
READ(10,'(a7,i4)') chtrash, imax
620
READ(10,'(a7,i4)') chtrash, jmax
621
READ(10,'(a7,i4)') chtrash, kcmax
622
READ(10,'(a7,i4)') chtrash, ktmax
623
READ(10,'(a7,i4)') chtrash, krmax
624
READ(10,'(a)') chtrash
625
READ(10,'(a3,e9.2)') chtrash, deform
626
READ(10,'(a,e9.2)') chtrash
627
READ(10,'(a12,e9.2)') chtrash, rDummy
628
READ(10,'(a12,e9.2)') chtrash, rDummy
629
READ(10,'(a)') chtrash
630
READ(10,'(a9,e9.2)') chtrash, Dx
631
CLOSE(10)
632
WRITE( *, '(A)', ADVANCE = 'YES')
633
WRITE( *, '(A)', ADVANCE = 'YES') 'The following parameters have been read in:'
634
WRITE( *, '(A,i4)', ADVANCE = 'YES') ' imax=', imax
635
WRITE( *, '(A,i4)', ADVANCE = 'YES') ' jmax=', jmax
636
WRITE( *, '(A,i4)', ADVANCE = 'YES') ' kcmax=', kcmax
637
WRITE( *, '(A,i4)', ADVANCE = 'YES') ' ktmax=', ktmax
638
WRITE( *, '(A,i4)', ADVANCE = 'YES') ' krmax=', krmax
639
WRITE( *, '(A,f9.2)', ADVANCE = 'YES') ' deform=', deform
640
WRITE( *, '(A,f9.2)', ADVANCE = 'YES') ' Dx=', Dx
641
WRITE( *, '(A)', ADVANCE = 'YES') ' '
642
WRITE( *, '(A)', ADVANCE = 'YES')
643
END SUBROUTINE ReadLog
644
!==============================================================================
645
END PROGRAM sico2elmer
646
!==============================================================================
647
!==============================================================================
648
649