4 & (namegeo, nameinp, nparts, geoformat, inpformat)
37 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: NAMEGEO
38 CHARACTER(LEN=PATH_LEN),
INTENT(IN) :: NAMEINP
39 INTEGER,
INTENT(IN) :: NPARTS
40 CHARACTER(LEN=8),
INTENT(INOUT) :: GEOFORMAT
41 CHARACTER(LEN=8),
INTENT(INOUT) :: INPFORMAT
44 INTEGER :: NGEO=7,ninp=8,ninp_par=9
45 CHARACTER(LEN=PATH_LEN) :: NAMEGEO_PAR
46 CHARACTER(LEN=PATH_LEN) :: NAMEINP_PAR
50 CHARACTER(LEN=32),
ALLOCATABLE :: VARLIST(:)
51 CHARACTER(LEN=16),
ALLOCATABLE :: VAR_NAME(:)
52 CHARACTER(LEN=16),
ALLOCATABLE :: VAR_UNIT(:)
53 CHARACTER(LEN=80) :: TITLE
54 INTEGER NVAR_INP,NVAR_GEO
55 INTEGER NTIMESTEP,IVAR,ITIME
56 DOUBLE PRECISION :: TIMES
57 DOUBLE PRECISION,
ALLOCATABLE :: VAL(:),VAL_INP(:)
59 INTEGER NPOIN_GEO,TYP_ELM_GEO,NELEM_GEO,NPTFR_GEO,NPTIR_GEO,
61 INTEGER NPOIN_INP,TYP_ELM_INP,NELEM_INP,NPTFR_INP,NPTIR_INP,
63 INTEGER :: NPOIN2,NELEM2
64 INTEGER :: NPOIN_P,NELEM_P
66 INTEGER,
ALLOCATABLE :: IKLES(:),IKLE3D(:)
67 INTEGER,
ALLOCATABLE :: IKLE(:)
69 INTEGER,
ALLOCATABLE :: KNOLG(:),KNOLG3D(:)
71 DOUBLE PRECISION,
ALLOCATABLE :: X(:),X3D(:)
72 DOUBLE PRECISION,
ALLOCATABLE :: Y(:),Y3D(:)
73 INTEGER :: FULLDATE(6),DATE(3),TIME(3)
76 INTEGER TDEB, TFIN, TEMPS, PARSEC
80 CHARACTER(LEN=11) :: EXTENS
85 WRITE(
lu,*)
'+---- PARRES: BEGINNING -------------+' 86 WRITE(
lu,*)
'+---- USING GEOMETRY FILE: ',trim(namegeo)
87 CALL system_clock (count=temps, count_rate=parsec)
89 IF (parsec==0) timecount = .false.
90 IF (timecount) tdeb = temps
100 CALL open_mesh(inpformat,nameinp,ninp,
'READ ',ierr)
101 CALL check_call(ierr,
'PARRES:OPEN_MESH:NINP')
104 WRITE(
lu,*)
'TREATING SUB-DOMAIN ', ipart
106 namegeo_par = trim(namegeo)//
'-CONCAT' 107 nameinp_par = trim(nameinp)//
'-CONCAT' 109 CALL open_mesh(geoformat,namegeo_par,ngeo,
'READ ',
111 CALL check_call(ierr,
'PARRES:OPEN_MESH:NGEO')
113 CALL open_mesh(inpformat,nameinp_par,ninp_par,
'WRITE ',
115 CALL check_call(ierr,
'PARRES:OPEN_MESH:NINP_PAR')
117 namegeo_par = trim(namegeo)//extens(nparts-1,ipart-1)
118 nameinp_par = trim(nameinp)//extens(nparts-1,ipart-1)
120 CALL open_mesh(geoformat,namegeo_par,ngeo,
'READ ',ierr)
121 CALL check_call(ierr,
'PARRES:OPEN_MESH:NGEO')
123 CALL open_mesh(inpformat,nameinp_par,ninp_par,
'WRITE ',
125 CALL check_call(ierr,
'PARRES:OPEN_MESH:NINP_PAR')
137 CALL check_call(ierr,
'PARRES:GET_MESH_TITLE:NINP')
140 CALL check_call(ierr,
'PARRES:GET_DATA_NVAR:NINP')
142 ALLOCATE(varlist(nvar_inp),stat=ierr)
143 CALL check_allocate(ierr,
'PARRES:VARLIST')
144 ALLOCATE(var_name(nvar_inp),stat=ierr)
145 CALL check_allocate(ierr,
'PARRES:VAR_NAME')
146 ALLOCATE(var_unit(nvar_inp),stat=ierr)
147 CALL check_allocate(ierr,
'PARRES:VAR_UNIT')
150 CALL check_call(ierr,
'PARRES:GET_DATA_CAR_LIST:NINP')
153 varlist(i)(1:16) = var_name(i)
154 varlist(i)(17:32) = var_unit(i)
159 CALL set_header(inpformat,ninp_par,title,nvar_inp,varlist,ierr)
160 CALL check_call(ierr,
'PARRRES:SET_HEADER:NINP_PAR')
169 & typ_elm_geo,nelem_geo,nptfr_geo,nptir_geo,
173 & typ_elm_inp,nelem_inp,nptfr_inp,nptir_inp,
175 IF(nplan_inp.GT.1)
THEN 177 WRITE(
lu,*)
'3D MESH DETECTED' 178 npoin2 = npoin_inp/nplan_inp
179 nelem2 = nelem_inp/(nplan_inp-1)
180 WRITE(
lu,*)
'NDP NODES PER ELEMENT: ',ndp_inp
181 WRITE(
lu,*)
'ELEMENT TYPE : ',typ_elm_inp
182 WRITE(
lu,*)
'NPLAN NUMBER OF MESH LEVELS: ',nplan_inp
183 WRITE(
lu,*)
'NPOIN2 NUMBER OF 2D MESH NODES: ',npoin2
184 WRITE(
lu,*)
'NPOIN NUMBER OF 3D MESH NODES: ',npoin_inp
185 WRITE(
lu,*)
'NELEM2 NUMBER OF 2D MESH ELEMENTS: ',nelem2
186 WRITE(
lu,*)
'NELEM NUMBER OF 3D MESH ELEMENTS: ',nelem_inp
187 IF (mod(npoin_inp,nplan_inp).NE.0)
THEN 188 WRITE (
lu,*)
'BUT NPOIN2 /= NPOIN3/NPLAN!' 192 IF (mod(nelem_inp,(nplan_inp-1)).NE.0)
THEN 193 WRITE (
lu,*)
'BUT NELEM2 /= NELEM3/NPLAN!' 198 WRITE(
lu,*)
'THE INPUT FILE ASSUMED TO BE 3D' 201 npoin_p = npoin_geo*nplan_inp
202 nelem_p = nelem_geo*(nplan_inp-1)
205 WRITE(
lu,*)
'ONE-LEVEL MESH.' 206 WRITE(
lu,*)
'NDP NODES PER ELEMENT: ',ndp_inp
207 WRITE(
lu,*)
'ELEMENT TYPE : ',typ_elm_inp
208 WRITE(
lu,*)
'NPOIN NUMBER OF MESH NODES: ',npoin_inp
209 WRITE(
lu,*)
'NELEM NUMBER OF MESH ELEMENTS: ',nelem_inp
213 WRITE(
lu,*)
'THE INPUT FILE ASSUMED TO BE 2D' 220 ALLOCATE (ikle(nelem_geo*ndp_geo),stat=ierr)
221 CALL check_allocate(ierr,
'PARRES:IKLES')
222 ALLOCATE (ikles(nelem_geo*ndp_geo),stat=ierr)
223 CALL check_allocate(ierr,
'PARRES:IKLES')
224 ALLOCATE (knolg(npoin_geo),stat=ierr)
225 CALL check_allocate(ierr,
'PARRES:KNOLG')
226 ALLOCATE (x(npoin_geo),stat=ierr)
227 CALL check_allocate(ierr,
'PARRES:X')
228 ALLOCATE (y(npoin_geo),stat=ierr)
229 CALL check_allocate(ierr,
'PARRES:Y')
234 & nelem_geo,ndp_geo,ierr)
235 CALL check_call(ierr,
'PARRES:GET_MESH_CONNECTIVITY:NGEO')
240 CALL check_call(ierr,
'PARRES:GET_MESH_COORD:NGEO:X')
242 CALL check_call(ierr,
'PARRES:GET_MESH_COORD:NGEO:Y')
247 CALL check_call(ierr,
'PARRES:GET_MESH_L2G_NUMBERING:NGEO')
253 CALL check_call(ierr,
'PARRES:GET_MESH_DATE:NINP')
254 date(1) = fulldate(1)
255 date(2) = fulldate(2)
256 date(3) = fulldate(3)
257 time(1) = fulldate(4)
258 time(2) = fulldate(5)
259 time(3) = fulldate(6)
265 IF(nplan_inp.GT.1)
THEN 267 ALLOCATE (ikle3d(nelem_geo*(nplan_inp-1)*ndp_inp),stat=ierr)
268 CALL check_allocate(ierr,
'PARRES:IKLE3D')
271 ikle3d(j + (i-1)*nelem_geo + (1-1)*nelem_p) =
272 & ikles(1+(j-1)*ndp_geo) + (i-1)*npoin_geo
273 ikle3d(j + (i-1)*nelem_geo + (2-1)*nelem_p) =
274 & ikles(2+(j-1)*ndp_geo) + (i-1)*npoin_geo
275 ikle3d(j + (i-1)*nelem_geo + (3-1)*nelem_p) =
276 & ikles(3+(j-1)*ndp_geo) + (i-1)*npoin_geo
277 ikle3d(j + (i-1)*nelem_geo + (4-1)*nelem_p) =
278 & ikles(1+(j-1)*ndp_geo) + (i )*npoin_geo
279 ikle3d(j + (i-1)*nelem_geo + (5-1)*nelem_p) =
280 & ikles(2+(j-1)*ndp_geo) + (i )*npoin_geo
281 ikle3d(j + (i-1)*nelem_geo + (6-1)*nelem_p) =
282 & ikles(3+(j-1)*ndp_geo) + (i )*npoin_geo
286 ALLOCATE (x3d(npoin_geo*nplan_inp),stat=ierr)
287 CALL check_allocate(ierr,
'PARRES:IKLE3D')
288 ALLOCATE (y3d(npoin_geo*nplan_inp),stat=ierr)
289 CALL check_allocate(ierr,
'PARRES:IKLE3D')
292 x3d(j + (i-1)*npoin_geo) = x(j)
293 y3d(j + (i-1)*npoin_geo) = y(j)
298 ALLOCATE (knolg3d(npoin_geo*nplan_inp),stat=ierr)
299 CALL check_allocate(ierr,
'PARRES:IKLE3D')
302 knolg3d(j + (i-1)*npoin_geo) =
303 & knolg(j) + (i-1)*npoin2
307 CALL set_mesh(inpformat,ninp_par,mesh_dim,typ_elm_inp,ndp_inp,
308 & nptfr_geo,nptir_geo,nelem_p,npoin_p,
309 & ikle3d,knolg3d,knolg3d,x3d,y3d,nplan_inp,
319 ikle(i + (j-1)*nelem_geo) = ikles(j + (i-1)*(ndp_geo))
323 CALL set_mesh(inpformat,ninp_par,mesh_dim,typ_elm_geo,ndp_geo,
324 & nptfr_geo,nptir_geo,nelem_geo,npoin_geo,
325 & ikle,knolg,knolg,x,y,nplan_geo,date,time,
333 CALL check_call(ierr,
'PARRES:CLOSE_MESH:NGEO')
342 CALL check_call(ierr,
'PARRES:GET_DATA_NTIMESTEP:NINP')
344 ALLOCATE(val_inp(npoin_inp),stat=ierr)
345 CALL check_allocate(ierr,
'PARRES:VAL_INP')
346 ALLOCATE(val(npoin_p),stat=ierr)
347 CALL check_allocate(ierr,
'PARRES:VAL')
351 CALL check_call(ierr,
'PARTEL:GET_DATA_TIME:NINP')
352 WRITE(
lu,*)
' -- WRITING TIMESTEP',itime-1,
' AT',
REAL(times)
356 & varlist(ivar)(1:16),val_inp,
359 IF(nplan_inp.GT.1)
THEN 361 val(i) = val_inp(knolg3d(i))
365 val(i) = val_inp(knolg(i))
368 CALL add_data(inpformat,ninp_par,varlist(ivar),times,
369 & itime-1,ivar.EQ.1,val,npoin_p,ierr)
370 CALL check_call(ierr,
'PARRES:ADD_DATA:NINP_PAR')
378 IF(nplan_inp.GT.1)
DEALLOCATE(knolg3d)
380 CALL close_mesh(inpformat,ninp_par,ierr,ipart)
381 CALL check_call(ierr,
'PARRES:CLOSE_MESH:NINP_PAR')
386 CALL check_call(ierr,
'PARRES:CLOSE_MESH:NINP')
392 CALL system_clock (count=temps, count_rate=parsec)
394 WRITE(
lu,*)
'OVERALL TIMING: ',
395 & (1.0*(tfin-tdeb))/(1.0*parsec),
' SECONDS' 399 WRITE(
lu,*)
'+---- PARRES: NORMAL TERMINATION ----+'
subroutine add_data(FFORMAT, FILE_ID, VAR_NAME, TIME, RECORD, FIRST_VAR, VAR_VALUE, N, IERR)
subroutine close_mesh(FFORMAT, FILE_ID, IERR, MESH_NUMBER)
subroutine set_mesh(FFORMAT, FILE_ID, MESH_DIM, TYPELM, NDP, NPTFR, NPTIR, NELEM, NPOIN, IKLE, IPOBO, KNOLG, X, Y, NPLAN, DATE, TIME, X_ORIG, Y_ORIG, IERR, Z, IN_PLACE)
subroutine get_data_nvar(FFORMAT, FID, NVAR, IERR)
subroutine parres(NAMEGEO, NAMEINP, NPARTS, GEOFORMAT, INPFORMAT)
subroutine get_data_var_list(FFORMAT, FID, NVAR, VARLIST, UNITLIST, IERR)
subroutine get_data_value(FFORMAT, FID, RECORD, VAR_NAME, RES_VALUE, N, IERR)
subroutine read_mesh_info(FFORMAT, NFIC, TITLE, NVAR, NPOIN, TYP_ELEM, NELEM, NPTFR, NPTIR, NDP, NPLAN, X_ORIG, Y_ORIG, TYP_BND_ELEM, NELEBD)
subroutine get_mesh_title(FFORMAT, FID, TITLE, IERR)
subroutine get_mesh_date(FFORMAT, FID, DATE, IERR)
subroutine get_mesh_coord(FFORMAT, FID, JDIM, NDIM, NPOIN, COORD, IERR)
subroutine get_mesh_connectivity(FFORMAT, FID, TYP_ELEM, IKLE, NELEM, NDP, IERR)
subroutine open_mesh(FFORMAT, FILE_NAME, FILE_ID, OPENMODE, IERR, MESH_NUMBER)
subroutine get_data_time(FFORMAT, FID, RECORD, TIME, IERR)
subroutine get_mesh_l2g_numbering(FFORMAT, FID, KNOLG, NPOIN, IERR)
subroutine get_data_ntimestep(FFORMAT, FID, NTIMESTEP, IERR)