41
42
43
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "units_c.inc"
59#include "warn_c.inc"
60#include "scr03_c.inc"
61#include "scr15_c.inc"
62#include "param_c.inc"
63#include "r2r_c.inc"
64
65
66
67 CHARACTER FILNAM*2148,CHRUN*4,ROOT_SUB*80
68 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
69
70
71
72 INTEGER ISTAT,KDOM,IPID_RET,IERROR,WAIT,IPID_L,,DOM_SWITCH
73 LOGICAL(4) WAITA
74#if defined(COMP_ARMFLANG) || defined(COMP_LLVM) || defined(COMP_AOCC)
75 INTEGER :: GETPID
76#endif
77#if defined(COMP_NVFORTRAN)
78 INTEGER, EXTERNAL :: GETPID
79#endif
80
81 INTEGER :: LEN_TMP_NAME
82 CHARACTER(len=4096) ::
83
84
85 kdom = 0
86 dom_switch = 0
87 dom_name = ''
88 rootnam0 = ''
89 rootnam0 = rootnam(1:rootlen)
90 ALLOCATE (
isubdom(8,nsubdom),stat=stat)
91
922000 CONTINUE
93
94
95
96
97#if CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
99
100
101
102#elif CPP_mach == CPP_linux964 || CPP_mach == CPP_sun25 || CPP_mach == CPP_pwr4
103 ipid = fork()
104#if defined(_OPENMP)
105 IF (ipid==0) CALL omp_set_num_threads(nthread_r2r)
106#endif
107
108
109
110#else
111#if defined(COMP_GFORTRAN) || defined(COMP_ARMFLANG)|| defined(COMP_LLVM) || defined(COMP_AOCC) || defined(COMP_NVFORTRAN)
113 ipid_ret = getpid()
114#else
115 CALL pxffork(ipid,ierror)
116 CALL pxfgetpid(ipid_ret,ierror)
117#endif
118#if defined(_OPENMP)
119 IF (ipid==0) CALL omp_set_num_threads(nthread_r2r)
120#endif
121#endif
122
123
124 kdom = kdom + 1
125 ipid_l = ipid
126
127 IF (ipid/=0) THEN
128 istat = 0
129
130
131
132#if CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
134
135
136
137#elif CPP_mach == CPP_linux964 || CPP_mach == CPP_sun25 || CPP_mach == CPP_pwr4
138 ierror = wait(istat)
139
140
141
142#else
143#if defined(COMP_GFORTRAN) || defined(COMP_ARMFLANG) || defined(COMP_LLVM) || defined(COMP_AOCC) || defined(COMP_NVFORTRAN)
145#else
146 CALL pxfwaitpid(ipid,istat,0,ipid_ret,ierror)
147#endif
148
149#endif
151 iddom = 0
152 iddom_l = iddom
154 IF (flg_fsi==1) THEN
155 IF (flg_swale<1) THEN
156 flg_swale = flg_swale + 1
157 dom_switch = kdom
158 kdom = kdom - 1
159#if CPP_mach == CPP_p4win64 || CPP_mach == CPP_p4win32
160 CLOSE(iout)
161#endif
162 GOTO 2000
163 ELSE
165 . msgtype=msgerror,
166 . anmode=aninfo)
167 ierr=ierr+1
168 ENDIF
169 ELSEIF (kdom<nsubdom) THEN
170 GOTO 2000
171 ENDIF
172 IF (flg_swale==1) THEN
173 ipid_l = 0
174 iddom_l = 1
175 ENDIF
176
177
178 ELSE
180 iddom = kdom
181 iddom_l = iddom
182 IF (flg_swale==1) THEN
183 ipid_l = 1
184 iddom_l = 0
185 ENDIF
186 ENDIF
187
188 IF (ipid_l/=0) THEN
189 WRITE(istdo,'(A)') '-----------------------------------'
190 WRITE(istdo,'(A)')' .. TREATMENT OF THE FULL DOMAIN'
191 WRITE(istdo,'(A)') '-----------------------------------'
192 WRITE(istdo,'(A)') ''
193 ELSE
194 rootnam = dom_name
195 rootlen = len_trim(rootnam)
196
197 filnam =rootnam(1:rootlen)//'_'//chrun//'.out'
198 r2r_filnam = filnam
201 OPEN(unit=iout,file=tmp_name(1:len_tmp_name),
202 . access='SEQUENTIAL',
203 . form='FORMATTED',status='UNKNOWN')
204
205 res_mes = 123458
206 res_tmp = 123459
207 OPEN (unit=res_mes,status='SCRATCH',form='FORMATTED')
208
209 WRITE(istdo,'(A)') ''
210 WRITE(istdo,'(A)') '-----------------------------------'
211 WRITE(istdo,'(A)')' .. TREATMENT OF SUBDOMAIN '
212 . //rootnam(1:rootlen)
213 WRITE(istdo,'(A)') '-----------------------------------'
214 WRITE(istdo,'(A)') ''
215
217
218 ENDIF
219
220
221 RETURN
character(len=outfile_char_len) outfile_name
integer, dimension(:,:), allocatable isubdom
subroutine read_flag_ale(chrun)
subroutine win_waitpid(ipid_ret)
subroutine create_child(id, flg_swale)
subroutine r2r_prelec_name(kdom, lsubmodel)
void my_waitpid(int *pid, int *istat, int *pidp, int *pidret)