SUBROUTINE SZGRID(KFILDO,P,NX,NY, 1 MESHIN,MESHOUT,ITRPLQ,ND2X3) C C OCTOBER 2004 GLAHN MDL MOS-2000 C MODIFIED FROM SIZEGR (LAMPLIB) C C PURPOSE C TO INTERPOLATE OR THIN A GRID SO THAT IT FITS WITHIN C THE SAME AREA, BUT WITH A DIFFERENT MESH LENGTH. THE C NEW GRID DIMENSIONS ARE RETURNED. C C DATA SET USE C KFILDO - UNIT NUMBER OF OUTPUT (PRINT) FILE. (OUTPUT) C C VARIABLES C C KFILDO = UNIT NUMBER OF OUTPUT (PRINT) FILE. (INPUT) C P(IX,JY) = THE INPUT AND OUTPUT GRIDS. C THE INPUT WILL BE OF SIZE NXIN, NYIN, WITH C NOMINAL MESH LENGTH MESHIN. C THE OUTPUT WILL BE OF SIZE NXOUT, NYOUT, WITH C NOMINAL MESH LENGTH MESHOUT. C (INPUT/OUTPUT) C NX = SIZE OF THE INPUT GRID IN NX DIRECTION ON C INPUT; THE SIZE OF THE OUTPUT GRID ON C OUTPUT. (INPUT/OUTPUT) C NY = SIZE OF THE INPUT GRID IN NY DIRECTION ON C INPUT; THE SIZE OF THE OUTPUT GRID ON C OUTPUT. (INPUT/OUTPUT) C MESHIN = NOMINAL MESH LENGTH OF INPUT GRID ON INPUT C AND OF OUTPUT GRID ON OUTPUT. (INPUT/OUTPUT) C MESHOUT = NOMINAL MESH LENGTH OF OUTPUT GRID. (INPUT) C ITRPLQ = TYPE OF INTERPOLATION TO GO FROM ONE MESH C LENGTH TO ONE OF HALF THAT. C 1 = BILINEAR C 2 = BIQUADRATIC C NOT USED WHEN MESHIN LT MESHOUT. C (INPUT) C ND2X3 = SIZE OF COMBINED DIMENSIONS OF P( ). (INPUT) C C NONSYSTEM SUBROUTINES USED C DENSER, THINER, MSHXMS, C DIMENSION P(ND2X3) C C DETERMINE WHETHER ANY ACTION IS NECESSARY. C IF(MESHIN.EQ.MESHOUT)GO TO 300 C IF THE MESH LENGTH OF THE INPUT AND OUTPUT GRIDS ARE C THE SAME, THIS IS A DO NOTHING ROUTINE. C CD WRITE(KFILDO,100)MESHIN,MESHOUT,NX,NY,ND2X3,ITRPLQ CD100 FORMAT(/' IN SZGRID AT 100--MESHIN,MESHOUT,NX,NY,ND2X3', CD 1 'ITRPLQ',6I10) C C GET THE FLOATING POINT VALUE OF THE NOMINAL MESH LENGTHS C CALL MSHXMS(KFILDO,MESHIN,XMESHI,TRASH) CALL MSHXMS(KFILDO,MESHOUT,XMESHO,TRASH) C RATIO=XMESHI/XMESHO C RATIO IS THE RATIO OF THE INPUT MESH LENGTH TO THE OUTPUT C MESH LENGTH. BECAUSE OF THE TEST ON MESHIN AND MESHOUT, IT C CANNOT BE 1. C C NOW CALL DENSER TO INTERPOLATE OR CALL THINER C TO THIN THE GRID TO THE DESIRED MESH LENGTH. C DENSER AND THINER OPERATE IN DOUBLING OR HALVING THE MESH C LENGTH, SO MAY NEED TO BE CALLED MULTIPLE TIMES. C IF(RATIO.GT.1)THEN NRATIO=NINT(RATIO) C NRATIO SHOULD BE 2, 4, 8, ... 128. ELSE NRATIO=NINT(1./RATIO) C NRATIO SHOULD BE 2, 4, 8, ... 128. ENDIF C C DO THICKENING OR THINNING IN STEPS OF 2. C DO 220 L=1,NINT(LOG10(FLOAT(NRATIO))/LOG10(2.)) C CD WRITE(KFILDO,200)L,NRATIO CD200 FORMAT(' IN SZGRID AT 200--L,NRATIO',2I10) C C CALCULATE THE GRID SIZE AND POLE POSITION OF C THE OUTPUT GRID. NO REPOSITIONING IS DONE. C IF(RATIO.GT.1)THEN C IF(ITRPLQ.EQ.1)THEN CALL DENSER(KFILDO,P,NX,NY,ND2X3) C NOTE THAT DENSER CHANGES NX AND NY TO THE C APPROPRIATE VALUES FOR THE INTERPOLATED GRID IN P( ). ELSE CALL DENSRQ(KFILDO,P,NX,NY,ND2X3) C NOTE THAT DENSRQ CHANGES NX AND NY TO THE C APPROPRIATE VALUES FOR THE INTERPOLATED GRID IN P( ). ENDIF C ELSE C CALL THINER(KFILDO,P,NX,NY) C NOTE THAT THINER CHANGES NX AND NY TO THE C APPROPRIATE VALUES FOR THE THINNED GRID IN P( ). ENDIF C 220 CONTINUE C C SET THE MESH LENGTH TO THE OUTPUT GRID. C MESHIN=MESHOUT C CD WRITE(KFILDO,299)MESHIN,MESHOUT,NX,NY,ND2X3 CD299 FORMAT(' IN SZGRID AT 299--MESHIN,MESHOUT,NX,NY,ND2X3', CD 1 5I10) C 300 RETURN END