A ROTINA DA ESQUERDA É A VERSÃO ANTIGA DE 2012 E A ROTINA DA DIREITA É A VERSÃO MODULAR DO Eta1km PROGRAM EBU | PROGRAM EBU C$$$ MAIN PROGRAM DOCUMENTATION BLOCK | !>---------------------------------------------------------------------------------------------- C . . . . | !> MAIN PROGRAM EBU C MAIN PROGRAM: ETAFCST EARLY ETA MODEL FORECAST DRIVER | !> C PRGMMR: JANJIC ORG: NP22 DATE: 99-01-20 | !> MAIN PROGRAM: ETAFCST - EARLY ETA MODEL FORECAST DRIVER C | !> PROGRAMMER: JANJIC C ABSTRACT: EBU3 CONTAINS THE PRIMARY RUNSTREAM FOR THE EARLY ETA | !> ORG: NP22 C FORECAST MODEL. AFTER AN INITIAL CALL TO SUBROUTINE INIT, CALLS | !> DATE: 99-01-20 C ARE MADE TO SUBROUTINES WHICH COMPUTE THE VARIOUS DYNAMICAL AND | !> C PHYSICAL PROCESSES IN THE MODEL. THE VARIABLE 'NTSD' IS THE | !> ABSTRACT: C FUNDAMENTAL TIMESTEP COUNTER AND THUS ITS VALUE DETERMINES WHEN | !> EBU CONTAINS THE PRIMARY RUNSTREAM FOR THE EARLY ETA FORECAST MODEL. C THE SUBROUTINES ARE CALLED. INFORMATION PERTAINING TO THE SCHEMES | !> AFTER AN INITIAL CALL TO SUBROUTINE INIT, CALLS ARE MADE TO SUBROUTINES WHICH COMPUTE THE VAR C USED IN THE MODEL AS WELL AS ADDITIONAL REFERENCES MAY BE FOUND | !> DYNAMICAL AND PHYSICAL PROCESSES IN THE MODEL. C IN "THE STEP-MOUNTAIN ETA COORDINATE REGIONAL MODEL: A DOCUMEN-" | !> THE VARIABLE 'NTSD' IS THE FUNDAMENTAL TIMESTEP COUNTER AND THUS ITS VALUE DETERMINES WHEN TH C TATION" (BLACK 1988; DEVELOPMENT DIVISION) AND "THE NEW NMC MESO- | !> SUBROUTINES ARE CALLED. C SCALE ETA MODEL: DESCRIPTION AND FORECAST EXAMPLES (BLACK 1994; | !> INFORMATION PERTAINING TO THE SCHEMES USED IN THE MODEL AS WELL AS ADDITIONAL REFERENCES MAY C WEATHER AND FORECASTING). | !> FOUND IN "THE STEP-MOUNTAIN ETA COORDINATE REGIONAL MODEL: A DOCUMENTATION" (BLACK 1988; C | !> DEVELOPMENT DIVISION) AND "THE NEW NMC MESO-SCALE ETA MODEL: DESCRIPTION AND FORECAST EXAMPLE C PROGRAM HISTORY LOG: | !> (BLACK 1994; WEATHER AND FORECASTING). C 87-08-?? JANJIC, ORIGINATOR | !> C BLACK | !> PROGRAM HISTORY LOG: C 93-05-12 TREADON DOCBLOCK INSERTED | !> 87-08-?? JANJIC, BLACK - ORIGINATOR C 93-10-25 BLACK DOCBLOCK UPDATED | !> 93-05-12 TREADON - DOCBLOCK INSERTED C 97-03-15 MESINGER SPLITTING MODIFIED, TO SEPARATE THE | !> 93-10-25 BLACK - DOCBLOCK UPDATED C ADJUSTMENT AND THE ADVECTION STEP | !> 97-03-15 MESINGER - SPLITTING MODIFIED, TO SEPARATE THE ADJUSTMENT AND THE ADVECTION ST C 97-11-19 BLACK MODIFIED FOR DISTRIBUTED MEMORY | !> 97-11-19 BLACK - MODIFIED FOR DISTRIBUTED MEMORY C 98-10-20 BLACK DISTRIBUTED MEMORY FORM FOR | !> 98-10-20 BLACK - DISTRIBUTED MEMORY FORM FOR CURRENT OPERATIONAL CODE C CURRENT OPERATIONAL CODE | !> 00-02-25 TUCCILLO - INCORPORATED ASYNCHRONOUS I/O SERVERS C 00-02-25 TUCCILLO INCORPORATED ASYNCHRONOUS I/O SERVERS | !> 00-11-14 BLACK - INCORPORATED JANJIC NONHYDROSTATIC OPTION C 00-11-14 BLACK INCORPORATED JANJIC NONHYDROSTATIC OPTION | !> 00-11-27 BLACK - INCORPORATED RESTART CAPABILITY C 00-11-27 BLACK INCORPORATED RESTART CAPABILITY | !> 18-01-15 LUCCI - MODERNIZATION OF THE CODE, INCLUDING: C | !> * F77 TO F90/F95 C | !> * INDENTATION & UNIFORMIZATION CODE C USAGE: MAIN PROGRAM | !> * REPLACEMENT OF COMMONS BLOCK FOR MODULES C | !> * DOCUMENTATION WITH DOXYGEN C INPUT FILES: NONE (SEE SUBROUTINE INIT) | !> * OPENMP FUNCTIONALITY C | !> C OUTPUT FILES: NONE (SEE SUBROUTINE CHKOUT) | !> INPUT ARGUMENT LIST: C | !> NONE C SUBPROGRAMS CALLED: | !> C UNIQUE: | !> OUTPUT ARGUMENT LIST: C INIT - INITIALIZE VARIABLES AT START OF INTEGRATION | !> NONE C DIVHOA - DIVERGENCE, AND HORIZONTAL PART OF THE OMEGA-ALPHA | !> C TERM | !> INPUT/OUTPUT ARGUMENT LIST: C PGCOR - PRESSURE GRADIENT AND CORIOLIS FORCE | !> NONE C PDTE - UPDATE SURFACE PRESSURE TENDENCY AND ETADOT | !> C VTADV - VERTICAL ADVECTION | !> USE MODULES: BOCOH C HZADV - HORIZONTAL ADVECTION OF T,U,V, AND TKE | !> BOCOV C HZADV2 - HORIZONTAL ADVECTION OF Q AND CLOUD WATER | !> CHKOUT C DDAMP - APPLY DIVERGENCE DAMPING | !> CLTEND C PDNEW - UPDATE SURFACE PRESSURE | !> CUCNVC C HDIFF - LATERAL DIFFUSION | !> DDAMP C BOCOH - UPDATE H POINTS ON THE BOUNDARIES | !> DIVHOA C BOCOV - UPDATE V POINTS ON THE BOUNDARIES | !> DIVHOAST C RADTN - RADIATION DRIVER | !> EXCH C RDTEMP - APPLY TEMPERATURE TENDENCY DUE TO RADIATION | !> GOSSIP C TURBL - PERFORM THE VERTICAL TURBULENT EXCHANGE | !> GSCOND C SURFACE - UPDATE SURFACE TEMPERATURE, MOISTURE, AND OTHER | !> GSMDRIVE C GROUND HYDROLOGY | !> HDIFF C GSCOND - CLOUD WATER/ICE PHYSICS PARAMETERIZATION (EDAS only) | !> HDIFFS C CUCNVC - CONVECTIVE ADJUSTMENT FOR DEEP OR SHALLOW CONVECTION | !> HZADV2 C PRECPD - GRID SCALE PRECIPITATION (EDAS only) | !> INIT C GSMDRIVE - GRID SCALE MICROPHYSICS DRIVER (free forecast only) | !> INITS C ADJPPT - adjust model precipitation to observations | !> MPPINIT C CLTEND - UPDATE TEMPERATURE FROM (GRID- AND SUBGRID-SCALE) CLOUD PROCESSES | !> PDNEW C CHKOUT - POST PROFILE DATA. FOR INTERNAL POST, | !> PDTEDT C POSTS MODEL OUTPUT. FOR EXTERNAL POST, | !> PGCOR C WRITES TEMPORARY FILE CONTAINING ALL MODEL | !> PRECPD C ARRAYS. | !> QUILT C | !> RADTN C EXIT STATES: | !> RDTEMP C COND = 1 - NORMAL EXIT | !> TURBL C | !> VADZ C ATTRIBUTES: | !> VTADV C LANGUAGE: FORTRAN 90 | !> W3TAGB C MACHINE : IBM SP | !> W3TAGE C | !> C$$$ | !> DRIVER : ----- C | !> C ****************************************************************** | !> CALLS : BOCOH C * * | !> BOCOV C * LIMITED AREA ETA MODEL * | !> CHKOUT C * WITH STEP-MOUNTAIN TOPOGRAPHY * | !> CLTEND C * * | !> CUCNVC C * * | !> DDAMP C * NOAA / NATIONAL CENTERS FOR ENVIRONMENTAL PREDICTION, * | !> DIVHOA C * CAMP SPRINGS, MD * | !> DIVHOAST C * * | !> EPS C * GEOPHYSICAL FLUID DYNAMICS LABORATORY / NOAA, PRINCETON, NJ, * | !> EXCH C * * | !> GETENV C * UNIVERSITY CORPORATION FOR ATMOSPHERIC RESEARCH, BOULDER, CO, * | !> GOSSIP C * & * | !> GSCOND C * DEPARTMENT OF METEOROLOGY, UNIVERSITY OF BELGRADE, YUGOSLAVIA * | !> GSMDRIVE C * * | !> HDIFF C ****************************************************************** | !> HDIFFS C | !> HZADV C ****************************************************************** | !> HZADVS C * * | !> HZADV2 C * REFERENCES * | !> INIT C * FOR THE DYNAMICAL PART OF THE MODEL * | !> INITS C * * | !> MPI_BARRIER C * STEP-MOUNTAIN ETA COORDINATE: * | !> MPI_FINALIZE C * F. MESINGER, 1983, IN RES. ACTIVITIES IN ATMOS. AND * | !> MPI_SEND C * OCEANIC MODELING, REP. NO. 5, WMO, GENEVA, 4.9-4.10. * | !> MPPINIT C * * | !> PDNEW C * HORIZONTAL ADVECTION, CONTINUITY EQUATION: * | !> PDTEDT C * Z.I. JANJIC, 1984, MWR, 112, NO.6, 1234-1245. * | !> PGCOR C * * | !> PRECPD C * INTERNAL BOUNDARIES, OMEGA-ALPHA TERM, CODING, PERFORMANCE: * | !> QUILT C * MESINGER ET AL., 1988, MWR, 116 NO.7, 1493-1518. * | !> RADTN C * * | !> RDTEMP C * N.B. FOR MORE DETAILS ON THESE TOPICS SEE ALSO: * | !> SETUP_SERVERS C * * | !> TURBL C * 1. MESINGER, F., AND Z.I. JANJIC, 1985: PROBLEMS AND * | !> VADZ C * NUMERICAL METHODS OF THE INCORPORATION OF MOUNTAINS IN * | !> VTADV C * ATMOSPHERIC MODELS. LECTURES IN APPLIED MATHEMATICS, * | !> W3TAGB C * VOL 22, AMER. MATH. SOC.; ALSO, NUMERICAL METHODS FOR * | !> W3TAGE C * WEATHER PREDICTION, SEMINAR 1983, ECMWF, 103-157; * | !> C * ALSO, SHORT- AND MEDIUM-RANGE WEATHER PREDICTION * | !> C * RESEARCH PUBL. SER., NO. 8, WMO, GENEVA, 175-233. * | !> UNIQUE: C * * | !> INIT - INITIALIZE VARIABLES AT START OF INTEGRATION C * 2. JANJIC, Z.I., AND F. MESINGER, 1983: FINITE-DIFFERENCE * | !> DIVHOA - DIVERGENCE, AND HORIZONTAL PART OF THE OMEGA-ALPHA TERM C * METHODS FOR THE SHALLOW WATER EQUATIONS ON VARIOUS * | !> PGCOR - PRESSURE GRADIENT AND CORIOLIS FORCE C * HORIZONTAL GRIDS. NUMERICAL METHODS FOR WEATHER * | !> PDTE - UPDATE SURFACE PRESSURE TENDENCY AND ETADOT C * PREDICTION, SEMINAR 1983, ECMWF,29-101. * | !> VTADV - VERTICAL ADVECTION C * * | !> HZADV - HORIZONTAL ADVECTION OF T, U, V, AND TKE C * SOME REFERENCES * | !> HZADV2 - HORIZONTAL ADVECTION OF Q AND CLOUD WATER C * FOR THE PHYSICS PART OF THE MODEL * | !> DDAMP - APPLY DIVERGENCE DAMPING C * * | !> PDNEW - UPDATE SURFACE PRESSURE C * JANJIC, Z.I., 1990: THE STEP-MOUNTAIN COORDINATE: * | !> HDIFF - LATERAL DIFFUSION C * PHYSICAL PACKAGE. MONTHLY WEATHER REVIEW, VOL. 118, * | !> BOCOH - UPDATE H POINTS ON THE BOUNDARIES C * NO. 7, 1429-1443. * | !> BOCOV - UPDATE V POINTS ON THE BOUNDARIES C * JANJIC, Z.I., 1994: THE STEP MOUNTAIN ETA COORDINATE: * | !> RADTN - RADIATION DRIVER C * FURTHER DEVELOPMENTS OF THER CONVECTION, VISCOUS SUBLAYER, * | !> RDTEMP - APPLY TEMPERATURE TENDENCY DUE TO RADIATION C * AND TURBULENCE CLOSURE SCHEMES. MONTHLY WEATHER REVIEW, * | !> TURBL - PERFORM THE VERTICAL TURBULENT EXCHANGE C * VOL. 122, 927-945. * | !> SURFACE - UPDATE SURFACE TEMPERATURE, MOISTURE, AND OTHER GROUND HYDROLOGY C * * | !> GSCOND - CLOUD WATER/ICE PHYSICS PARAMETERIZATION (EDAS ONLY) C * ALSO SEE REFERENCES IN PHYSICAL SUBROUTINES * | !> CUCNVC - CONVECTIVE ADJUSTMENT FOR DEEP OR SHALLOW CONVECTION C * * | !> PRECPD - GRID SCALE PRECIPITATION (EDAS ONLY) C ****************************************************************** | !> GSMDRIVE - GRID SCALE MICROPHYSICS DRIVER (FREE FORECAST ONLY) C | !> ADJPPT - ADJUST MODEL PRECIPITATION TO OBSERVATIONS C ****************************************************************** | !> CLTEND - UPDATE TEMPERATURE FROM (GRID- AND SUBGRID-SCALE) CLOUD PROCESSES C * * | !> CHKOUT - POST PROFILE DATA. FOR INTERNAL POST, POSTS MODEL OUTPUT. C * THIS VERSION OF THE PROGRAM IS WRITTEN IN STANDARD ANSI * | !> FOR EXTERNAL POST, WRITES TEMPORARY FILE CONTAINING ALL MODEL ARRAYS. C * FORTRAN 90 * | !> C * * | !> EXIT STATES: C * PRINCIPAL PROGRAMMERS: * | !> COND = 1 - NORMAL EXIT C * * | !>---------------------------------------------------------------------------------------------- C * Z. JANJIC, UNIVERSITY OF BELGRADE, * | ! C * T. BLACK, NCEP | !----------------------------------------------------------------------- C * * | ! LIMITED AREA ETA MODEL WITH STEP-MOUNTAIN TOPOGRAPHY C ****************************************************************** | ! C * * | ! NOAA / NATIONAL CENTERS FOR ENVIRONMENTAL PREDICTION, CAMP SPRINGS, MD C * THE MODEL USES THE SEMI-STAGGERED E GRID IN ARAKAWA NOTATION. * | ! C * HORIZONTAL INDEXING IS TWO-DIMENSIONAL. | ! GEOPHYSICAL FLUID DYNAMICS LABORATORY / NOAA, PRINCETON, NJ C * * | ! C * * | ! UNIVERSITY CORPORATION FOR ATMOSPHERIC RESEARCH, BOULDER, CO. C * * | ! AND C * H(1,JM) V(1,JM) H(2,JM) V(2,JM) ...... V(IM-1,JM) H(IM,JM) * | ! DEPARTMENT OF METEOROLOGY, UNIVERSITY OF BELGRADE, YUGOSLAVIA C * . . . . . . * | !----------------------------------------------------------------------- C * . . . . . . * | ! C * . . . . . . * | !----------------------------------------------------------------------------------------------- C * . . . . . . * | ! C * * | ! REFERENCES FOR THE DYNAMICAL PART OF THE MODEL C * H(1,3) V(1,3) H(2,3) V(2,3) ....... V(IM-1,3) H(IM,3) * | ! C * * | ! STEP-MOUNTAIN ETA COORDINATE: C * V(1,2) H(1,2) V(2,2) H(2,2) ....... H(IM-1,2) V(IM,2) * | ! F. MESINGER, 1983, IN RES. ACTIVITIES IN ATMOS. AND OCEANIC MODELING, REP. NO. 5, C * * | ! WMO, GENEVA, 4.9-4.10. C * H(1,1) V(1,1) H(2,1) V(2,1) ....... V(IM-1,1) H(IM,1) * | ! C * * | ! HORIZONTAL ADVECTION, CONTINUITY EQUATION: C * * | ! Z.I. JANJIC, 1984, MWR, 112, NO.6, 1234-1245. C * * | ! C * ARRAYS ARE DIMENSIONED (IM,JM). NOTE THAT A PHANTOM COLUMN * | ! INTERNAL BOUNDARIES, OMEGA-ALPHA TERM, CODING, PERFORMANCE: C * OF POINTS MUST EXIST ALONG THE EASTERN EDGE FOR THE ARRAYS * | ! MESINGER ET AL., 1988, MWR, 116 NO.7, 1493-1518. C * TO BE COMPLETE. * | ! C * * | ! N.B. FOR MORE DETAILS ON THESE TOPICS SEE ALSO: C * THE TOTAL NUMBER OF GRID POINTS IN THE HORIZONTAL EXCLUDING * | ! C * THE PHANTOM COLUMN IS IMJM=IM*JM-JM/2. * | ! 1. MESINGER, F., AND Z.I. JANJIC, 1985: PROBLEMS AND NUMERICAL METHODS OF THE INCORPORATION O C * * | ! MOUNTAINS IN ATMOSPHERIC MODELS. C * AUXILIARY ARRAYS ARE USED TO LOCATE NEIGHBORING GRID POINTS * | ! LECTURES IN APPLIED MATHEMATICS, VOL 22, AMER. MATH. SOC.; ALSO, NUMERICAL METHODS FOR C * WITH RESPECT TO A GIVEN GRID POINT. IHE(J) IS THE INCREMENT * | ! WEATHER PREDICTION, SEMINAR 1983, ECMWF, 103-157; C * TO THE I INDEX NEEDED TO REFER TO THE V POINT EAST OF AN * | ! ALSO, SHORT AND MEDIUM-RANGE WEATHER PREDICTION RESEARCH PUBL. SER., NO. 8, C * H POINT THUS IHE(J)=0 ON ODD ROWS AND =1 ON EVEN ROWS. * | ! WMO, GENEVA, 175-233. C * IHW(J)=IHE(J)-1 IS THE INCREMENT TO THE INDEX OF AN H POINT * | ! C * TO REFER TO THE V POINT TO THE WEST OF THAT H POINT. THE * | ! 2. JANJIC, Z.I., AND F. MESINGER, 1983: FINITE-DIFFERENCE METHODS FOR THE SHALLOW WATER C * ANALOG EXISTS FOR THE ARRAYS IVE(J) AND IVW(J). * | ! EQUATIONS ON VARIOUS HORIZONTAL GRIDS. C * * | ! NUMERICAL METHODS FOR WEATHER PREDICTION, SEMINAR 1983, ECMWF,29-101. C * BOUNDARY MASKS AND TOPOGRAPHY MASKS ARE DEFINED FOR VECTOR * | ! C * PROCESSING. THE BOUNDARY MASKS HBM2(K) AND VBM2(K) ARE * | ! SOME REFERENCES FOR THE PHYSICS PART OF THE MODEL C * EQUAL TO ONE EVERYWHERE EXCEPT AT THE TWO OUTERMOST ROWS * | ! C * WHERE THEY ARE EQUAL TO ZERO. THE BOUNDARY MASK VBM3(K) IS * | ! JANJIC, Z.I., 1990: THE STEP-MOUNTAIN COORDINATE: C * EQUAL TO ONE EVERYWHERE EXCEPT AT THE THREE OUTERMOST ROWS * | ! PHYSICAL PACKAGE. MONTHLY WEATHER REVIEW, VOL. 118, NO. 7, 1429-1443. C * WHERE IT IS EQUAL TO ZERO. THE TOPOGRAPHY MASKS (HTM(K,L) * | ! JANJIC, Z.I., 1994: THE STEP MOUNTAIN ETA COORDINATE: C * AND VTM(K,L)) ARE SET TO ZERO UNDERNEATH THE TOPOGRAPHY AND * | ! FURTHER DEVELOPMENTS OF THER CONVECTION, VISCOUS SUBLAYER, AND TURBULENCE CLOSURE SCHEMES. C * TO ONE ELSWHERE. IN ADDITION, FOR TREATMENT OF PHYSICAL * | ! MONTHLY WEATHER REVIEW,VOL. 122, 927-945. C * PROCESSES, MAXIMUM VALUES OF THE VERTICAL INDEX ARE DEFINED * | ! C * AND STORED (LMH(K) AND LMV(K). | ! ALSO SEE REFERENCES IN PHYSICAL SUBROUTINES C * * | ! C ****************************************************************** | !----------------------------------------------------------------------------------------------- C | ! C | ! THIS VERSION OF THE PROGRAM IS WRITTEN IN STANDARD ANSI FORTRAN 90 C************************************************************************************ | ! C | ! PRINCIPAL PROGRAMMERS: C THE NUMBER OF QUILT SERVERS MUST AGREE WITH THE FOLLOWING RELATIONSHIP: | ! C | ! Z. JANJIC, UNIVERSITY OF BELGRADE, T. BLACK, NCEP C 0 <= NUMBER_QUILT_SERVERS <= JNPES | ! C | ! THE MODEL USES THE SEMI-STAGGERED E GRID IN ARAKAWA NOTATION. C WHERE THE NUMBER_QUILT_SERVERS = ( NUMBER_OF MPI_TASKS - INPES*JNPES ) | ! HORIZONTAL INDEXING IS TWO-DIMENSIONAL. C | ! C PREFERABLY, THE NUMBER OF QUILT SERVERS DIVIDES EVENLY INTO JNPES | ! H(1,JM) V(1,JM) H(2,JM) V(2,JM) ...... V(IM-1,JM) H(IM,JM) C | ! . . . . . . C Jim Tuccillo August 2000 | ! . . . . . . C | ! . . . . . . C************************************************************************************ | ! . . . . . . C | ! INCLUDE 'EXCHM.h' | ! H(1,3) V(1,3) H(2,3) V(2,3) ....... V(IM-1,3) H(IM,3) L O G I C A L | ! & RUN,FIRST,RESTRT,SIGMA,NEST, CLTEND_test | ! V(1,2) H(1,2) V(2,2) H(2,2) ....... H(IM-1,2) V(IM,2) C----------------------------------------------------------------------- | ! INCLUDE "parmeta" | ! H(1,1) V(1,1) H(2,1) V(2,1) ....... V(IM-1,1) H(IM,1) INCLUDE "mpif.h" | ! INCLUDE "mpp.h" | ! #include "sp.h" | ! C----------------------------------------------------------------------- | ! ARRAYS ARE DIMENSIONED (IM,JM). NOTE THAT A PHANTOM COLUMN OF POINTS MUST EXIST ALONG THE INCLUDE "CTLBLK.comm" | ! EASTERN EDGE FOR THE ARRAYS TO BE COMPLETE. INCLUDE "CONTIN.comm" | ! INCLUDE "VRBLS.comm" | ! THE TOTAL NUMBER OF GRID POINTS IN THE HORIZONTAL EXCLUDING INCLUDE "PVRBLS.comm" | ! THE PHANTOM COLUMN IS IMJM=IM*JM-JM/2. INCLUDE "NHYDRO.comm" | ! INCLUDE "CLDWTR.comm" | ! AUXILIARY ARRAYS ARE USED TO LOCATE NEIGHBORING GRID POINTS WITH RESPECT TO A GIVEN GRID INCLUDE "NSOILTYPE.comm" | ! POINT. IHE(J) IS THE INCREMENT TO THE I INDEX NEEDED TO REFER TO THE V POINT EAST OF AN C----------------------------------------------------------------------- | ! H POINT THUS IHE(J)=0 ON ODD ROWS AND =1 ON EVEN ROWS. LOGICAL SLOPE | ! IHW(J)=IHE(J)-1 IS THE INCREMENT TO THE INDEX OF AN H POINT TO REFER TO THE V POINT TO THE NAMELIST /SLOPENML/ SLOPE | ! WEST OF THAT H POINT. THE ANALOG EXISTS FOR THE ARRAYS IVE(J) AND IVW(J). C----------------------------------------------------------------------- | ! C*** | ! BOUNDARY MASKS AND TOPOGRAPHY MASKS ARE DEFINED FOR VECTOR PROCESSING. THE BOUNDARY MASKS C*** THE FOLLOWING ARE USED FOR TIMIMG PURPOSES ONLY | ! HBM2(K) AND VBM2(K) ARE EQUAL TO ONE EVERYWHERE EXCEPT AT THE TWO OUTERMOST ROWS WHERE THEY C*** | ! ARE EQUAL TO ZERO. THE BOUNDARY MASK VBM3(K) IS EQUAL TO ONE EVERYWHERE EXCEPT AT THE THREE real*8 timef | ! OUTERMOST ROWS WHERE IT IS EQUAL TO ZERO. THE TOPOGRAPHY MASKS (HTM(K,L) AND VTM(K,L)) ARE real nhb_tim,mpp_tim,init_tim | ! SET TO ZERO UNDERNEATH THE TOPOGRAPHY AND TO ONE ELSWHERE. IN ADDITION, FOR TREATMENT OF common/timing/surfce_tim,nhb_tim,res_tim,exch_tim | ! PHYSICAL PROCESSES, MAXIMUM VALUES OF THE VERTICAL INDEX ARE DEFINED AND STORED (LMH(K) AND CYL | ! LMV(K). character envar*4, srfile*7 | ! CYL | !----------------------------------------------------------------------------------------------- C | ! THE NUMBER OF QUILT SERVERS MUST AGREE WITH THE FOLLOWING RELATIONSHIP: C----------------------------------------------------------------------- | ! 0 <= NUMBER_QUILT_SERVERS <= JNPES C*** | ! WHERE THE NUMBER_QUILT_SERVERS = ( NUMBER_OF MPI_TASKS - INPES*JNPES ) C*** INITIALIZE MPI, | ! C*** SETUP I/O SERVER MECHANICS AND CHECK FOR WHETHER A | ! PREFERABLY, THE NUMBER OF QUILT SERVERS DIVIDES EVENLY INTO JNPES C*** SUFFICIENT NUMBER OF MPI TASKS HAVE BEEN INITIATED. | ! C*** IF INSUFFICIENT MPI TASK HAVE BEEN INITIATED THE | ! JIM TUCCILLO - AUGUST 2000 C*** CODE WILL STOP IN SETUP_SERVERS | !----------------------------------------------------------------------------------------------- C*** | USE CLDWTR CALL SETUP_SERVERS(INPES*JNPES, | USE CONTIN * MYPE, | USE CTLBLK * NPES, | USE EXCHM * IQUILT_GROUP, | USE F77KINDS * INUMQ, | USE GLB_TABLE * MPI_COMM_COMP, | USE MAPPINGS * MPI_COMM_INTER, | USE MPPCOM * MPI_COMM_INTER_ARRAY) | USE NHYDRO C | USE NSOILTYPE IF(MYPE.EQ.0)THEN | USE PARMETA CALL W3TAGB('ETAFCST ',0097,0365,0060,'NP22 ') | USE PVRBLS ENDIF | USE TEMPCOM C | USE TIMMING IF(MYPE.EQ.NPES)THEN | USE TOPO Cmp CALL START() | USE VRBLS ENDIF | ! C | IMPLICIT NONE C*** | ! C*** AT THIS POINT NPES IS THE NUMBER OF MPI TASKS WORKING ON THE | INCLUDE "EXCHM.h" C*** MODEL INTEGRATION. ALL OTHER TASKS ARE I/O SERVERS. | ! C | LOGICAL(KIND=L4KIND) C*** AND AWAY WE GO ! | & CLTEND_TEST C*** | ! IF(MYPE.GE.NPES)THEN | INCLUDE "mpif.h" C | ! C*** FIRE UP THE I/O SERVERS | #include "sp.h" C | ! CALL QUILT | LOGICAL(KIND=L4KIND) C | & GSPREC ELSE | ! C*** | NAMELIST /GSPRECNML/ GSPREC C*** THESE ARE THE TASKS THAT DO THE MODEL INTEGRATION | ! C*** | LOGICAL(KIND=L4KIND) C----------------------------------------------------------------------- | & SLOPE mpp_tim= 0. | ! C | NAMELIST /SLOPENML/ SLOPE bocoh_tim= 0. | !------------------------------------------------ bocov_tim= 0. | ! THE FOLLOWING ARE USED FOR TIMIMG PURPOSES ONLY chkout_tim=0. | !------------------------------------------------ cltend_tim=0. | REAL (KIND=R8KIND) cucnvc_tim=0. | & TIMEF ddamp_tim= 0. | !------------------------ divhoa_tim=0. | ! IMPLICIT NONE VARIABLES exch_tim= 0. | !------------------------ goss_tim= 0. | REAL (KIND=R4KIND) gscond_tim=0. | & BOCOH_TIM , BOCOV_TIM , CHKOUT_TIM , CLTEND_TIM , gsmdrive_tim=0. | & CUCNVC_TIM , DDAMP_TIM , DIVHOA_TIM , EPS_TIM , hdiff_tim= 0. | & GOSS_TIM , GSCOND_TIM , GSMDRIVE_TIM , HADZ_TIM , hzadv_tim= 0. | & HDIFF_TIM , HZADV_TIM , HZADV2_TIM , INIT_TIM , hzadv2_tim=0. | & MPP_TIM , PDNEW_TIM , PDTEDT_TIM , PGCOR_TIM , init_tim= 0. | & PPTADJ_TIM , PRECPD_TIM , RADTN_TIM , RDTEMP_TIM , nhb_tim= 0. | & TURBL_TIM , VADZ_TIM , VTADV_TIM , TOT2_TIM , pdnew_tim= 0. | & TOT_TIM pdtedt_tim=0. | ! pgcor_tim= 0. | REAL (KIND=R4KIND) cyl | & BTIMX , BTIM , BBTIM , PCT pptadj_tim=0. | ! cyl | INTEGER(KIND=I4KIND) radtn_tim= 0. | & I , IER , IERR , ICLTEND, K rdtemp_tim=0. | ! res_tim= 0. | CHARACTER(LEN=8) surfce_tim=0. | & ENVAR , SRFILE turbl_tim= 0. | !----------------------------------------------------------------------------------------------- vtadv_tim= 0. | ! INITIALIZE MPI, SETUP I/O SERVER MECHANICS AND CHECK FOR WHETHER A SUFFICIENT NUMBER OF MPI TA vadz_tim= 0. | ! HAVE BEEN INITIATED. hadz_tim= 0. | ! IF INSUFFICIENT MPI TASK HAVE BEEN INITIATED THE CODE WILL STOP IN SETUP_SERVERS eps_tim= 0. | !----------------------------------------------------------------------------------------------- C----------------------------------------------------------------------- | CALL SETUP_SERVERS(INPES*JNPES , MYPE , NPES , IQUILT_GROUP, INUMQ, C*** | & MPI_COMM_COMP, MPI_COMM_INTER, MPI_COMM_INTER_ARRAY) C*** INITIALIZE ALL QUANTITIES ASSOCIATED WITH GRID DECOMPOSITION | ! C*** | IF (MYPE == 0) THEN btimx=timef() | CALL W3TAGB('ETAFCST ',0097,0365,0060,'NP22 ') btim=timef() | END IF CALL MPPINIT | !-------------------------------------------------------------------------------- mpp_tim=mpp_tim+timef()-btim | ! AT THIS POINT NPES IS THE NUMBER OF MPI TASKS WORKING ON THE MODEL INTEGRATION. C----------------------------------------------------------------------- | ! ALL OTHER TASKS ARE I/O SERVERS. AND AWAY WE GO ! C--------INITIALIZE CONSTANTS AND VARIABLES----------------------------- | !-------------------------------------------------------------------------------- C--------DISTRIBUTE THE VALUES TO THE VARIOUS NODES/PEs----------------- | IF (MYPE >= NPES) THEN C----------------------------------------------------------------------- | !------------------------ | ! FIRE UP THE I/O SERVERS write(6,*) 'lendo a QUANTIDADE DE TIPOS DE SOLO ' | !------------------------ open(1,file='TYPSOLO',form='formatted',status='old') | CALL QUILT read(1,110)NSOTYP | ! 110 format(I2) | ELSE close(1) | !-------------------------------------------------- write(6,*) 'NSOTY: ',NSOTYP | ! THESE ARE THE TASKS THAT DO THE MODEL INTEGRATION | !-------------------------------------------------- OPEN(UNIT=9,FILE="slope.nml",STATUS="OLD") | BOCOH_TIM = 0. READ(9,SLOPENML) | BOCOV_TIM = 0. CLOSE(9) | CHKOUT_TIM = 0. WRITE(*,SLOPENML) | CLTEND_TIM = 0. | CUCNVC_TIM = 0. bbtim=timef() | DDAMP_TIM = 0. IF (SLOPE) THEN | DIVHOA_TIM = 0. CALL INITS | EPS_TIM = 0. ELSE | EXCH_TIM = 0. CALL INIT | GOSS_TIM = 0. END IF | GSCOND_TIM = 0. init_tim=timef()-bbtim | GSMDRIVE_TIM = 0. C | HADZ_TIM = 0. btim=timef() | HDIFF_TIM = 0. CALL GOSSIP | HZADV_TIM = 0. goss_tim=goss_tim+timef()-btim | HZADV2_TIM = 0. C----------------------------------------------------------------------- | INIT_TIM = 0. C--------INVOKE THE LYNCH DIGITAL FILTER IF DESIRED-------------------- | MPP_TIM = 0. C----------------------------------------------------------------------- | NHB_TIM = 0. C DO NFLT=1,3 | PDNEW_TIM = 0. C IF(.NOT.NEST.AND.NFLT.GT.1.AND.MYPE.EQ.0)THEN | PDTEDT_TIM = 0. C REWIND NBC | PGCOR_TIM = 0. C READ(NBC) | PPTADJ_TIM = 0. C READ(NBC)BCHR | PRECPD_TIM = 0. C | RADTN_TIM = 0. C ENDIF | RDTEMP_TIM = 0. C CALL DIGFLT | RES_TIM = 0. C | SURFCE_TIM = 0. C ENDDO | TURBL_TIM = 0. CALL GETENV("tmmark",ENVAR) | VADZ_TIM = 0. C IF(MYPE.EQ.0) PRINT *, "EBU finds that tmmark =",ENVAR | VTADV_TIM = 0. write(0,*) "EBU finds that tmmark =",ENVAR | !------------------------------------------------------------- IF(ENVAR.NE.'tm00') then | ! INITIALIZE ALL QUANTITIES ASSOCIATED WITH GRID DECOMPOSITION Cmp write(srfile,10) envar | !------------------------------------------------------------- 10 format('SR.',a4) | BTIMX = TIMEF() Cmp open(90,file=srfile,form='unformatted') | BTIM = TIMEF() Cmp CALL READPCP | ! endif | CALL MPPINIT CYL | ! !----------------------------------------------------------------------- | MPP_TIM = MPP_TIM + TIMEF() - BTIM CLTEND_test=.TRUE. | !----------------------------------------------- IF (NPHS .NE. NCNVC) THEN | ! INITIALIZE CONSTANTS AND VARIABLES CLTEND_test=.FALSE. | ! DISTRIBUTE THE VALUES TO THE VARIOUS NODES/PES IF (ENVAR .NE. 'tm00') THEN | !----------------------------------------------- WRITE(0,"(A)") 'WARNING: RESULTS COULD BE IN ERROR !' | IF (MYPE == 0) THEN ! WRITE(6,"(A)") 'WARNING: RESULTS COULD BE IN ERROR !' | WRITE(6,*) 'LENDO A QUANTIDADE DE TIPOS DE SOLO ' ENDIF | END IF ENDIF | ! !----------------------------------------------------------------------- | OPEN(1, FILE='TYPSOLO', FORM='FORMATTED', STATUS='OLD') !-------- Special consideration when NTSD=0 at start of forecast ------- | READ(1,110) NSOTYP !----------------------------------------------------------------------- | 110 FORMAT(I2) IF (NTSD .EQ. 0) NTSD=1 | CLOSE(1) C----------------------------------------------------------------------- | ! C----- Called at beginning every time in order to test cycling | IF (MYPE == 0) THEN C----------------------------------------------------------------------- | WRITE(6,*) 'NSOTY: ',NSOTYP IF ( MOD(NTSD,NRADS).EQ.1 .OR. MOD(NTSD,NRADL).EQ.1 ) THEN | END IF btim=timef() | ! CALL RADTN | OPEN(UNIT=1, FILE='GSPREC.nml', STATUS='OLD') radtn_tim=radtn_tim+timef()-btim | READ(1,GSPRECNML) ENDIF | CLOSE(1) C----------------------------------------------------------------------- | ! C------------------GENERATE INITIAL OUTPUT------------------------------ | IF (MYPE == 0) THEN C----------------------------------------------------------------------- | IF (GSPREC) THEN btim=timef() | WRITE(6,*) 'UTILIZANDO: FERRIER' CALL CHKOUT | ELSE chkout_tim=chkout_tim+timef()-btim | WRITE(6,*) 'UTILIZANDO: ZHAO' IF (NTSD .EQ. 1) NTSD=0 | END IF C----------------------------------------------------------------------- | END IF C********ENTRY INTO THE TIME LOOP*************************************** | ! C----------------------------------------------------------------------- | OPEN(UNIT=9, FILE="SLOPE.nml", STATUS="OLD") 2000 CONTINUE | READ(9,SLOPENML) NTSD=NTSD+1 | CLOSE(9) ! IF(MYPE.EQ.0)WRITE(6,2001) NTSD,(NTSD-1)*DT,(NTSD-1)*DT/3600. | ! IF(MYPE.EQ.0)WRITE(0,2001) NTSD,(NTSD-1)*DT,(NTSD-1)*DT/3600. | WRITE(*,SLOPENML) 2001 FORMAT('EBU: TIMESTEP NTSD=',I5,' FCST TIME=',F7.0,' s', | ! & ' and ',F6.3,' h') | BBTIM = TIMEF() C----------------------------------------------------------------------- | ! C*** START THE ADJUSTMENT STEP: INTEGRATE FORWARD THE CONTINUITY | IF (SLOPE) THEN C*** EQUATION (UPDATE THE MASS FIELD) | CALL INITS C----------------------------------------------------------------------- | ELSE C*** | CALL INIT C*** DIVERGENCE AND HORIZONTAL PART OF THE OMEGA-ALPHA TERM | END IF C*** | ! IF(NTSD.GT.1)CALL EXCH(T,LM,U,LM,V,LM,Q,LM,2,2) | INIT_TIM = TIMEF() - BBTIM C | ! IF(.NOT.HYDRO)THEN | BTIM = TIMEF() IF(NTSD.GT.1)CALL EXCH(DWDT,LM,PINT,LM+1,5,5) | ! ENDIF | CALL GOSSIP C | ! btim=timef() | GOSS_TIM = GOSS_TIM + TIMEF() - BTIM IF (SLOPE) THEN | !------------------------------------------- CJLG CALL DIVHOAS | ! INVOKE THE LYNCH DIGITAL FILTER IF DESIRED CALL DIVHOAST | !------------------------------------------- ELSE | ! DO NFLT=1,3 CALL DIVHOA | ! IF (.NOT. NEST .AND .NFLT .GT. 1 .AND. MYPE .EQ. 0) THEN END IF | ! REWIND NBC divhoa_tim=divhoa_tim+timef()-btim | ! READ(NBC) C | ! READ(NBC)BCHR C----------------------------------------------------------------------- | ! C--------PRESSURE TENDENCY, ETA/SIGMA DOT, VERTICAL OMEGA-ALPHA--------- | ! END IF C----------------------------------------------------------------------- | ! CALL DIGFLT C | ! btim=timef() | ! END DO CALL EXCH(PD,1,DIV,LM,PINT,LM+1,2,2) | ! exch_tim=exch_tim+timef()-btim | CALL GETENV("TMMARK", ENVAR) C | ! btim=timef() | WRITE(0,*) "EBU FINDS THAT TMMARK =", ENVAR CALL PDTEDT !Contains call to EXCH | ! pdtedt_tim=pdtedt_tim+timef()-btim | IF (ENVAR /= 'TM00') THEN C | ! C----------------------------------------------------------------------- | 10 FORMAT('SR.',A4) C--------DO VERTICAL ADVECTION WITHIN THE FIRST ADJUSTMENT STEP--------- | ! C----------------------------------------------------------------------- | END IF C | ! IF(MOD(NTSD-1,IDTAD).EQ.0)THEN | CLTEND_TEST = .TRUE. btim=timef() | ! CALL EXCH(ETADT,LM-1,1,1) | IF (NPHS /= NCNVC) THEN exch_tim=exch_tim+timef()-btim | CLTEND_TEST = .FALSE. C | IF (ENVAR /= 'TM00') THEN btim=timef() | WRITE(0,"(A)") 'WARNING: RESULTS COULD BE IN ERROR !' CALL VTADV | END IF vtadv_tim=vtadv_tim+timef()-btim | END IF C | !------------------------------------------------------- btim=timef() | ! SPECIAL CONSIDERATION WHEN NTSD=0 AT START OF FORECAST CALL EXCH(T,LM,U,LM,V,LM,Q,LM,Q2,LM,1,1) | !------------------------------------------------------- exch_tim=exch_tim+timef()-btim | IF (NTSD == 0) NTSD = 1 ENDIF | !-------------------------------------------------------- C | ! CALLED AT BEGINNING EVERY TIME IN ORDER TO TEST CYCLING C----------------------------------------------------------------------- | !-------------------------------------------------------- C--------UPDATING PRESSURE DIFFERENCE----------------------------------- | IF (MOD(NTSD,NRADS) == 1 .OR. MOD(NTSD,NRADL) == 1) THEN C----------------------------------------------------------------------- | BTIM = TIMEF() C | ! btim=timef() | CALL RADTN CALL PDNEW | ! pdnew_tim=pdnew_tim+timef()-btim | RADTN_TIM = RADTN_TIM + TIMEF() - BTIM C | END IF C----------------------------------------------------------------------- | !------------------------ C--------UPDATING BOUNDARY VALUES AT HEIGHT POINTS---------------------- | ! GENERATE INITIAL OUTPUT C----------------------------------------------------------------------- | !------------------------ C | BTIM = TIMEF() btim=timef() | ! IF(MOD(NTSD,IDTAD).EQ.0)THEN | CALL CHKOUT CALL EXCH(T,LM,Q,LM,Q2,LM,1,1) | ! ENDIF | CHKOUT_TIM = CHKOUT_TIM + TIMEF() - BTIM CALL EXCH(PD,1,CWM,LM,1,1) | ! exch_tim=exch_tim+timef()-btim | IF (NTSD == 1) NTSD = 0 C | !------------------------- btim=timef() | ! ENTRY INTO THE TIME LOOP CALL BOCOH | !------------------------- bocoh_tim=bocoh_tim+timef()-btim | 2000 CONTINUE C | NTSD = NTSD + 1 C----------------------------------------------------------------------- | ! C*** INTEGRATE BACKWARD THE MOMENTUM EQUATION | IF (MYPE == 0) WRITE(0,2001) NTSD, (NTSD-1) * DT, (NTSD-1) * DT / 3600. C*** (UPDATE THE WIND FIELD) | 2001 FORMAT('EBU: TIMESTEP NTSD=',I5,' FCST TIME=',F7.0,' S',' AND ',F8.3,' H') C----------------------------------------------------------------------- | !--------------------------------------------------------------------------------------------- C | ! START THE ADJUSTMENT STEP: INTEGRATE FORWARD THE CONTINUITY EQUATION (UPDATE THE MASS FIELD) C*** PRESSURE GRADIENT AND CORIOLIS FORCE TERMS | !--------------------------------------------------------------------------------------------- C | ! btim=timef() | !------------------------------------------------------- CALL EXCH(PD,1,T,LM,Q,LM,2,2) | ! DIVERGENCE AND HORIZONTAL PART OF THE OMEGA-ALPHA TERM C | !------------------------------------------------------- IF(.NOT.HYDRO)THEN | IF (NTSD > 1) CALL EXCH(T , LM, U , LM, V, LM, Q, LM, 2, 2) CALL EXCH(PINT,LM+1,5,5) | ! ENDIF | IF (.NOT. HYDRO) THEN C | IF (NTSD > 1) CALL EXCH(DWDT, LM, PINT, LM+1, 5, 5) exch_tim=exch_tim+timef()-btim | END IF C | ! btim=timef() | BTIM = TIMEF() CALL PGCOR | ! pgcor_tim=pgcor_tim+timef()-btim | IF (SLOPE) THEN C | !GSM CALL DIVHOAST btim=timef() | CALL DIVHOASTQL CALL EXCH(PDSL,1,5,5) | ELSE exch_tim=exch_tim+timef()-btim | CALL DIVHOA C | END IF C----------------------------------------------------------------------- | ! C--------DIVERGENCE DAMPING--------------------------------------------- | DIVHOA_TIM = DIVHOA_TIM + TIMEF() - BTIM C----------------------------------------------------------------------- | !------------------------------------------------------- C | ! PRESSURE TENDENCY, ETA/SIGMA DOT, VERTICAL OMEGA-ALPHA IF(MOD(NTSD,NTDDMP).EQ.0)THEN | !------------------------------------------------------- btim=timef() | BTIM = TIMEF() CALL EXCH(T,LM,U,LM,V,LM,DIV,LM,1,1) | ! exch_tim=exch_tim+timef()-btim | CALL EXCH(PD, 1, DIV, LM, PINT, LM+1, 2, 2) C | ! btim=timef() | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM CALL DDAMP | ! ddamp_tim=ddamp_tim+timef()-btim | BTIM = TIMEF() ENDIF | ! C----------------------------------------------------------------------- | CALL PDTEDT !CONTAINS CALL TO EXCH C--------UPDATING BOUNDARY VALUES AT VELOCITY POINTS-------------------- | ! C----------------------------------------------------------------------- | PDTEDT_TIM = PDTEDT_TIM + TIMEF() - BTIM C | !------------------------------------------------------- btim=timef() | ! DO VERTICAL ADVECTION WITHIN THE FIRST ADJUSTMENT STEP CALL EXCH(U,LM,V,LM,1,1) | !------------------------------------------------------- exch_tim=exch_tim+timef()-btim | IF (MOD(NTSD-1,IDTAD) == 0) THEN C | BTIM = TIMEF() btim=timef() | ! CALL BOCOV | CALL EXCH(ETADT,LM-1,1,1) bocov_tim=bocov_tim+timef()-btim | ! C | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM C----------------------------------------------------------------------- | ! C*** | BTIM = TIMEF() C*** THE ADJUSTMENT STEP IS NOW DONE. MAKE THE REMAINING CALLS WHICH | ! C*** TRADITIONALLY (SO FAR) HAVE BEEN DONE EVERY ADJUSTMENT STEP | CALL VTADV C*** | ! C----------------------------------------------------------------------- | VTADV_TIM = VTADV_TIM + TIMEF() - BTIM C--------APPLY TEMPERATURE TENDENCY DUE TO RADIATION-------------------- | ! C----------------------------------------------------------------------- | BTIM = TIMEF() C | ! btim=timef() | CALL EXCH(T, LM, U, LM, V, LM, Q, LM, Q2, LM, 1, 1) CALL RDTEMP | ! rdtemp_tim=rdtemp_tim+timef()-btim | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM C | END IF C----------------------------------------------------------------------- | !----------------------------- C--------LATERAL DIFFUSION---------------------------------------------- | ! UPDATING PRESSURE DIFFERENCE C----------------------------------------------------------------------- | !----------------------------- C | BTIM = TIMEF() btim=timef() | ! CALL EXCH(T,LM,U,LM,V,LM,Q,LM,2,2) | CALL PDNEW CALL EXCH(Q2,LM,1,1) | ! exch_tim=exch_tim+timef()-btim | PDNEW_TIM = PDNEW_TIM + TIMEF() - BTIM C | !----------------------------------------- btim=timef() | ! PDATING BOUNDARY VALUES AT HEIGHT POINTS CALL HDIFF | !----------------------------------------- hdiff_tim=hdiff_tim+timef()-btim | BTIM = TIMEF() C | ! C----------------------------------------------------------------------- | IF (MOD(NTSD,IDTAD) == 0) THEN C------- HORIZONTAL ADVECTION ------------------------------------------ | ! C----------------------------------------------------------------------- | CALL EXCH(T, LM, Q, LM, Q2, LM, 1, 1) C | ! IF(MOD(NTSD,IDTAD).EQ.0)THEN | END IF btim=timef() | ! CALL EXCH(T,LM,U,LM,V,LM,4,4) | CALL EXCH(PD, 1, CWM, LM, 1, 1) CALL EXCH(Q2,LM,5,5) | ! exch_tim=exch_tim+timef()-btim | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM C | ! btim=timef() | BTIM = TIMEF() IF (SLOPE) THEN | ! CALL HZADVS | CALL BOCOH CJLG CALL SLADVT | ! ELSE | BOCOH_TIM = BOCOH_TIM + TIMEF() - BTIM CALL HZADV | !----------------------------------------------------------------- C CALL HZADV_LM1 | ! INTEGRATE BACKWARD THE MOMENTUM EQUATION (UPDATE THE WIND FIELD) END IF | !----------------------------------------------------------------- hzadv_tim=hzadv_tim+timef()-btim | ! C | !------------------------------------------ btim=timef() | !PRESSURE GRADIENT AND CORIOLIS FORCE TERMS CALL EXCH(U,LM,V,LM,Q,LM,CWM,LM,2,2) | !------------------------------------------ exch_tim=exch_tim+timef()-btim | BTIM = TIMEF() C | ! C*** HORIZONTAL ADVECTION OF WATER SUBSTANCE | CALL EXCH(PD, 1, T, LM, Q, LM, 2, 2) C | ! btim=timef() | IF (.NOT. HYDRO) THEN CALL HZADV2 | CALL EXCH(PINT, LM+1, 5, 5) hzadv2_tim=hzadv2_tim+timef()-btim | END IF ENDIF | ! C----------------------------------------------------------------------- | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM C | ! C*** IF THE TIME IS RIGHT, NOW DO VARIOUS PHYSICS CALLS | BTIM = TIMEF() C*** (WARNING: TO AVOID ENDING THE INTEGRATION WITH PHYSICS CALLS | ! C*** WHICH HAVE NOT BEEN FOLLOWED BY ADJUSTMENT STEPS, PHYSICS CALLS | C*** ARE OFFSET BY HALVES OF VARIOUS CALLING INTERVALS. IT IS | C*** ASSUMED THAT THE CALLING INTERVALS, NPHS AND NCNVC, | CALL PGCOR C*** ARE DIVISIBLE BY IDTAD. IF NOT, INTEGRATION WILL END WITH AN | ! C*** INCORRECT NUMBER OF CALLS HAVING BEEN MADE. | PGCOR_TIM = PGCOR_TIM + TIMEF() - BTIM C | ! C----------------------------------------------------------------------- | BTIM = TIMEF() C--------TURBULENT PROCESSES AND PRECIPITATION-------------------------- | ! C----------------------------------------------------------------------- | CALL EXCH(PDSL, 1, 5, 5) IF(MOD(NTSD-NPHS/2,NPHS).EQ.0)THEN | ! IF (MYPE.EQ.0) THEN | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM WRITE(0,"(a)") 'EBU: Physics time step' | !------------------- ! WRITE(6,"(a)") 'EBU: Physics time step' | ! DIVERGENCE DAMPING ENDIF | !------------------- btim=timef() | IF (MOD(NTSD,NTDDMP) == 0) THEN CALL EXCH(PD,1,UZ0,1,VZ0,1,T,LM,U,LM,V,LM,Q,LM,1,1) | BTIM = TIMEF() exch_tim=exch_tim+timef()-btim | ! C | CALL EXCH(T, LM, U, LM, V, LM, DIV, LM, 1, 1) btim=timef() | ! CALL TURBL !Contains calls to EXCH | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM turbl_tim=turbl_tim+timef()-btim | BTIM = TIMEF() !----------------------------------------------------------------------- | ! !--- Store original temperature array | CALL DDAMP !----------------------------------------------------------------------- | ! IF (CLTEND_test) THEN | DDAMP_TIM = DDAMP_TIM + TIMEF() - BTIM btim=timef() | END IF ICLTEND=-1 | !-------------------------------------------- CALL CLTEND (ICLTEND) | ! UPDATING BOUNDARY VALUES AT VELOCITY POINTS cltend_tim=cltend_tim+timef()-btim | !-------------------------------------------- ENDIF | BTIM = TIMEF() C----------------------------------------------------------------------- | ! C--------CONVECTIVE PRECIPITATION--------------------------------------- | CALL EXCH(U, LM, V, LM, 1, 1) C----------------------------------------------------------------------- | ! btim=timef() | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM CGSM CALL CUCNVC | BTIM = TIMEF() cucnvc_tim=cucnvc_tim+timef()-btim | ! C----------------------------------------------------------------------- | CALL BOCOV C-- GRIDSCALE MICROPHYSICS (CONDENSATION & PRECIPITATION; forecast only | ! C----------------------------------------------------------------------- | BOCOV_TIM = BOCOV_TIM + TIMEF() - BTIM btim=timef() | !----------------------------------------------------------------------------------------------- CALL GSMDRIVE | ! THE ADJUSTMENT STEP IS NOW DONE. MAKE THE REMAINING CALLS WHICH TRADITIONALLY (SO FAR) HAVE BE gsmdrive_tim=gsmdrive_tim+timef()-btim | ! DONE EVERY ADJUSTMENT STEP C----------------------------------------------------------------------- | !----------------------------------------------------------------------------------------------- C--------PRECIPIPTATION ASSIMILATION------------------------------------ | ! C----------------------------------------------------------------------- | !-------------------------------------------- ! IF (ENVAR .NE. 'tm00') THEN | ! APPLY TEMPERATURE TENDENCY DUE TO RADIATION ! btim=timef() | !-------------------------------------------- ! CALL CHKSNOW | BTIM = TIMEF() ! CALL ADJPPT | ! ! pptadj_tim=pptadj_tim+timef()-btim | CALL RDTEMP ! ENDIF | ! !----------------------------------------------------------------------- | RDTEMP_TIM = RDTEMP_TIM + TIMEF() - BTIM !-------- Calculate temp tendencies and restore original temps --------- | !------------------ !----------------------------------------------------------------------- | ! LATERAL DIFFUSION IF (CLTEND_test) THEN | !------------------ btim=timef() | BTIM = TIMEF() ICLTEND=0 | ! CALL CLTEND (ICLTEND) | CALL EXCH(T , LM, U, LM, V, LM, Q, LM, 2, 2) cltend_tim=cltend_tim+timef()-btim | ! ENDIF | CALL EXCH(Q2, LM, 1, 1) !-------------------------------- | ! !----- End physics IF loop ------ | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM !-------------------------------- | ! ENDIF | BTIM = TIMEF() !----------------------------------------------------------------------- | ! !----- Update temp tendencies from cloud processes every time step ----- | IF (SLOPE) THEN !----------------------------------------------------------------------- | CALL HDIFFS IF (CLTEND_test) THEN | ELSE btim=timef() | CALL HDIFF ICLTEND=1 | END IF CALL CLTEND (ICLTEND) | ! cltend_tim=cltend_tim+timef()-btim | HDIFF_TIM = HDIFF_TIM + TIMEF() - BTIM ENDIF | !--------------------- C | ! HORIZONTAL ADVECTION C----------------------------------------------------------------------- | !--------------------- C-------------------VERTICAL ADVECTION OF HEIGHT------------------------ | IF (MOD(NTSD,IDTAD) == 0) THEN C----------------------------------------------------------------------- | BTIM = TIMEF() btim=timef() | ! CALL VADZ | CALL EXCH(T , LM, U, LM, V, LM, 4, 4) vadz_tim=vadz_tim+timef()-btim | ! C----------------------------------------------------------------------- | CALL EXCH(Q2, LM, 5, 5) C-------------------HORIZONTAL ADVECTION OF HEIGHT---------------------- | ! C----------------------------------------------------------------------- | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM IF(.NOT.HYDRO)THEN | ! btim=timef() | BTIM = TIMEF() CALL EXCH(U,LM,V,LM,1,1) | ! CALL EXCH(Z,LM+1,2,2) | IF (SLOPE) THEN exch_tim=exch_tim+timef()-btim | CALL HZADVS ENDIF | ! CALL SLADVT C | ELSE btim=timef() | CALL HZADV CALL HADZ | ! CALL HZADV_LM1 hadz_tim=hadz_tim+timef()-btim | END IF C----------------------------------------------------------------------- | ! C------------------------ ADVECTION OF W ------------------------------- | HZADV_TIM = HZADV_TIM + TIMEF() - BTIM C----------------------------------------------------------------------- | ! IF(HYDRO)THEN | BTIM = TIMEF() btim=timef() | ! CALL EXCH(PDSL,1,2,2) | CALL EXCH(U, LM, V, LM, Q, LM, CWM, LM, 2, 2) CALL EXCH(PINT,LM+1,3,3) | ! exch_tim=exch_tim+timef()-btim | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM ELSE | !---------------------------------------- btim=timef() | ! HORIZONTAL ADVECTION OF WATER SUBSTANCE CALL EXCH(PDSL,1,2,2) | !---------------------------------------- CALL EXCH(U,LM,V,LM,DWDT,LM,PINT,LM+1,W,LM+1,3,3) | BTIM = TIMEF() exch_tim=exch_tim+timef()-btim | ! ENDIF | CALL HZADV2 C | ! btim=timef() | HZADV2_TIM = HZADV2_TIM + TIMEF() - BTIM CALL EPS | END IF eps_tim=eps_tim+timef()-btim | !----------------------------------------------------------------------------------------------- IF(NTSD.GT.NSTART+1)THEN | ! IF THE TIME IS RIGHT, NOW DO VARIOUS PHYSICS CALLS C----------------------------------------------------------------------- | ! (WARNING: TO AVOID ENDING THE INTEGRATION WITH PHYSICS CALLS WHICH HAVE NOT BEEN FOLLOWED BY C------------------------RADIATION-------------------------------------- | ! ADJUSTMENT STEPS, PHYSICS CALLS ARE OFFSET BY HALVES OF VARIOUS CALLING INTERVALS. C----------------------------------------------------------------------- | ! IT IS ASSUMED THAT THE CALLING INTERVALS, NPHS AND NCNVC, ARE DIVISIBLE BY IDTAD. IF ( MOD(NTSD,NRADS).EQ.1 .OR. MOD(NTSD,NRADL).EQ.1 ) THEN | ! IF NOT, INTEGRATION WILL END WITH AN INCORRECT NUMBER OF CALLS HAVING BEEN MADE. btim=timef() | !----------------------------------------------------------------------------------------------- CALL RADTN | ! radtn_tim=radtn_tim+timef()-btim | !-------------------------------------- ENDIF | ! TURBULENT PROCESSES AND PRECIPITATION C----------------------------------------------------------------------- | !-------------------------------------- C--------IS IT TIME FOR A CHECK POINT ON THE MODEL HISTORY FILE?-------- | IF (MOD(NTSD-NPHS/2,NPHS) == 0) THEN C----------------------------------------------------------------------- | ! IF (MOD(NTSD,NPHS) == 0) THEN btim=timef() | IF (MYPE == 0) THEN CALL CHKOUT | WRITE(0,"(A)") 'EBU: PHYSICS TIME STEP' chkout_tim=chkout_tim+timef()-btim | END IF ENDIF | ! C----------------------------------------------------------------------- | BTIM = TIMEF() C--------CLEAN UP AFTER RESTART----------------------------------------- | ! C----------------------------------------------------------------------- | CALL EXCH(PD, 1, UZ0, 1, VZ0, 1, T, LM, U, LM, V, LM, Q, LM, 1, 1) IF(RESTRT)THEN | ! RESTRT=.FALSE. | EXCH_TIM = EXCH_TIM + TIMEF() - BTIM ENDIF | ! C----------------------------------------------------------------------- | BTIM = TIMEF() IF(NTSD.LT.NTSTM)GO TO 2000 | ! C*********************************************************************** | CALL TURBL !CONTAINS CALLS TO EXCH C************** EXIT FROM THE TIME LOOP ************************** | ! C*********************************************************************** | TURBL_TIM = TURBL_TIM + TIMEF() - BTIM C | !--------------------------------- 2005 continue | ! STORE ORIGINAL TEMPERATURE ARRAY tot2_tim=timef()-btimx | !--------------------------------- tot_tim=mpp_tim+init_tim+goss_tim+radtn_tim+chkout_tim+ | IF (CLTEND_TEST) THEN 1 divhoa_tim+pdtedt_tim+vtadv_tim+pdnew_tim+bocoh_tim+ | BTIM = TIMEF() 2 pgcor_tim+ddamp_tim+bocov_tim+rdtemp_tim+hdiff_tim+ | ICLTEND = -1 3 hzadv_tim+hzadv2_tim+turbl_tim+gscond_tim+cucnvc_tim+ | ! 4 exch_tim+gsmdrive_tim+cltend_tim+ | CALL CLTEND(ICLTEND) 5 vadz_tim+hadz_tim+eps_tim | ! C | CLTEND_TIM = CLTEND_TIM + TIMEF() - BTIM if(mype.eq.0)then | END IF pct=mpp_tim/tot_tim*1.e2 | ! write(6,*)' mpp=',mpp_tim*1.e-3,' pct=',pct | IF (.NOT. GSPREC) THEN pct=init_tim/tot_tim*1.e2 | BTIM = TIMEF() write(6,*)' init=',init_tim*1.e-3,' pct=',pct | ! pct=goss_tim/tot_tim*1.e2 | CALL GSCOND write(6,*)' goss=',goss_tim*1.e-3,' pct=',pct | ! pct=radtn_tim/tot_tim*1.e2 | GSCOND_TIM = GSCOND_TIM + TIMEF() - BTIM write(6,*)' radtn=',radtn_tim*1.e-3,' pct=',pct | END IF pct=chkout_tim/tot_tim*1.e2 | !------------------------- write(6,*)' chkout=',chkout_tim*1.e-3,' pct=',pct | ! CONVECTIVE PRECIPITATION pct=divhoa_tim/tot_tim*1.e2 | !------------------------- write(6,*)' divhoa=',divhoa_tim*1.e-3,' pct=',pct | BTIM = TIMEF() pct=pdtedt_tim/tot_tim*1.e2 | ! write(6,*)' pdtedt=',pdtedt_tim*1.e-3,' pct=',pct | ! CALL CUCNVC pct=vtadv_tim/tot_tim*1.e2 | ! CALL CUCNVC_SHALLOW write(6,*)' vtadv=',vtadv_tim*1.e-3,' pct=',pct | ! pct=pdnew_tim/tot_tim*1.e2 | CUCNVC_TIM = CUCNVC_TIM + TIMEF() - BTIM write(6,*)' pdnew=',pdnew_tim*1.e-3,' pct=',pct | ! pct=bocoh_tim/tot_tim*1.e2 | !----------------------------------------------------------------------- write(6,*)' bocoh=',bocoh_tim*1.e-3,' pct=',pct | ! GRIDSCALE MICROPHYSICS (CONDENSATION AND PRECIPITATION; FORECAST ONLY) pct=pgcor_tim/tot_tim*1.e2 | !----------------------------------------------------------------------- write(6,*)' pgcor=',pgcor_tim*1.e-3,' pct=',pct | IF (GSPREC) THEN pct=ddamp_tim/tot_tim*1.e2 | BTIM = TIMEF() write(6,*)' ddamp=',ddamp_tim*1.e-3,' pct=',pct | ! pct=bocov_tim/tot_tim*1.e2 | CALL GSMDRIVE write(6,*)' bocov=',bocov_tim*1.e-3,' pct=',pct | ! pct=rdtemp_tim/tot_tim*1.e2 | GSMDRIVE_TIM = GSMDRIVE_TIM + TIMEF() - BTIM write(6,*)' rdtemp=',rdtemp_tim*1.e-3,' pct=',pct | ! pct=hdiff_tim/tot_tim*1.e2 | ELSE write(6,*)' hdiff=',hdiff_tim*1.e-3,' pct=',pct | !---------------------------- pct=hzadv_tim/tot_tim*1.e2 | ! GRIDSCALE ZHAO MICROPHYSICS write(6,*)' hzadv=',hzadv_tim*1.e-3,' pct=',pct | !---------------------------- pct=hzadv2_tim/tot_tim*1.e2 | BTIM = TIMEF() write(6,*)' hzadv2=',hzadv2_tim*1.e-3,' pct=',pct | ! pct=vadz_tim/tot2_tim*1.e2 | CALL PRECPD write(6,*)' vadz=',vadz_tim*1.e-3,' pct=',pct | ! pct=hadz_tim/tot2_tim*1.e2 | PRECPD_TIM = PRECPD_TIM + TIMEF() - BTIM write(6,*)' hadz=',hadz_tim*1.e-3,' pct=',pct | END IF pct=eps_tim/tot2_tim*1.e2 | !---------------------------- write(6,*)' eps=',eps_tim*1.e-3,' pct=',pct | ! PRECIPIPTATION ASSIMILATION pct=turbl_tim/tot_tim*1.e2 | !---------------------------- write(6,*)' turbl=',turbl_tim*1.e-3,' pct=',pct | ! pct=cucnvc_tim/tot_tim*1.e2 | !----------------------------------------------------- write(6,*)' cucnvc=',cucnvc_tim*1.e-3,' pct=',pct | ! CALCULATE TEMP TENDENCIES AND RESTORE ORIGINAL TEMPS pct=gsmdrive_tim/tot_tim*1.e2 | !----------------------------------------------------- write(6,*)' gsmdrive=',gsmdrive_tim*1.e-3,' pct=',pct | IF (CLTEND_TEST) THEN pct=cltend_tim/tot_tim*1.e2 | BTIM = TIMEF() write(6,*)' cltend=',cltend_tim*1.e-3,' pct=',pct | ICLTEND = 0 pct=exch_tim/tot_tim*1.e2 | ! write(6,*)' exch=',exch_tim*1.e-3,' pct=',pct | CALL CLTEND(ICLTEND) write(6,*)' total=',tot_tim*1.e-3 | ! write(6,*)' total2=',tot2_tim*1.e-3 | CLTEND_TIM = CLTEND_TIM + TIMEF() - BTIM endif | END IF C---------------------------------------------------------------------- | !-------------------- C | ! END PHYSICS IF LOOP C*** WE MUST NOW SHUT DOWN THE I/O SERVERS | !-------------------- C*** THIS IS DONE BY SENDING A -999 TO MPI TASK 0 OF EACH SERVER GROUP | END IF C | !------------------------------------------------------------ IF(MYPE.EQ.0)THEN | ! UPDATE TEMP TENDENCIES FROM CLOUD PROCESSES EVERT TIME STEP DO I=1,IQUILT_GROUP | !------------------------------------------------------------ CALL MPI_SEND(-999,1,MPI_INTEGER,0,0, | IF (CLTEND_TEST) THEN 1 MPI_COMM_INTER_ARRAY(I),IER) | BTIM = TIMEF() ENDDO | ICLTEND = 1 ENDIF | ! C | CALL CLTEND(ICLTEND) C---------------------------------------------------------------------- | ! C---------------------------------------------------------------------- | CLTEND_TIM = CLTEND_TIM + TIMEF() - BTIM ENDIF ! ENDIF ON TASKS FOR MODEL INTEGRATION VS I/O SERVING | END IF C---------------------------------------------------------------------- | !----------------------------- C---------------------------------------------------------------------- | ! VERTICAL ADVECTION OF HEIGHT C | !----------------------------- CALL MPI_BARRIER(MPI_COMM_WORLD,IERR) | BTIM = TIMEF() C | ! IF(MYPE.EQ.0) THEN | CALL VADZ CALL W3TAGE('ETAFCST ') | ! ENDIF | VADZ_TIM = VADZ_TIM + TIMEF() - BTIM C | !------------------------------- IF(MYPE.EQ.NPES)THEN | ! HORIZONTAL ADVECTION OF HEIGHT Cmp CALL SUMMARY() | !------------------------------- ENDIF | IF ( .NOT. HYDRO) THEN C | BTIM = TIMEF() CALL MPI_FINALIZE(IERR) | ! C---------------------------------------------------------------------- | CALL EXCH(U, LM , V, LM, 1, 1) C---------------------------------------------------------------------- | ! STOP | CALL EXCH(Z, LM+1, 2, 2) END | ! > EXCH_TIM = EXCH_TIM + TIMEF() - BTIM > END IF > ! > BTIM = TIMEF() > ! > CALL HADZ > ! > HADZ_TIM = HADZ_TIM + TIMEF() - BTIM > !--------------- > ! ADVECTION OF W > !--------------- > IF (HYDRO) THEN > BTIM = TIMEF() > ! > CALL EXCH(PDSL, 1 , 2, 2) > ! > CALL EXCH(PINT, LM+1, 3, 3) > ! > EXCH_TIM = EXCH_TIM + TIMEF() - BTIM > ELSE > BTIM = TIMEF() > ! > CALL EXCH(PDSL, 1 , 2, 2) > ! > CALL EXCH(U , LM, V, LM, DWDT, LM, PINT, LM+1, W, LM+1, 3, 3) > ! > EXCH_TIM = EXCH_TIM + TIMEF() - BTIM > END IF > ! > BTIM = TIMEF() > ! > CALL EPS > ! > EPS_TIM = EPS_TIM + TIMEF() - BTIM > ! > IF (NTSD > NSTART+1) THEN > !---------- > ! RADIATION > !---------- > IF (MOD(NTSD,NRADS) == 1 .OR. MOD(NTSD,NRADL) == 1) THEN > BTIM = TIMEF() > ! > CALL RADTN > ! > RADTN_TIM = RADTN_TIM + TIMEF() - BTIM > ! > END IF > !------------------------------------------------------- > ! IS IT TIME FOR A CHECK POINT ON THE MODEL HISTORY FILE > !------------------------------------------------------- > BTIM = TIMEF() > ! > CALL CHKOUT > ! > CHKOUT_TIM = CHKOUT_TIM + TIMEF() - BTIM > END IF > !----------------------- > ! CLEAN UP AFTER RESTART > !----------------------- > IF (RESTRT) THEN > RESTRT = .FALSE. > END IF > ! > IF (NTSD < NTSTM) GOTO 2000 > !------------------------ > ! EXIT FROM THE TIME LOOP > !------------------------ > 2005 CONTINUE > TOT2_TIM = TIMEF() - BTIMX > TOT_TIM = MPP_TIM + INIT_TIM + GOSS_TIM + RADTN_TIM + CHKOUT_TIM + DIVHOA_TIM > & + PDTEDT_TIM + VTADV_TIM + PDNEW_TIM + BOCOH_TIM + PGCOR_TIM + DDAMP_TIM > & + BOCOV_TIM + RDTEMP_TIM + HDIFF_TIM + HZADV_TIM + HZADV2_TIM + TURBL_TIM > & + GSCOND_TIM + CUCNVC_TIM + EXCH_TIM + GSMDRIVE_TIM + CLTEND_TIM + VADZ_TIM > & + HADZ_TIM + EPS_TIM + PRECPD_TIM > ! > IF (MYPE == 0) THEN > PCT = MPP_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' MPP=',MPP_TIM*1.E-3,' PCT=',PCT > PCT = INIT_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' INIT=',INIT_TIM*1.E-3,' PCT=',PCT > PCT = GOSS_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' GOSS=',GOSS_TIM*1.E-3,' PCT=',PCT > PCT = RADTN_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' RADTN=',RADTN_TIM*1.E-3,' PCT=',PCT > PCT = CHKOUT_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' CHKOUT=',CHKOUT_TIM*1.E-3,' PCT=',PCT > PCT = DIVHOA_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' DIVHOA=',DIVHOA_TIM*1.E-3,' PCT=',PCT > PCT = PDTEDT_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' PDTEDT=',PDTEDT_TIM*1.E-3,' PCT=',PCT > PCT = VTADV_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' VTADV=',VTADV_TIM*1.E-3,' PCT=',PCT > PCT = PDNEW_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' PDNEW=',PDNEW_TIM*1.E-3,' PCT=',PCT > PCT = BOCOH_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' BOCOH=',BOCOH_TIM*1.E-3,' PCT=',PCT > PCT = PGCOR_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' PGCOR=',PGCOR_TIM*1.E-3,' PCT=',PCT > PCT = PRECPD_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' PRECPD=',PRECPD_TIM*1.E-3,' PCT=',PCT > PCT = DDAMP_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' DDAMP=',DDAMP_TIM*1.E-3,' PCT=',PCT > PCT = BOCOV_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' BOCOV=',BOCOV_TIM*1.E-3,' PCT=',PCT > PCT = RDTEMP_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' RDTEMP=',RDTEMP_TIM*1.E-3,' PCT=',PCT > PCT = HDIFF_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' HDIFF=',HDIFF_TIM*1.E-3,' PCT=',PCT > PCT = HZADV_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' HZADV=',HZADV_TIM*1.E-3,' PCT=',PCT > PCT = HZADV2_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' HZADV2=',HZADV2_TIM*1.E-3,' PCT=',PCT > PCT = VADZ_TIM / TOT2_TIM*1.E2 > WRITE(6,*) ' VADZ=',VADZ_TIM*1.E-3,' PCT=',PCT > PCT = HADZ_TIM / TOT2_TIM*1.E2 > WRITE(6,*) ' HADZ=',HADZ_TIM*1.E-3,' PCT=',PCT > PCT = EPS_TIM / TOT2_TIM*1.E2 > WRITE(6,*) ' EPS=',EPS_TIM*1.E-3,' PCT=',PCT > PCT = TURBL_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' TURBL=',TURBL_TIM*1.E-3,' PCT=',PCT > PCT = CUCNVC_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' CUCNVC=',CUCNVC_TIM*1.E-3,' PCT=',PCT > PCT = GSMDRIVE_TIM / TOT_TIM*1.E2 > WRITE(6,*)' GSMDRIVE=',GSMDRIVE_TIM*1.E-3,' PCT=',PCT > PCT = CLTEND_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' CLTEND=',CLTEND_TIM*1.E-3,' PCT=',PCT > PCT = EXCH_TIM / TOT_TIM*1.E2 > WRITE(6,*) ' EXCH=',EXCH_TIM*1.E-3,' PCT=',PCT > ! > WRITE(6,*) ' TOTAL=', TOT_TIM*1.E-3 > WRITE(6,*)' TOTAL2=',TOT2_TIM*1.E-3 > END IF > !------------------------------------------------------------------ > ! WE MUST NOW SHUT DOWN THE I/O SERVERS > ! THIS IS DONE BY SENDING A -999 TO MPI TASK 0 OF EACH SERVER GROUP > !------------------------------------------------------------------ > IF (MYPE == 0) THEN > DO I=1,IQUILT_GROUP > CALL MPI_SEND(-999, 1, MPI_INTEGER, 0, 0, MPI_COMM_INTER_ARRAY(I), IER) > END DO > END IF > !---------------------------------------------------- > !END IF ON TASKS FOR MODEL INTEGRATION VS I/O SERVING > !---------------------------------------------------- > END IF > ! > CALL MPI_BARRIER(MPI_COMM_WORLD, IERR) > ! > IF (MYPE == 0) THEN > CALL W3TAGE('ETAFCST ') > END IF > ! > CALL MPI_FINALIZE(IERR) > ! > STOP > ! > END PROGRAM EBU