1 | include(dom.inc)
2 |
3 | SUBROUTINE slave
4 |
5 | ! ================================================================!
6 | ! !
7 | ! slave.F : Main control of the slave side of the code. !
8 | ! !
9 | ! out : !
10 | ! !
11 | ! author : J. AMAYA (september 2007) !
12 | ! !
13 | ! ================================================================!
14 |
15 | #ifdef USEPALM
16 | USE palm_prissma
17 | USE palmlib
18 | USE palm_user_param
19 | #endif
20 |
21 | USE mod_inout
22 | USE mod_pmm
23 | USE mod_slave
24 |
25 | IMPLICIT NONE
26 |
27 | include 'pmm_constants.h'
28 |
29 | ! LOCAL
30 | #ifdef USEPALM
31 | DOM_INT :: i_iter
32 | #endif
33 | DOM_INT :: ib_beg, ib_end, finprog, i, ierr, j, ibnd
34 | DOM_INT :: i_bande, ngbands, ios
35 | DOM_INT :: ICO,ICO2,IH2O
36 | LOGICAL :: LICO,LICO2,LIH2O
37 | DOM_REAL :: DWVNB_SI, WVNB_SI
38 | DOM_REAL :: DWVNB, WVNB
39 | DOM_STR80 :: filefsck
40 |
41 | DOM_REAL, ALLOCATABLE, DIMENSION(:) :: wkabs
42 | DOM_REAL, ALLOCATABLE, DIMENSION(:) :: Lb, Lo, Lb_cell
43 | DOM_REAL, ALLOCATABLE, DIMENSION(:) :: kscat_cell
44 | DOM_REAL, ALLOCATABLE, DIMENSION(:,:) :: all_k_abs, kabs_cell
45 | DOM_REAL, ALLOCATABLE, DIMENSION(:,:) :: data_cell
46 |
47 | DOM_REAL, ALLOCATABLE, DIMENSION(:,:) :: Q_rtot, Q_ptot
48 | DOM_REAL, ALLOCATABLE, DIMENSION(:) :: Gtot, Lbtot, Htot
49 |
50 | DOM_REAL, ALLOCATABLE, DIMENSION(:,:) :: Q_rtot_n
51 | DOM_REAL, ALLOCATABLE, DIMENSION(:) :: Gtot_n, Lbtot_n,Qw
52 | DOM_REAL, ALLOCATABLE, DIMENSION(:,:) :: gb_Q_ptot
53 |
54 | ! Speed-up debugging variables
55 | DOM_DBLE :: cic_beg_time, cic_end_time
56 | DOM_DBLE :: lum_beg_time, lum_end_time
57 | DOM_DBLE :: snb_beg_time, snb_end_time
58 | DOM_DBLE :: bint_beg_time, bint_end_time
59 |
60 | DOM_DBLE :: cic_mean_time
61 | DOM_DBLE :: lum_mean_time
62 | DOM_DBLE :: snb_mean_time
63 | DOM_DBLE :: bint_mean_time
64 |
65 | CHARACTER*80 :: mediumtype_bak
66 |
67 | IF(I_SCHEME.eq.-1) THEN
68 | mediumtype_bak = mediumtype
69 | mediumtype = 'DERIVE'
70 | ENDIF
71 |
72 |
73 | ! --------------------------------------!
74 | ! Receive vectors from master processor !
75 | ! --------------------------------------!
76 |
77 | IF (pmm_rank.ne.PMM_HOST) THEN
78 | CALL slave_receive
79 | ENDIF
80 |
81 | ! ------------------------!
82 | ! Load runing parammeters !
83 | ! ------------------------!
84 |
85 | CALL read_data_slave
86 |
87 | #ifdef USEPALM
88 | ! -------------------------!
89 | ! PALM: Main coupling loop !
90 | ! -------------------------!
91 |
92 | DO i_iter = 1, i_dom_iterations
93 |
94 | IF (pmm_rank.eq.PMM_HOST) THEN
95 | WRITE(*,*) " (PRISSMA) Coupling it:",i_iter,"/", &
96 | & i_dom_iterations
97 | ENDIF
98 |
99 | ! -------------------------------!
100 | ! Receive fluid fields from PALM !
101 | ! -------------------------------!
102 |
103 | ! print*, " (PRISSMA ",pmm_rank,") Waiting for fluid fields"
104 | CALL interf_recvfields
105 | ! print*, " (PRISSMA ",pmm_rank,") Fluid data received"
106 | #endif
107 |
108 | ! ---------------------------------------!
109 | ! Allocate and Initialize result vectors !
110 | ! ---------------------------------------!
111 |
112 | IF (.not.ALLOCATED(wkabs)) ALLOCATE(wkabs(is_nkabs))
113 | IF (.not.ALLOCATED(Lo)) ALLOCATE(Lo(is_nbfaces))
114 |
115 | IF (.not.ALLOCATED(Lbtot)) ALLOCATE(Lbtot(is_ncells))
116 | IF (.not.ALLOCATED(Gtot)) ALLOCATE(Gtot(is_ncells))
117 | IF (.not.ALLOCATED(Htot)) ALLOCATE(Htot(is_nbfaces))
118 | IF (.not.ALLOCATED(Q_rtot)) ALLOCATE(Q_rtot(3,is_ncells))
119 | IF (.not.ALLOCATED(Q_ptot)) ALLOCATE(Q_ptot(3,is_nprobes))
120 |
121 | Lbtot = 0.
122 | Gtot = 0.
123 | Htot = 0.
124 | Q_rtot = 0.
125 | Q_ptot = 0.
126 |
127 | finprog = 0
128 |
129 | ! ------------------------!
130 | ! Initialize time counter !
131 | ! ------------------------!
132 |
133 | #ifdef USEPALM
134 | ! CALL MPI_BARRIER(COMM_PARA ,ierr)
135 | #else
136 | CALL MPI_BARRIER(COMM_PARA,ierr)
137 | #endif
138 | ! CALL cpu_time(sc_time)
139 | sc_time = MPI_WTIME()
140 |
141 | IF (pmm_rank.eq.PMM_HOST) THEN
142 | PRINT*
143 | IF(mediumtype.eq.'GRAY') THEN
144 | WRITE(*,*) " ->> Spectral model : Gray gas"
145 | ELSEIF(mediumtype.eq.'WSGG') THEN
146 | WRITE(*,*) " ->> Spectral model : WSGG"
147 | ELSE
148 | WRITE(*,*) " ->> Spectral model : ", &
149 | & trim(nb_base), "-", trim(mediumtype)
150 | ENDIF
151 | PRINT*
152 | ENDIF
153 |
154 | ! -----------------------!
155 | ! Global spectral models !
156 | ! -----------------------!
157 | IF (mediumtype.ne.'CK') THEN
158 |
159 | cic_mean_time = 0
160 | lum_mean_time = 0
161 | snb_mean_time = 0
162 |
163 | CALL cpu_time(cic_beg_time)
164 |
165 | DWVNB_SI = 1.0
166 | ngbands = is_nallbandes
167 |
168 | IF(.not.ALLOCATED(Lb)) ALLOCATE(Lb(is_nnodes))
169 | IF (.not.ALLOCATED(s_WSGG_W)) THEN
170 | ALLOCATE(s_WSGG_W(is_nkabs,is_nnodes))
171 | ENDIF
172 |
173 | CALL cpu_time(lum_beg_time)
174 | CALL EMISSIV(s_celldata, Lb, Lo, s_epsil, s_Tf, &
175 | & is_nnodes, 1, is_nnodes, &
176 | & is_nbfaces, 1, is_nbfaces)
177 | CALL cpu_time(lum_end_time)
178 | lum_mean_time=lum_mean_time+(lum_end_time-lum_beg_time)
179 |
180 | IF(.not.ALLOCATED(all_k_abs)) &
181 | & ALLOCATE(all_k_abs(is_nkabs,is_nnodes))
182 |
183 | ! -------------------!
184 | ! GRAY gas tratement !
185 | ! -------------------!
186 | IF (mediumtype.eq.'GRAY') THEN
187 |
188 | wkabs = 1.0
189 | s_WSGG_W = 1.0
190 | all_k_abs(1,:) = s_kabs_gray(:)
191 |
192 | ! ---------------------!
193 | ! WSGG case treatement !
194 | ! ---------------------!
195 | ELSEIF (mediumtype.eq.'WSGG') THEN
196 |
197 | wkabs = 1.0
198 |
199 | CALL cpu_time(snb_beg_time)
200 | CALL WSGG_CASE(all_k_abs,s_WSGG_W,Lb,s_celldata,is_nnodes, &
201 | & s_alpha,s_kwsgg,s_all_WVNB,s_all_DWVNB, &
202 | & is_ngg,is_nallbandes, is_lbcd, is_lbcf)
203 | CALL cpu_time(snb_end_time)
204 | snb_mean_time=snb_mean_time+(snb_end_time-snb_beg_time)
205 |
206 | ! --------------------!
207 | ! FSK CASE TREATEMENT !
208 | ! --------------------!
209 |
210 | ELSEIF (mediumtype.eq.'FSK') THEN
211 |
212 | s_WSGG_W = 1.0
213 |
214 | CALL cpu_time(snb_beg_time)
215 | CALL FSK_CASE(all_k_abs, wkabs, s_celldata,is_nnodes, &
216 | & s_all_WVNB, s_all_DWVNB, ngbands, &
217 | & is_nallbandes, is_nkabs, is_lbcd, is_lbcf)
218 | CALL cpu_time(snb_end_time)
219 | snb_mean_time=snb_mean_time+(snb_end_time-snb_beg_time)
220 |
221 | ! ---------------------!
222 | ! FSCK CASE TREATEMENT !
223 | ! ---------------------!
224 |
225 | ELSEIF (mediumtype.eq.'FSCK') THEN
226 |
227 | IF(.not.ALLOCATED(data_cell)) &
228 | & ALLOCATE(data_cell(8,is_ncells))
229 | CALL GATHER(s_celldata, data_cell, 8)
230 |
231 | ! -------------------------------!
232 | ! Choice of the reference state !
233 | ! 0 -> from input_fsck.dat !
234 | ! 1 -> average state !
235 | ! 2 -> Maximal temperature !
236 | ! 3 -> Maximal absorbing species !
237 | ! -------------------------------!
238 |
239 | IF (i_refstate.eq.0) THEN
240 | IF (pmm_rank.eq.PMM_HOST) THEN
241 | PRINT*, "Read reference state from file input_fsck.dat"
242 | ENDIF
243 |
244 | #ifdef USEPALM
245 | filefsck = trim(rundomdir)//'input_fsck.dat'
246 | #else
247 | filefsck = 'input_fsck.dat'
248 | #endif
249 | OPEN(UNIT=1,FILE=filefsck,FORM='FORMATTED',STATUS='old', &
250 | & IOSTAT=ios)
251 |
252 | DO i=1,8
253 | READ(1,*,IOSTAT=ios) s_dataref(i)
254 | ENDDO
255 | IF (ios.ne.0) THEN
256 | PRINT*, "Error reading input_fsck.dat"
257 | STOP
258 | ENDIF
259 |
260 | ELSEIF (i_refstate.eq.1) THEN
261 | CALL VOLAVERAGE(data_cell,s_dataref,8,1)
262 | DEALLOCATE(data_cell)
263 | ELSEIF (i_refstate.eq.2) THEN
264 | i = MAXVAL(MAXLOC(s_celldata(1,:)))
265 | s_dataref(:) = s_celldata(:,i)
266 | ELSEIF (i_refstate.eq.3) THEN
267 | i = MAXVAL(MAXLOC(s_celldata(3:5,:)))
268 | s_dataref(:) = s_celldata(:,i)
269 | ENDIF
270 |
271 | IF (.not.ALLOCATED(s_WSGG_Wb)) THEN
272 | ALLOCATE(s_WSGG_Wb(is_nkabs,is_nbfaces))
273 | ENDIF
274 |
275 | CALL cpu_time(snb_beg_time)
276 | CALL FSCK_CASE(all_k_abs, wkabs, s_celldata,is_nnodes, &
277 | & s_all_WVNB, s_all_DWVNB, ngbands, &
278 | & is_nallbandes, is_nkabs, s_dataref, s_WSGG_W,&
279 | & is_lbcd, is_lbcf, s_WSGG_Wb, s_Tf,is_nbfaces)
280 |
281 | CALL cpu_time(snb_end_time)
282 | snb_mean_time=snb_mean_time+(snb_end_time-snb_beg_time)
283 |
284 | ! ---------------------------------------!
285 | ! Tabulated FSCK and FSK CASE TREATEMENT !
286 | ! ---------------------------------------!
287 |
288 | ELSEIF ((mediumtype.eq.'TFSCK').or.(mediumtype.eq.'TFSK')) THEN
289 |
290 | CALL cpu_time(snb_beg_time)
291 |
292 | IF(mediumtype.eq.'TFSCK') THEN
293 |
294 | IF (.not.ALLOCATED(s_WSGG_Wb)) THEN
295 | ALLOCATE(s_WSGG_Wb(is_nkabs,is_nbfaces))
296 | ENDIF
297 |
298 | CALL TFSCK_CASE(s_celldata,is_nnodes, &
299 | & s_all_WVNB, s_all_DWVNB, ngbands, &
300 | & is_nallbandes, is_nkabs, s_dataref, s_WSGG_W,&
301 | & is_lbcd, is_lbcf, s_WSGG_Wb, s_Tf,is_nbfaces)
302 |
303 | ELSE
304 |
305 | s_WSGG_W = 1.0
306 |
307 | ENDIF
308 |
309 | CALL TFSK_CASE(s_celldata, all_k_abs, wkabs, s_tabkabs, &
310 | & s_DYH, s_DYC, s_DYCO, is_nYH, is_nYC, is_nYCO,&
311 | & s_DT, is_nT, is_nkabs, &
312 | & is_nnodes, is_nallbandes, s_all_WVNB, &
313 | & s_all_DWVNB, is_lbcd, is_lbcf)
314 |
315 | CALL cpu_time(snb_end_time)
316 | snb_mean_time=snb_mean_time+(snb_end_time-snb_beg_time)
317 |
318 | ELSE
319 | finprog = 1
320 | IF(mediumtype(1:4).ne.'DERI') THEN
321 | WRITE(*,*) " Fatal error: unknown spectral type ",mediumtype
322 | STOP
323 | ENDIF
324 | ENDIF
325 |
326 | ! ---------------!
327 | ! Gather vectors !
328 | ! ---------------!
329 |
330 | IF(.not.ALLOCATED(kabs_cell)) &
331 | & ALLOCATE(kabs_cell(is_nkabs,is_ncells))
332 | IF(.not.ALLOCATED(kscat_cell)) ALLOCATE(kscat_cell(is_ncells))
333 | IF(.not.ALLOCATED(Lb_cell)) ALLOCATE(Lb_cell(is_ncells))
334 |
335 | CALL GATHER(all_k_abs, kabs_cell, is_nkabs)
336 | CALL GATHER(s_k_scat, kscat_cell, 1)
337 | CALL GATHER(Lb, Lb_cell, 1)
338 |
339 | #ifndef USEPALM
340 | ! IF (ALLOCATED(s_celldata)) DEALLOCATE(s_celldata)
341 | IF (ALLOCATED(all_k_abs)) DEALLOCATE(all_k_abs)
342 | IF (ALLOCATED(s_k_scat)) DEALLOCATE(s_k_scat)
343 | IF (ALLOCATED(Lb)) DEALLOCATE(Lb)
344 | #endif
345 |
346 | ! ----------------------------!
347 | ! Integrate over the spectrum !
348 | ! ----------------------------!
349 |
350 | bint_mean_time = 0
351 | CALL cpu_time(bint_beg_time)
352 |
353 | IF (finprog .ne. 1) THEN
354 |
355 | IF (pmm_rank.eq.PMM_HOST) THEN
356 | PRINT*, " ->> Spectral integration over ",is_nkabs,"points"
357 | ENDIF
358 |
359 | CALL BAND_INTEG(wkabs, kabs_cell, kscat_cell, Lb_cell, Lo, &
360 | & DWVNB_SI, Gtot, Lbtot, Htot, Q_rtot, Q_ptot)
361 | ENDIF
362 |
363 | CALL cpu_time(bint_end_time)
364 | bint_mean_time=bint_end_time-bint_beg_time
365 |
366 | CALL cpu_time(cic_end_time)
367 | cic_mean_time = cic_mean_time + (cic_end_time-cic_beg_time)
368 |
369 | ! -------------------!
370 | ! CK case treatement !
371 | ! -------------------!
372 |
373 | ELSEIF (mediumtype.eq.'CK') THEN
374 |
375 | IF (pmm_rank.eq.PMM_HOST) THEN
376 | PRINT*, " ->> Spectral integration over narrow bands: "
377 | ENDIF
378 |
379 | ! ---------------!
380 | ! Gather vectors !
381 | ! ---------------!
382 |
383 | IF(.not.ALLOCATED(data_cell)) ALLOCATE(data_cell(8,is_ncells))
384 | IF(.not.ALLOCATED(Lb)) ALLOCATE(Lb(is_ncells))
385 | IF(.not.ALLOCATED(kscat_cell)) ALLOCATE(kscat_cell(is_ncells))
386 | IF(.not.ALLOCATED(all_k_abs)) &
387 | & ALLOCATE(all_k_abs(is_nkabs,is_ncells))
388 |
389 | CALL GATHER(s_celldata, data_cell, 8)
390 | CALL GATHER(s_k_scat, kscat_cell, 1)
391 |
392 | #ifndef USEPALM
393 | IF (ALLOCATED(s_celldata)) DEALLOCATE(s_celldata)
394 | IF (ALLOCATED(s_k_scat)) DEALLOCATE(s_k_scat)
395 | #endif
396 |
397 | cic_mean_time = 0
398 | lum_mean_time = 0
399 | snb_mean_time = 0
400 | bint_mean_time = 0
401 |
402 | ! ----------------------------!
403 | ! Calculate spectral interval !
404 | ! ----------------------------!
405 |
406 | ib_beg = 1
407 | ib_end = is_nallbandes
408 | ! IF (is_ndir.eq.1) THEN
409 | ! ib_beg = is_cd
410 | ! ib_end = is_cf
411 | ! ENDIF
412 |
413 | ! --------------------!
414 | ! Loop over all bands !
415 | ! --------------------!
416 |
417 | ! print*, " (",pmm_rank,") ibeg-iend:", ib_beg, ib_end
418 | DO i_bande = ib_beg, ib_end
419 |
420 | CALL cpu_time(cic_beg_time)
421 |
422 | ! ------------------!
423 | ! Set partitionning !
424 | ! ------------------!
425 |
426 | is_dirbeg = 2
427 | IF (i_bande.ge.is_cd) is_dirbeg = 1
428 |
429 | is_dirend = is_ndir - 1
430 | IF (i_bande.le.is_cf) is_dirend = is_ndir
431 |
432 | ! print*, " (",pmm_rank,") d_beg, d_end:",is_dirbeg,is_dirend
433 |
434 | ! -----------!
435 | ! Initialize !
436 | ! -----------!
437 |
438 | WVNB = s_all_WVNB(i_bande)
439 | DWVNB = s_all_DWVNB(i_bande)
440 | WVNB_SI = 100.*WVNB
441 | DWVNB_SI = 100.*DWVNB
442 |
443 | ngbands = 1
444 |
445 | CALL cpu_time(lum_beg_time)
446 | CALL EMISSIV_SNB(data_cell, Lb, Lo, s_epsil, &
447 | & s_Tf, WVNB_SI, is_ncells, &
448 | & 1, is_ncells, is_nbfaces,1, is_nbfaces)
449 | CALL cpu_time(lum_end_time)
450 | lum_mean_time=lum_mean_time+(lum_end_time-lum_beg_time)
451 |
452 | CALL cpu_time(snb_beg_time)
453 |
454 | CALL CK_CASE(all_k_abs, wkabs, Lb, data_cell, is_ncells, &
455 | & s_all_WVNB, s_all_DWVNB, ngbands, i_bande, &
456 | & is_nallbandes, is_nkabs, is_cellb, is_cellf)
457 |
458 | CALL cpu_time(snb_end_time)
459 | snb_mean_time=snb_mean_time+(snb_end_time-snb_beg_time)
460 |
461 | ! ------------------------!
462 | ! Integrate over the band !
463 | ! ------------------------!
464 |
465 | CALL cpu_time(bint_beg_time)
466 |
467 | IF (pmm_rank.eq.PMM_HOST) THEN
468 | PRINT*, " Band: ", i_bande,"/", ib_end
469 | ENDIF
470 |
471 | CALL BAND_INTEG_SNB(wkabs, all_k_abs, kscat_cell, Lb, Lo, &
472 | & DWVNB_SI, Gtot, Lbtot, Htot, Q_rtot, Q_ptot)
473 | CALL cpu_time(bint_end_time)
474 | bint_mean_time=bint_mean_time+(bint_end_time-bint_beg_time)
475 |
476 | CALL cpu_time(cic_end_time)
477 | cic_mean_time = cic_mean_time + (cic_end_time-cic_beg_time)
478 |
479 | ! WRITE(69,*) i_bande, (cic_end_time-cic_beg_time)
480 |
481 | ENDDO
482 |
483 | ! ---------------------------------------------------!
484 | ! Stop computation time counter and reduce to master !
485 | ! ---------------------------------------------------!
486 |
487 | ec_time = MPI_WTIME()
488 | ! CALL cpu_time(ec_time)
489 |
490 | CALL MPI_REDUCE(ec_time-sc_time,c_time,1,MPI_DOUBLE_PRECISION,&
491 | & MPI_MAX, PMM_HOST, COMM_PARA , ierr)
492 |
493 | cic_mean_time=cic_mean_time/(ib_end-ib_beg)
494 | bint_mean_time=bint_mean_time/(ib_end-ib_beg)
495 | snb_mean_time=snb_mean_time/(ib_end-ib_beg)
496 | lum_mean_time=lum_mean_time/(ib_end-ib_beg)
497 |
498 | ENDIF
499 |
500 | IF (pmm_rank.eq.PMM_HOST.and.finprog .ne. 1 ) THEN
501 | print*, " Mean time per band :",cic_mean_time,"sec."
502 | print*, " + Planck luminance:",lum_mean_time,"sec."
503 | print*, " + Kabs model :",snb_mean_time,"sec."
504 | print*, " + Band integration:",bint_mean_time,"sec."
505 | print*
506 | ENDIF
507 |
508 | ! ---------------------------!
509 | ! Send results to the master !
510 | ! ---------------------------!
511 |
512 | IF(mediumtype(1:4).eq.'DERI') THEN
513 | finprog = 0
514 | ENDIF
515 |
516 | IF (finprog .ne. 1.) THEN
517 |
518 | IF (.not.ALLOCATED(Lbtot_n)) ALLOCATE(Lbtot_n(is_nnodes))
519 | IF (.not.ALLOCATED(Gtot_n)) ALLOCATE(Gtot_n(is_nnodes))
520 | IF (.not.ALLOCATED(Q_rtot_n)) ALLOCATE(Q_rtot_n(3,is_nnodes))
521 | IF (.not.ALLOCATED(Qw)) ALLOCATE(Qw(is_nbfaces))
522 | IF (.not.ALLOCATED(gb_Q_ptot)) &
523 | & ALLOCATE(gb_Q_ptot(3,is_nprobes))
524 |
525 | ! ---------------------------------------------------------------------!
526 | ! Optionnal : Calculate kappa derivative if mediumtype begin with DERI !
527 | ! ---------------------------------------------------------------------!
528 | IF(mediumtype(1:4).eq.'DERI') THEN
529 | IF (pmm_rank.eq.PMM_HOST) THEN
530 | PRINT*, " -> Radiative Transfer Equation is not solved"
531 | PRINT*, " Calculate kappa derivative only: stored in G"
532 | ENDIF
533 | mediumtype = mediumtype_bak
534 | IF (pmm_rank.eq.PMM_HOST) PRINT*, " ->> Spectral model: ", &
535 | & mediumtype
536 | PRINT*
537 |
538 | IF(mediumtype.eq.'CK') THEN
539 | CALL DERI_KAPPA_SNB(6,0.01, 2, Gtot_n)
540 | ELSE
541 | CALL DERI_KAPPA(1,10.d0, 2, Gtot_n)
542 | ENDIF
543 | ELSE
544 | ! ---------------------------------------------------------------------!
545 |
546 |
547 | IF (pmm_rank.eq.PMM_HOST) THEN
548 | WRITE(*,*) " -> Postprocessing result vectors"
549 | ENDIF
550 |
551 | CALL POSTPROCESSING(Lbtot, Gtot, Q_rtot, Q_ptot, &
552 | & Lbtot_n, Gtot_n, Q_rtot_n, gb_Q_ptot, Qw )
553 | ENDIF
554 |
555 | IF (pmm_rank.eq.PMM_HOST) THEN
556 |
557 | WRITE(*,*) " >> MASTER: Receiving result vectors"
558 | WRITE(*,*)
559 |
560 | CALL master_integrate(Gtot_n, Lbtot_n, Htot, Q_rtot_n, &
561 | & gb_Q_ptot, Qw)
562 | CALL master_control(MASTER_OUTPROC)
563 | ENDIF
564 |
565 | ENDIF
566 |
567 | #ifdef USEPALM
568 | ! ---------------------------------------!
569 | ! PALM: End of the coupling loop (ENDDO) !
570 | ! ---------------------------------------!
571 | ! print*, " DOM (",pmm_rank,") END OF COUPLING ITERATION"
572 | ENDDO
573 | #endif
574 |
575 | END SUBROUTINE slave
slave.F could be called by: