c
C**** SUBROUTINE GXRSET is called from GREX3, group 19,section 1, and C is entered only when the logical RESET is set to 'T' in the C SATELLITE. C In this example, the time interval is reset so as to ensure that C the rate of change of the total amount of a selected "field-value" C is neither too large nor too small in a single time step. If out- C -of-limits values are encountered, a return is made to the C beginning of the time step, and the calculation is repeated with C a more appropriate interval. C Its use is illustrated in core-library case 109 C SUBROUTINE GXRSET INCLUDE 'farray' INCLUDE 'grdear' INCLUDE 'satear' INCLUDE 'grdloc' INCLUDE 'satgrd' COMMON /NAMFN/NAMFUN,NAMSUB CHARACTER*6 NAMFUN,NAMSUB COMMON/GENR/RGSP1(8),RECDT,RGSP10(11) LOGICAL FIRST SAVE FLDLST,FIRST,DTLST DATA FIRST/.TRUE./ c NAMSUB='GXRSET' c............................................. sum the field values FLDNEW=0.0 DO 10 IZZ=1,NZ CALL FN81(SUM,ANYZ(ISG10,IZZ)) FLDNEW=FLDNEW+SUM 10 CONTINUE FLDNEW=FLDNEW/FLOAT(NX*NY*NZ) IF(ISTEP.EQ.1.AND.FIRST) THEN FLDLST=FLDNEW DTLST=DT FIRST=.FALSE. ENDIF AFLDN=ABS(FLDNEW) AFLDL=ABS(FLDLST) IF(ISTEP.GT.1.AND.(AFLDN-AFLDL.LT.RSG10.OR. 1 AFLDN-AFLDL.GT.RSG11)) THEN c.............................................. modify time step DT=DTLST*RSG11*RSG12/ABS(AFLDN-AFLDL+TINY) WRITE(LUPR1,*)'GXRSET requires time-step repetition' CALL WRIT1I('istep ',istep-1) CALL WRIT3R('time ',tim,'old DT ',dtlst,'new DT ',dt) CALL WRIT2R('fldlst ',fldlst,'fldnew ',fldnew) DTLST=DT c....................................... read in the start-of-step values CALL storea(2) ELSE c....................................... dump the end-of-step values FLDLST=FLDNEW CALL storea(1) ENDIF NAMSUB='gxrset' END c