1 !----------------------------------------------------------------------- 2 ! 3 PROGRAM MAIN_NEMS 4 ! 5 !----------------------------------------------------------------------- 6 !*** Main Program for NEMS. 7 !*** Define ESMF data types and procedures. 8 !----------------------------------------------------------------------- 9 ! 10 !----------------------------------------------------------------------- 11 ! 12 ! PROGRAM HISTORY LOG: 13 ! 2007- Black - Modified from Wei-yu's version 14 ! 2007-09 Black - Create the Clock here. 15 ! 2009-08 Colon - Unified NEM-NMM & NEMS-GFS 16 ! 2009-06-29 Black - Modified for addition of NMM nesting; 17 ! added new ATM Driver Component. 18 ! 2009-09 Lu - Add w3tage calls for resource statistics 19 ! 2009-08 W. Yang - Ensemble GEFS Concurrency Code. 20 ! 2010-03 Jovic/Black - Revised to create NEMS gridded component 21 ! for new structure. 22 ! 2010-04 Yang - Add GEFS and GFS for the revised NEMS. 23 ! 2010-11 Yang - Add the "Generic Core" in the NEMS. 24 ! 25 !----------------------------------------------------------------------- 26 ! 27 USE ESMF_Mod 28 ! 29 !----------------------------------------------------------------------- 30 !*** USE the NEMS gridded component module. Although it 31 !*** contains the calls to Register and the top level Initialize, 32 !*** Run, and Finalize, only the Register routine is public. 33 !----------------------------------------------------------------------- 34 ! 35 USE module_NEMS_GRID_COMP, ONLY: NEMS_REGISTER 36 ! 37 !----------------------------------------------------------------------- 38 !*** The following module contains error-checking. 39 !----------------------------------------------------------------------- 40 ! 41 USE module_ERR_MSG,ONLY: ERR_MSG,MESSAGE_CHECK 42 ! 43 !----------------------------------------------------------------------- 44 ! 45 IMPLICIT NONE 46 ! 47 !----------------------------------------------------------------------- 48 !*** Local Variables. 49 !----------------------------------------------------------------------- 50 ! 51 INTEGER :: MYPE & !<-- The MPI task ID 52 ,NHOURS_FCST & !<-- Length of forecast in hours 53 ,NSECONDS_FCST & !<-- Length of forecast in seconds 54 ,TIMESTEP_SEC_WHOLE & !<-- Integer part of timestep 55 ,TIMESTEP_SEC_NUMERATOR & !<-- Numerator of fractional part 56 ,TIMESTEP_SEC_DENOMINATOR & !<-- Denominator of fractional part 57 ,YY,MM,DD & !<-- Time variables for date 58 ,HH,MNS,SEC !<-- Time variables for time of day 59 ! 60 TYPE(ESMF_TimeInterval) :: RUNDURATION & !<-- The ESMF time. The total forecast hours. 61 ,TIMESTEP !<-- The ESMF timestep length (we only need a dummy here) 62 ! 63 TYPE(ESMF_Time) :: CURRTIME & !<-- The ESMF current time. 64 ,STARTTIME !<-- The ESMF start time. 65 ! 66 TYPE(ESMF_VM) :: VM !<-- The ESMF virtual machine, 67 ! which contains and manages 68 ! the computer CPU resource 69 ! for the ESMF grid components. 70 ! 71 TYPE(ESMF_GridComp) :: NEMS_GRID_COMP !<-- The NEMS gridded component. 72 ! 73 TYPE(ESMF_State) :: NEMS_EXP_STATE & !<-- The NEMS export state 74 ,NEMS_IMP_STATE !<-- The NEMS import state 75 ! 76 TYPE(ESMF_Clock) :: CLOCK_MAIN !<-- The ESMF time management clock 77 ! 78 TYPE(ESMF_Config) :: CF_MAIN !<-- The Configure object 79 ! 80 LOGICAL :: RUN_CONTINUE !<-- Flag for more than one NEMS run. 81 ! 82 INTEGER :: HH_START & 83 ,HH_FINAL 84 ! 85 INTEGER :: RC=ESMF_SUCCESS & !<-- The running error signal 86 ,RC_MAIN !<-- The final value of the Main error code 87 ! 88 !----------------------------------------------------------------------- 89 !*********************************************************************** 90 !----------------------------------------------------------------------- 91 ! 92 #ifdef IBM 93 include 'fexcp.h' 94 call signal(11, xl__trce) 95 #endif 96 ! 97 !----------------------------------------------------------------------- 98 !! 99 !----------------------------------------------------------------------- 100 !*** Initialize the final error signal. 101 !----------------------------------------------------------------------- 102 ! 103 RC_MAIN=ESMF_SUCCESS 104 ! 105 !----------------------------------------------------------------------- 106 !*** Initialize the ESMF framework. 107 !----------------------------------------------------------------------- 108 ! 109 CALL ESMF_Initialize(VM =VM & !<-- The ESMF Virtual Machine 110 ,defaultCalendar=ESMF_CAL_GREGORIAN & !<-- Set up the default calendar. 111 ,defaultlogtype =ESMF_LOG_MULTI & !<-- Define multiple log error output file; 112 ! each task has its own log error output file. 113 ,rc =RC) 114 ! 115 !----------------------------------------------------------------------- 116 !*** Extract the MPI task ID. 117 !----------------------------------------------------------------------- 118 ! 119 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 120 MESSAGE_CHECK="MAIN: Obtain the local task ID" 121 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 122 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 123 ! 124 CALL ESMF_VmGet(vm =VM & !<-- The ESMF Virtual Machine 125 ,localpet=MYPE & !<-- The local MPI task ID 126 ,rc =RC) 127 ! 128 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 129 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 130 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 131 ! 132 #if defined (SVN_INFO) && defined (CMP_YEAR) && defined (CMP_JD) 133 if (mype==0) call w3tagb('NEMS '//SVN_INFO & 134 ,CMP_YEAR, CMP_JD, 0000, 'NEMS') 135 #else 136 if (mype==0) call w3tagb('nems ',0000,0000,0000,'np23 ') 137 #endif 138 ! 139 !----------------------------------------------------------------------- 140 !*** Set up the default log. 141 !----------------------------------------------------------------------- 142 ! 143 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 144 MESSAGE_CHECK="Set Up ESMF Log" 145 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 146 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 147 ! 148 CALL ESMF_LogSet(verbose =ESMF_TRUE & 149 ,flush =ESMF_TRUE & 150 ,rootOnly =ESMF_FALSE & 151 ,halt =ESMF_LOG_HALTNEVER & !<-- The job will not stop automatically 152 ! when an ESMF error occurs. 153 ,maxElements=1 & !<-- Maximum number of elements in the log 154 ! before printing them to the log file. 155 ,rc =RC) 156 ! 157 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 158 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 159 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 160 ! 161 !----------------------------------------------------------------------- 162 !*** Create and load the Configure object which will hold the contents 163 !*** of the Main configure file. 164 !----------------------------------------------------------------------- 165 ! 166 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 167 MESSAGE_CHECK="Create/Load the Main Configure Object" 168 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 169 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 170 ! 171 CF_MAIN=ESMF_ConfigCreate(rc=RC) 172 ! 173 CALL ESMF_ConfigLoadFile(config =CF_MAIN & !<-- The Configure object 174 ,filename='model_configure' & !<-- The name of the configure file 175 ,rc =RC) 176 ! 177 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 178 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 179 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 180 ! 181 !----------------------------------------------------------------------- 182 !*** Create the NEMS gridded component which will create and 183 !*** control the ATM (atmosphere), OCN (ocean), ICE (sea ice), etc. 184 !*** gridded components. 185 !----------------------------------------------------------------------- 186 ! 187 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 188 MESSAGE_CHECK="Create the NEMS Gridded Component" 189 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 190 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 191 ! 192 NEMS_GRID_COMP=ESMF_GridCompCreate(name ='NEMS Grid Comp' & !<-- NEMS component name 193 ,gridcomptype=ESMF_ATM & !<-- A Type that the user can query. 194 ,configFile ='model_configure' & !<-- Link the user-created configure file. 195 ,rc =RC) 196 ! 197 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 198 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 199 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 200 ! 201 !----------------------------------------------------------------------- 202 !*** Register the NEMS gridded component's Initialize, Run and 203 !*** Finalize routines. 204 !----------------------------------------------------------------------- 205 ! 206 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 207 MESSAGE_CHECK="Register NEMS Gridded Component Init, Run, Finalize" 208 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 209 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 210 ! 211 CALL ESMF_GridCompSetServices(NEMS_GRID_COMP & !<-- The NEMS component 212 ,NEMS_REGISTER & !<-- User's subroutineName 213 ,RC) 214 ! 215 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 216 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 217 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 218 ! 219 !----------------------------------------------------------------------- 220 !*** Create the main ESMF Clock. 221 !*** The Clock is needed for all calls to Init, Run, and Finalize. 222 ! 223 !*** A timestep is needed to create the Clock but actual timesteps 224 !*** are handled by the individual subcomponents therefore a dummy 225 !*** value is used here. 226 !----------------------------------------------------------------------- 227 ! 228 TIMESTEP_SEC_WHOLE =1 !<-- Dummy timestep values 229 TIMESTEP_SEC_NUMERATOR =0 ! 230 TIMESTEP_SEC_DENOMINATOR=1 !<-- 231 ! 232 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 233 MESSAGE_CHECK="Set up Time Step Interval in Main Clock" 234 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 235 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 236 ! 237 CALL ESMF_TimeIntervalSet(timeinterval=TIMESTEP & !<-- Main Clock's timestep 238 ,s =TIMESTEP_SEC_WHOLE & !<-- Whole part of timestep 239 ,sn =TIMESTEP_SEC_NUMERATOR & !<-- Numerator of fractional part 240 ,sd =TIMESTEP_SEC_DENOMINATOR & !<-- Denominator of fractional part 241 ,rc =RC) 242 ! 243 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 244 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 245 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 246 ! 247 !----------------------------------------------------------------------- 248 !*** Set the start time in the Main Clock. 249 !----------------------------------------------------------------------- 250 ! 251 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 252 MESSAGE_CHECK="MAIN: Extract Starting Year from Config File" 253 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 254 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 255 ! 256 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 257 ,value =YY & 258 ,label ='start_year:' & 259 ,rc =RC) 260 ! 261 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 262 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 263 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 264 ! 265 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 266 MESSAGE_CHECK="MAIN: Extract Starting Month from Config File" 267 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 268 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 269 ! 270 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 271 ,value =MM & 272 ,label ='start_month:' & 273 ,rc =RC) 274 ! 275 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 276 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 277 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 278 ! 279 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 280 MESSAGE_CHECK="MAIN: Extract Starting Day from Config File" 281 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 282 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 283 ! 284 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 285 ,value =DD & 286 ,label ='start_day:' & 287 ,rc =RC) 288 ! 289 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 290 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 291 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 292 ! 293 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 294 MESSAGE_CHECK="MAIN: Extract Starting Hour from Config File" 295 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 296 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 297 ! 298 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 299 ,value =HH & 300 ,label ='start_hour:' & 301 ,rc =RC) 302 ! 303 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 304 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 305 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 306 ! 307 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 308 MESSAGE_CHECK="MAIN: Extract Starting Minute from Config File" 309 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 310 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 311 ! 312 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 313 ,value =MNS & 314 ,label ='start_minute:' & 315 ,rc =RC) 316 ! 317 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 318 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 319 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 320 ! 321 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 322 MESSAGE_CHECK="MAIN: Extract Starting Second from Config File" 323 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 324 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 325 ! 326 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 327 ,value =SEC & 328 ,label ='start_second:' & 329 ,rc =RC) 330 ! 331 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 332 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 333 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 334 ! 335 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 336 MESSAGE_CHECK="MAIN: Set the Forecast Start Time" 337 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 338 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 339 ! 340 CALL ESMF_TimeSet(time=STARTTIME & !<-- The start time of the forecast (ESMF) 341 ,yy =YY & !<-- Year from config file 342 ,mm =MM & !<-- Month from config file 343 ,dd =DD & !<-- Day from config file 344 ,h =HH & !<-- Hour from config file 345 ,m =MNS & !<-- Minute from config file 346 ,s =SEC & !<-- Second from config file 347 ,rc =RC) 348 ! 349 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 350 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 351 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 352 ! 353 !----------------------------------------------------------------------- 354 !*** Set the run duration in the Main Clock. 355 !----------------------------------------------------------------------- 356 ! 357 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 358 MESSAGE_CHECK="MAIN: Extract Forecast Length from Config File" 359 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 360 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 361 ! 362 CALL ESMF_ConfigGetAttribute(config=CF_MAIN & 363 ,value =NHOURS_FCST & 364 ,label ='nhours_fcst:' & 365 ,rc =RC) 366 ! 367 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 368 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 369 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 370 ! 371 NSECONDS_FCST=NHOURS_FCST*3600 !<-- The forecast length (sec) (REAL) 372 ! 373 !----------------------------------------------------------------------- 374 ! 375 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 376 MESSAGE_CHECK="MAIN: Set the Forecast Length" 377 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 378 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 379 ! 380 CALL ESMF_TimeIntervalSet(timeinterval=RUNDURATION & !<-- The forecast length (s) (ESMF) 381 ,s =NSECONDS_FCST & 382 ,rc =RC) 383 ! 384 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 385 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 386 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 387 ! 388 !----------------------------------------------------------------------- 389 !*** Now the Main Clock can be created. 390 !----------------------------------------------------------------------- 391 ! 392 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 393 MESSAGE_CHECK="Create the Main Clock" 394 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 395 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 396 ! 397 CLOCK_MAIN=ESMF_ClockCreate(name ='CLOCK_MAIN' & !<-- The top-level ESMF Clock 398 ,timeStep =TIMESTEP & !<-- Timestep needed by the Clock (ESMF) 399 ,startTime =STARTTIME & !<-- The integration start time (ESMF) 400 ,runDuration=RUNDURATION & !<-- The integration duration (ESMF) 401 ,rc =RC) 402 ! 403 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 404 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 405 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 406 ! 407 !----------------------------------------------------------------------- 408 !*** Create the NEMS component's import/export states. 409 !*** Currently they are not required to perform an actual function. 410 !----------------------------------------------------------------------- 411 ! 412 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 413 MESSAGE_CHECK="Create the NEMS Import/Export States" 414 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 415 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 416 ! 417 NEMS_IMP_STATE=ESMF_StateCreate(stateName='NEMS Import State' & 418 ,rc =RC) 419 ! 420 NEMS_EXP_STATE=ESMF_StateCreate(stateName='NEMS Export State' & 421 ,rc =RC) 422 ! 423 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 424 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 425 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 426 ! 427 !----------------------------------------------------------------------- 428 !*** Execute the INITIALIZE step for the NEMS component. 429 !*** The Initialize routine that is called here as well as the 430 !*** Run and Finalize routines invoked below are those specified 431 !*** in the Register routine called in ESMF_GridCompSetServices above. 432 !----------------------------------------------------------------------- 433 ! 434 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 435 MESSAGE_CHECK="Execute the NEMS Component Initialize Step" 436 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 437 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 438 ! 439 CALL ESMF_GridCompInitialize(gridcomp =NEMS_GRID_COMP & !<-- The NEMS component 440 ,importState=NEMS_IMP_STATE & !<-- The NEMS component import state 441 ,exportState=NEMS_EXP_STATE & !<-- The NEMS component export state 442 ,clock =CLOCK_MAIN & !<-- The ESMF clock 443 ,phase =ESMF_SINGLEPHASE & 444 ,rc =RC) 445 ! 446 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 447 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 448 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 449 ! 450 !----------------------------------------------------------------------- 451 !*** Execute the RUN step for the NEMS component. 452 !----------------------------------------------------------------------- 453 ! 454 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 455 MESSAGE_CHECK="Execute the NEMS Component Run Step" 456 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 457 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 458 ! 459 CALL ESMF_GridCompRun(gridcomp =NEMS_GRID_COMP & !<-- The NEMS component 460 ,importState=NEMS_IMP_STATE & !<-- The NEMS component import state 461 ,exportState=NEMS_EXP_STATE & !<-- The NEMS component export state 462 ,clock =CLOCK_MAIN & !<-- The ESMF clock 463 ,phase =ESMF_SINGLEPHASE & 464 ,rc =RC) 465 ! 466 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 467 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 468 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 469 ! 470 !----------------------------------------------------------------------- 471 !*** The RUN_CONTINUE flag tells us if the RUN step of the 472 !*** NEMS component must be called multiple times for ensembles. 473 !----------------------------------------------------------------------- 474 ! 475 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 476 MESSAGE_CHECK="Extract the RUN_CONTINUE flag from Config File" 477 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 478 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 479 ! 480 CALL ESMF_ConfigGetAttribute(config = CF_MAIN & 481 ,value = RUN_CONTINUE & 482 ,label = 'RUN_CONTINUE:' & 483 ,rc = RC) 484 ! 485 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 486 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 487 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 488 ! 489 !----------------------------------------------------------------------- 490 !*** Update the Main clock. This is for calling the RUN step 491 !*** of the NEMS component multiple times. 492 !----------------------------------------------------------------------- 493 ! 494 IF(RUN_CONTINUE) THEN 495 ! 496 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 497 MESSAGE_CHECK="Extract the Ensemble Clock Parameters from Config File" 498 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 499 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 500 ! 501 CALL ESMF_ConfigGetAttribute(config = CF_MAIN & 502 ,value = hh_start & 503 ,label = 'HH_START:' & 504 ,rc = RC) 505 ! 506 CALL ESMF_ConfigGetAttribute(config = CF_MAIN & 507 ,value = hh_final & 508 ,label = 'HH_FINAL:' & 509 ,rc = RC) 510 ! 511 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 512 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 513 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 514 ! 515 NHOURS_FCST = HH_FINAL - HH_START 516 ! 517 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 518 MESSAGE_CHECK="MAIN: Re-set the clock after the ensemble run cycles." 519 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 520 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 521 ! 522 CALL ESMF_TimeIntervalSet(timeInterval = RUNDURATION & 523 ,h = NHOURS_FCST & 524 ,rc = RC) 525 ! 526 CALL ESMF_ClockGet(clock = CLOCK_MAIN & 527 ,currTime = CURRTIME & 528 ,rc = rc) 529 ! 530 CURRTIME = CURRTIME + RUNDURATION 531 ! 532 CALL ESMF_ClockSet(clock = CLOCK_MAIN & 533 ,RunDuration = RUNDURATION & 534 ,currTime = CURRTIME & 535 ,rc = RC) 536 ! 537 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 538 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 539 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 540 ! 541 END IF 542 ! 543 !----------------------------------------------------------------------- 544 !*** Execute the FINALIZE step for the NEMS component. 545 !----------------------------------------------------------------------- 546 ! 547 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 548 MESSAGE_CHECK="Execute the NEMS Component Finalize Step" 549 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 550 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 551 ! 552 CALL ESMF_GridCompFinalize(gridcomp =NEMS_GRID_COMP & !<-- The NEMS component 553 ,importState=NEMS_IMP_STATE & !<-- The NEMS component import state 554 ,exportState=NEMS_EXP_STATE & !<-- The NEMS component export state 555 ,clock =CLOCK_MAIN & !<-- The Main ESMF clock 556 ,phase =ESMF_SINGLEPHASE & 557 ,rc =RC) 558 ! 559 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 560 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 561 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 562 ! 563 !----------------------------------------------------------------------- 564 !*** Destroy the Main Clock. 565 !----------------------------------------------------------------------- 566 ! 567 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 568 MESSAGE_CHECK="Destroy the Main Clock" 569 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 570 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 571 ! 572 CALL ESMF_ClockDestroy(clock=CLOCK_MAIN & 573 ,rc =RC) 574 ! 575 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 576 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 577 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 578 ! 579 !----------------------------------------------------------------------- 580 !*** Destroy the Main Configure object. 581 !----------------------------------------------------------------------- 582 ! 583 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 584 MESSAGE_CHECK="Destroy the Main Configure Object" 585 ! CALL ESMF_LogWrite(MESSAGE_CHECK,ESMF_LOG_INFO,rc=RC) 586 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 587 ! 588 CALL ESMF_ConfigDestroy(config=CF_MAIN & 589 ,rc =RC) 590 ! 591 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 592 CALL ERR_MSG(RC,MESSAGE_CHECK,RC_MAIN) 593 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 594 ! 595 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 596 MESSAGE_CHECK = "Destroy the ESMF states" 597 ! CALL ESMF_LogWrite(MESSAGE_CHECK, ESMF_LOG_INFO, rc = RC) 598 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 599 600 CALL ESMF_StateDestroy(state=NEMS_IMP_STATE & 601 ,rc =RC) 602 CALL ESMF_StateDestroy(state=NEMS_EXP_STATE & 603 ,rc =RC) 604 ! 605 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 606 CALL ERR_MSG(RC, MESSAGE_CHECK, RC_MAIN) 607 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 608 ! 609 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 610 MESSAGE_CHECK = "Destroy ESMF Grid Comp and Cpl Comp" 611 ! CALL ESMF_LogWrite(MESSAGE_CHECK, ESMF_LOG_INFO, rc = RC) 612 ! ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ 613 ! 614 CALL ESMF_GridCompDestroy(gridcomp=NEMS_GRID_COMP & 615 ,rc =RC) 616 617 CALL ERR_MSG(RC, MESSAGE_CHECK, RC_MAIN) 618 ! 619 !----------------------------------------------------------------------- 620 !*** Shut down the ESMF system. 621 !----------------------------------------------------------------------- 622 ! 623 CALL ESMF_Finalize() 624 ! 625 IF(RC_MAIN==ESMF_SUCCESS)THEN 626 ! WRITE(0,*)'MODEL FORECAST RUN SUCCEEDED' 627 ELSE 628 WRITE(0,*)'MODEL FORECAST RUN FAILED RC_MAIN=',RC_MAIN 629 ENDIF 630 ! 631 !----------------------------------------------------------------------- 632 ! 633 if(mype==0)call w3tage('nems ') 634 ! 635 !----------------------------------------------------------------------- 636 ! 637 END PROGRAM MAIN_NEMS 638 ! 639 !----------------------------------------------------------------------- 640