File: N:\mfix\model\solve_vel_star.f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 SUBROUTINE SOLVE_VEL_STAR(IER)
19
20
21
22 use compar, only: ijkstart3, ijkend3
23 use discretelement, only: des_continuum_hybrid, discrete_element, des_continuum_coupled
24 use fldvar, only: u_g, v_g, w_g, u_s, v_s, w_s
25 use geometry, only: do_k, ijkmax2
26 use leqsol, only: leq_sweep, leq_tol, leq_pc, leq_it, leq_method
27 use param, only: dimension_3, dimension_m
28 use param1, only: zero, dimension_lm
29 use pgcor, only: d_e, d_t, d_n
30 use ps, only: point_source
31 use pscor, only: e_e, e_t, e_n, mcp
32 use physprop,only: mmax
33 use residual, only: resid_u, resid_v, resid_w, num_resid, den_resid, resid, max_resid, ijk_resid
34 use run, only: kt_type_enum, GHD_2007
35 use run, only: momentum_x_eq, momentum_y_eq, momentum_z_eq
36 use ur_facs, only: ur_fac
37
38
39
40 USE qmom_kinetic_equation
41 use usr_src, only: call_usr_source, calc_usr_source
42 use usr_src, only: gas_u_mom, gas_v_mom, gas_w_mom
43 use usr_src, only: solids_u_mom, solids_v_mom, solids_w_mom
44 IMPLICIT NONE
45
46
47
48
49 INTEGER, INTENT(INOUT) :: IER
50
51
52
53
54 INTEGER :: IJK
55
56 DOUBLE PRECISION, DIMENSION(:), allocatable :: U_gtmp, V_gtmp, W_gtmp
57 DOUBLE PRECISION, DIMENSION(:,:), allocatable :: U_stmp, V_stmp, W_stmp
58
59 INTEGER :: LEQM, LEQI
60
61 LOGICAL :: DO_SOLIDS
62
63
64
65
66
67
68
69
70
71
72
73
74
75 allocate(U_gtmp(DIMENSION_3))
76 allocate(V_gtmp(DIMENSION_3))
77 allocate(W_gtmp(DIMENSION_3))
78 allocate(U_stmp(DIMENSION_3,DIMENSION_M))
79 allocate(V_stmp(DIMENSION_3,DIMENSION_M))
80 allocate(W_stmp(DIMENSION_3,DIMENSION_M))
81
82
83
84
85
86 CALL init(U_gtmp, V_gtmp, W_gtmp, U_stmp, V_stmp, W_stmp)
87
88 DO_SOLIDS = .NOT.(DISCRETE_ELEMENT .OR. QMOMK) .OR. &
89 DES_CONTINUUM_HYBRID
90
91
92 CALL U_m_star(U_gtmp,U_stmp)
93
94 CALL V_m_star(V_gtmp,V_stmp)
95
96 CALL W_m_star(W_gtmp,W_stmp)
97
98
99 CALL save(U_gtmp, V_gtmp, W_gtmp, U_stmp, V_stmp, W_stmp)
100
101
102 IF(KT_TYPE_ENUM == GHD_2007) THEN
103 CALL calc_external_forces()
104 CALL GHDMassFlux()
105 CALL UpdateSpeciesVelocities()
106 ENDIF
107
108
109
110
111
112 deallocate(U_gtmp)
113 deallocate(V_gtmp)
114 deallocate(W_gtmp)
115 deallocate(U_stmp)
116 deallocate(V_stmp)
117 deallocate(W_stmp)
118
119 RETURN
120
121 CONTAINS
122
123
124
125
126 SUBROUTINE init(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_tmp)
127 IMPLICIT NONE
128
129 DOUBLE PRECISION, DIMENSION(:), intent(out) :: U_g_tmp, V_g_tmp, W_g_tmp
130 DOUBLE PRECISION, DIMENSION(:,:), intent(out) :: U_s_tmp, V_s_tmp, W_s_tmp
131
132
133 INTEGER :: M
134
135
136
137
138 DO IJK = ijkstart3, ijkend3
139 U_g_tmp(IJK) = U_g(IJK)
140 V_g_tmp(IJK) = V_g(IJK)
141 W_g_tmp(IJK) = W_g(IJK)
142 ENDDO
143 DO M = 1, MMAX
144 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
145 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
146 DO IJK = ijkstart3, ijkend3
147 U_s_tmp(IJK, M) = U_s(IJK, M)
148 V_s_tmp(IJK, M) = V_s(IJK, M)
149 W_s_tmp(IJK, M) = W_s(IJK, M)
150 ENDDO
151 ENDIF
152 ENDDO
153
154 END SUBROUTINE init
155
156
157
158
159 SUBROUTINE save(U_g_tmp, V_g_tmp, W_g_tmp, U_s_tmp, V_s_tmp, W_s_tmp)
160 IMPLICIT NONE
161
162 DOUBLE PRECISION, DIMENSION(:), intent(in) :: U_g_tmp, V_g_tmp, W_g_tmp
163 DOUBLE PRECISION, DIMENSION(:,:), intent(in) :: U_s_tmp, V_s_tmp, W_s_tmp
164
165
166 INTEGER :: M
167
168
169
170 DO IJK = ijkstart3, ijkend3
171 U_g(IJK) = U_g_tmp(IJK)
172 V_g(IJK) = V_g_tmp(IJK)
173 W_g(IJK) = W_g_tmp(IJK)
174 ENDDO
175 DO M = 1, MMAX
176 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
177 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
178 DO IJK = ijkstart3, ijkend3
179 U_s(IJK, M) = U_s_tmp(IJK, M)
180 V_s(IJK, M) = V_s_tmp(IJK, M)
181 W_s(IJK, M) = W_s_tmp(IJK, M)
182 ENDDO
183 ENDIF
184 ENDDO
185
186 END SUBROUTINE save
187
188
189
190
191 SUBROUTINE U_m_star(U_g_tmp, U_s_tmp)
192 IMPLICIT NONE
193
194 DOUBLE PRECISION, DIMENSION(:), INTENT(OUT) :: U_g_tmp
195 DOUBLE PRECISION, DIMENSION(:, :), INTENT(OUT) :: U_s_tmp
196
197
198 INTEGER :: M
199 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: VXF_GS, VXF_SS, B_M
200 DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: A_M
201
202
203 allocate(vxf_gs(DIMENSION_3,DIMENSION_M))
204 allocate(vxf_ss(DIMENSION_3,DIMENSION_LM))
205 ALLOCATE(A_M(DIMENSION_3, -3:3, 0:DIMENSION_M))
206 ALLOCATE(B_M(DIMENSION_3, 0:DIMENSION_M))
207
208
209
210 DO M = 0, MMAX
211 CALL INIT_AB_M (A_M, B_M, IJKMAX2, M)
212 IF (M >= 1) VXF_GS(:,M) = ZERO
213 ENDDO
214
215
216
217 CALL CONV_DIF_U_G (A_M, B_M)
218 IF(DO_SOLIDS) CALL CONV_DIF_U_S (A_M, B_M)
219
220
221
222 CALL SOURCE_U_G (A_M, B_M)
223 IF(POINT_SOURCE) CALL POINT_SOURCE_U_G (A_M, B_M)
224 IF(CALL_USR_SOURCE(3)) CALL CALC_USR_SOURCE(GAS_U_MOM, A_M, B_M)
225 IF(DO_SOLIDS) THEN
226 CALL SOURCE_U_S (A_M, B_M)
227 IF(POINT_SOURCE) CALL POINT_SOURCE_U_S (A_M, B_M)
228 IF(CALL_USR_SOURCE(3)) CALL CALC_USR_SOURCE(SOLIDS_U_MOM, A_M, B_M)
229 ENDIF
230
231
232
233
234
235 CALL VF_GS_X (VXF_GS)
236 IF(DO_SOLIDS .AND. (KT_TYPE_ENUM /= GHD_2007)) THEN
237 IF (MMAX > 0) CALL VF_SS_X (VXF_SS)
238 ENDIF
239
240
241 IF(KT_TYPE_ENUM == GHD_2007) THEN
242 CALL CALC_D_GHD_E (A_M, VXF_GS, D_E)
243 ELSE
244 CALL CALC_D_E (A_M, VXF_GS, VXF_SS, D_E, IER)
245 ENDIF
246
247 IF(DO_SOLIDS) THEN
248
249 IF (MMAX > 0) CALL CALC_E_E (A_M, MCP, E_E)
250
251
252
253 IF(KT_TYPE_ENUM == GHD_2007) THEN
254 IF (MMAX > 0) CALL PARTIAL_ELIM_GHD_U (U_G,U_S,VXF_GS,A_M,B_M)
255 ELSE
256 IF (MMAX > 0) CALL PARTIAL_ELIM_U (U_G,U_S,VXF_GS,A_M,B_M)
257 ENDIF
258 ENDIF
259
260
261 CALL ADJUST_A_U_G (A_M, B_M)
262 IF(DO_SOLIDS) CALL ADJUST_A_U_S (A_M, B_M)
263
264
265
266 IF(DES_CONTINUUM_COUPLED) THEN
267 CALL GAS_DRAG_U(A_M, B_M, IER)
268 IF (DES_CONTINUUM_HYBRID) &
269 CALL SOLID_DRAG_U(A_M, B_M)
270 ENDIF
271
272 IF(QMOMK .AND. QMOMK_COUPLED) THEN
273 CALL QMOMK_GAS_DRAG(A_M, B_M, IER, 1, 0, 0)
274 ENDIF
275
276 IF (MOMENTUM_X_EQ(0)) THEN
277 CALL CALC_RESID_U (U_G, V_G, W_G, A_M, B_M, 0, &
278 NUM_RESID(RESID_U,0), DEN_RESID(RESID_U,0), &
279 RESID(RESID_U,0), MAX_RESID(RESID_U,0), &
280 IJK_RESID(RESID_U,0))
281 CALL UNDER_RELAX_U (U_G, A_M, B_M, 0, UR_FAC(3))
282
283
284
285
286
287 ENDIF
288
289 IF(DO_SOLIDS) THEN
290 DO M = 1, MMAX
291 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
292 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
293 IF (MOMENTUM_X_EQ(M)) THEN
294 CALL CALC_RESID_U (U_S(1,M), V_S(1,M), W_S(1,M), A_M,&
295 B_M, M, NUM_RESID(RESID_U,M), &
296 DEN_RESID(RESID_U,M), RESID(RESID_U,M), &
297 MAX_RESID(RESID_U,M), IJK_RESID(RESID_U,M))
298 CALL UNDER_RELAX_U (U_S(1,M), A_M, B_M, M, &
299 UR_FAC(3))
300
301
302
303
304
305 ENDIF
306 ENDIF
307 ENDDO
308 ENDIF
309
310 IF (MOMENTUM_X_EQ(0)) THEN
311
312
313 CALL ADJUST_LEQ (RESID(RESID_U,0), LEQ_IT(3), LEQ_METHOD(3), &
314 LEQI, LEQM)
315 CALL SOLVE_LIN_EQ ('U_g', 3, U_G_tmp, A_M, B_M, 0, LEQI, LEQM, &
316 LEQ_SWEEP(3), LEQ_TOL(3), LEQ_PC(3), IER)
317
318 ENDIF
319
320 IF(DO_SOLIDS) THEN
321 DO M = 1, MMAX
322 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
323 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
324 IF (MOMENTUM_X_EQ(M)) THEN
325
326
327 CALL ADJUST_LEQ (RESID(RESID_U,M), LEQ_IT(3),&
328 LEQ_METHOD(3), LEQI, LEQM)
329 CALL SOLVE_LIN_EQ ('U_s', 3, U_S_tmp(1,M), A_M, &
330 B_M, M, LEQI, LEQM, LEQ_SWEEP(3), LEQ_TOL(3),&
331 LEQ_PC(3), IER)
332
333 ENDIF
334 ENDIF
335 ENDDO
336 ENDIF
337
338
339
340 deallocate(vxf_gs)
341 deallocate(vxf_ss)
342 deallocate(a_m)
343 deallocate(b_m)
344
345 END SUBROUTINE U_m_star
346
347
348
349
350 SUBROUTINE V_m_star(V_g_tmp, V_s_tmp)
351 IMPLICIT NONE
352
353 DOUBLE PRECISION, DIMENSION(:), INTENT(OUT) :: V_g_tmp
354 DOUBLE PRECISION, DIMENSION(:, :), INTENT(OUT) :: V_s_tmp
355
356
357 INTEGER :: M
358 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: VXF_GS, VXF_SS, B_M
359 DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: A_M
360
361
362 allocate(vxf_gs(DIMENSION_3,DIMENSION_M))
363 allocate(vxf_ss(DIMENSION_3,DIMENSION_LM))
364 ALLOCATE(A_M(DIMENSION_3, -3:3, 0:DIMENSION_M))
365 ALLOCATE(B_M(DIMENSION_3, 0:DIMENSION_M))
366
367
368
369 DO M = 0, MMAX
370 CALL INIT_AB_M (A_M, B_M, IJKMAX2, M)
371 IF (M >= 1) VXF_GS(:,M) = ZERO
372 ENDDO
373
374
375 CALL CONV_DIF_V_G (A_M, B_M, IER)
376
377 IF(DO_SOLIDS) CALL CONV_DIF_V_S (A_M, B_M, IER)
378
379
380 CALL SOURCE_V_G (A_M, B_M)
381 IF(POINT_SOURCE) CALL POINT_SOURCE_V_G (A_M, B_M)
382 IF(CALL_USR_SOURCE(4)) CALL CALC_USR_SOURCE(GAS_V_MOM, A_M, B_M)
383
384 IF(DO_SOLIDS) THEN
385 CALL SOURCE_V_S (A_M, B_M)
386 IF(POINT_SOURCE) CALL POINT_SOURCE_V_S (A_M, B_M)
387 IF(CALL_USR_SOURCE(4)) CALL CALC_USR_SOURCE(SOLIDS_V_MOM, A_M, B_M)
388 ENDIF
389
390
391 CALL VF_GS_Y (VXF_GS)
392 IF(DO_SOLIDS .AND. (KT_TYPE_ENUM /= GHD_2007)) THEN
393 IF (MMAX > 0) CALL VF_SS_Y (VXF_SS)
394 ENDIF
395
396
397 IF(KT_TYPE_ENUM == GHD_2007) THEN
398 CALL CALC_D_GHD_N (A_M, VXF_GS, D_N)
399 ELSE
400 CALL CALC_D_N (A_M, VXF_GS, VXF_SS, D_N, IER)
401 ENDIF
402
403 IF(DO_SOLIDS) THEN
404
405 IF (MMAX > 0) CALL CALC_E_N (A_M, MCP, E_N)
406
407
408
409 IF(KT_TYPE_ENUM == GHD_2007) THEN
410 IF (MMAX > 0) CALL PARTIAL_ELIM_GHD_V (V_G,V_S,VXF_GS,A_M,B_M)
411 ELSE
412 IF (MMAX > 0) CALL PARTIAL_ELIM_V (V_G,V_S,VXF_GS,A_M,B_M)
413 ENDIF
414 ENDIF
415
416
417 CALL ADJUST_A_V_G (A_M, B_M)
418
419 IF(DO_SOLIDS) CALL ADJUST_A_V_S (A_M, B_M)
420
421
422
423 IF(DES_CONTINUUM_COUPLED) THEN
424 CALL GAS_DRAG_V(A_M, B_M, IER)
425 IF (DES_CONTINUUM_HYBRID) &
426 CALL SOLID_DRAG_V(A_M, B_M)
427 ENDIF
428
429 IF(QMOMK .AND. QMOMK_COUPLED) THEN
430 CALL QMOMK_GAS_DRAG(A_M, B_M, IER, 0, 1, 0)
431 ENDIF
432
433
434 IF (MOMENTUM_Y_EQ(0)) THEN
435 CALL CALC_RESID_V (U_G, V_G, W_G, A_M, B_M, 0, &
436 NUM_RESID(RESID_V,0), DEN_RESID(RESID_V,0), &
437 RESID(RESID_V,0), MAX_RESID(RESID_V,0), &
438 IJK_RESID(RESID_V,0))
439 CALL UNDER_RELAX_V (V_G, A_M, B_M, 0, UR_FAC(4))
440
441
442
443
444
445 ENDIF
446
447 IF(DO_SOLIDS) THEN
448 DO M = 1, MMAX
449 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
450 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
451 IF (MOMENTUM_Y_EQ(M)) THEN
452 CALL CALC_RESID_V (U_S(1,M), V_S(1,M), W_S(1,M), A_M,&
453 B_M, M, NUM_RESID(RESID_V,M), &
454 DEN_RESID(RESID_V,M),RESID(RESID_V,M), &
455 MAX_RESID(RESID_V,M), IJK_RESID(RESID_V,M))
456 CALL UNDER_RELAX_V (V_S(1,M),A_M,B_M,M,UR_FAC(4))
457
458
459
460
461
462 ENDIF
463 ENDIF
464 ENDDO
465 ENDIF
466
467 IF (MOMENTUM_Y_EQ(0)) THEN
468
469
470 CALL ADJUST_LEQ (RESID(RESID_V,0), LEQ_IT(4), LEQ_METHOD(4), &
471 LEQI, LEQM)
472 CALL SOLVE_LIN_EQ ('V_g', 4, V_G_tmp, A_M, B_M, 0, LEQI, LEQM, &
473 LEQ_SWEEP(4), LEQ_TOL(4), LEQ_PC(4), IER)
474
475 ENDIF
476
477 IF(DO_SOLIDS) THEN
478 DO M = 1, MMAX
479 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
480 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
481 IF (MOMENTUM_Y_EQ(M)) THEN
482
483
484 CALL ADJUST_LEQ (RESID(RESID_V,M), LEQ_IT(4), &
485 LEQ_METHOD(4), LEQI, LEQM)
486 CALL SOLVE_LIN_EQ ('V_s', 4, V_S_tmp(1,M), A_M, &
487 B_M, M, LEQI, LEQM, LEQ_SWEEP(4), LEQ_TOL(4), &
488 LEQ_PC(4), IER)
489
490 ENDIF
491 ENDIF
492 ENDDO
493 ENDIF
494
495
496
497 deallocate(vxf_gs)
498 deallocate(vxf_ss)
499 deallocate(a_m)
500 deallocate(b_m)
501
502 END SUBROUTINE V_m_star
503
504
505
506
507 SUBROUTINE W_m_star(W_g_tmp, W_s_tmp)
508 IMPLICIT NONE
509
510 DOUBLE PRECISION, DIMENSION(:), INTENT(OUT) :: W_g_tmp
511 DOUBLE PRECISION, DIMENSION(:, :), INTENT(OUT) :: W_s_tmp
512
513
514 INTEGER :: M
515 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: VXF_GS, VXF_SS, B_M
516 DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: A_M
517
518
519 ALLOCATE(VXF_GS(DIMENSION_3,DIMENSION_M))
520 ALLOCATE(VXF_SS(DIMENSION_3,DIMENSION_LM))
521 ALLOCATE(A_M(DIMENSION_3, -3:3, 0:DIMENSION_M))
522 ALLOCATE(B_M(DIMENSION_3, 0:DIMENSION_M))
523
524
525
526 IF (DO_K)THEN
527 DO M = 0, MMAX
528 CALL INIT_AB_M (A_M, B_M, IJKMAX2, M)
529 IF (M >= 1) VXF_GS(:,M) = ZERO
530 ENDDO
531
532
533 CALL CONV_DIF_W_G (A_M, B_M)
534 IF(DO_SOLIDS) CALL CONV_DIF_W_S (A_M, B_M)
535
536
537 CALL SOURCE_W_G (A_M, B_M)
538 IF(POINT_SOURCE) CALL POINT_SOURCE_W_G (A_M, B_M)
539 IF(CALL_USR_SOURCE(5)) CALL CALC_USR_SOURCE(GAS_W_MOM, A_M, B_M)
540
541 IF(DO_SOLIDS) THEN
542 CALL SOURCE_W_S (A_M, B_M)
543 IF(POINT_SOURCE) CALL POINT_SOURCE_W_S (A_M, B_M)
544 IF(CALL_USR_SOURCE(5)) CALL CALC_USR_SOURCE(SOLIDS_W_MOM, A_M, B_M)
545 ENDIF
546
547
548
549 CALL VF_GS_Z (VXF_GS)
550 IF(DO_SOLIDS .AND. (KT_TYPE_ENUM /= GHD_2007)) THEN
551 IF (MMAX > 0) CALL VF_SS_Z (VXF_SS)
552 ENDIF
553
554
555 IF(KT_TYPE_ENUM == GHD_2007) THEN
556 CALL CALC_D_GHD_T (A_M, VXF_GS, D_T)
557 ELSE
558 CALL CALC_D_T (A_M, VXF_GS, VXF_SS, D_T, IER)
559 ENDIF
560
561 IF(DO_SOLIDS) THEN
562
563 IF (MMAX > 0) CALL CALC_E_T (A_M, MCP, E_T)
564
565
566
567 IF(KT_TYPE_ENUM == GHD_2007) THEN
568 IF (MMAX > 0) CALL PARTIAL_ELIM_GHD_W (W_G, W_S, VXF_GS, A_M, B_M)
569 ELSE
570 IF (MMAX > 0) CALL PARTIAL_ELIM_W (W_G, W_S, VXF_GS, A_M, B_M)
571 ENDIF
572 ENDIF
573
574
575 CALL ADJUST_A_W_G (A_M, B_M)
576 IF(DO_SOLIDS) THEN
577 CALL ADJUST_A_W_S (A_M, B_M)
578 ENDIF
579
580
581 IF(DES_CONTINUUM_COUPLED) THEN
582 CALL GAS_DRAG_W(A_M, B_M, IER)
583 IF (DISCRETE_ELEMENT .AND. DES_CONTINUUM_HYBRID) &
584 CALL SOLID_DRAG_W(A_M, B_M)
585 ENDIF
586
587 IF(QMOMK .AND. QMOMK_COUPLED) THEN
588 CALL QMOMK_GAS_DRAG(A_M, B_M, IER, 0, 0, 1)
589 ENDIF
590
591 IF (MOMENTUM_Z_EQ(0)) THEN
592 CALL CALC_RESID_W (U_G, V_G, W_G, A_M, B_M, 0, &
593 NUM_RESID(RESID_W,0), DEN_RESID(RESID_W,0), &
594 RESID(RESID_W,0), MAX_RESID(RESID_W,0), &
595 IJK_RESID(RESID_W,0))
596 CALL UNDER_RELAX_W (W_G, A_M, B_M, 0, UR_FAC(5))
597
598
599
600
601 ENDIF
602
603 IF(DO_SOLIDS) THEN
604 DO M = 1, MMAX
605 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
606 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
607 IF (MOMENTUM_Z_EQ(M)) THEN
608 CALL CALC_RESID_W (U_S(1,M), V_S(1,M), W_S(1,M),&
609 A_M, B_M, M, NUM_RESID(RESID_W,M), &
610 DEN_RESID(RESID_W,M), RESID(RESID_W,M), &
611 MAX_RESID(RESID_W,M), IJK_RESID(RESID_W,M))
612 CALL UNDER_RELAX_W (W_S(1,M), A_M, B_M, M, &
613 UR_FAC(5))
614
615
616
617
618
619 ENDIF
620 ENDIF
621 ENDDO
622 ENDIF
623
624 IF (MOMENTUM_Z_EQ(0)) THEN
625
626
627 CALL ADJUST_LEQ (RESID(RESID_W,0), LEQ_IT(5), &
628 LEQ_METHOD(5), LEQI, LEQM)
629 CALL SOLVE_LIN_EQ ('W_g', 5, W_G_tmp, A_M, B_M, 0, LEQI,&
630 LEQM, LEQ_SWEEP(5), LEQ_TOL(5), LEQ_PC(5), IER)
631
632 ENDIF
633
634 IF(DO_SOLIDS) THEN
635 DO M = 1, MMAX
636 IF(KT_TYPE_ENUM /= GHD_2007 .OR. &
637 (KT_TYPE_ENUM == GHD_2007 .AND. M==MMAX)) THEN
638 IF (MOMENTUM_Z_EQ(M)) THEN
639
640
641 CALL ADJUST_LEQ (RESID(RESID_W,M), LEQ_IT(5), &
642 LEQ_METHOD(5), LEQI, LEQM)
643 CALL SOLVE_LIN_EQ ('W_s', 5, W_S_tmp(1,M), &
644 A_M, B_M, M, LEQI, LEQM, LEQ_SWEEP(5), &
645 LEQ_TOL(5), LEQ_PC(5), IER)
646
647 ENDIF
648 ENDIF
649 ENDDO
650 ENDIF
651 ENDIF
652
653
654
655 deallocate(vxf_gs)
656 deallocate(vxf_ss)
657 deallocate(a_m)
658 deallocate(b_m)
659
660 END SUBROUTINE W_M_STAR
661
662 END SUBROUTINE SOLVE_VEL_STAR
663