1 / 39

ESMF Infrastructure Layer

Learn about the ESMF infrastructure layer, its components, and how it supports interoperability and streamlined development for researchers working on Earth science applications. Dive into examples of function calls and utility scenarios.

rlorri
Download Presentation

ESMF Infrastructure Layer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ESMF Infrastructure Layer 2nd ESMF Community Meeting, GFDL, May 15th 2003 http://www.esmf.ucar.edu, esmf@ucar.edu

  2. Talk Outline • What is the infrastructure layer • What is it for • What it contains • ESMF infrastructure in this release • ESMF version 1.0 function call† examples (code!!!) (†aka API or methods) • Next steps…. • Infrastructure Utility Example

  3. Infrastructure Layer NCAR Atmosphere NCAR Atmosphere • A standard software platform for enabling interoperability (developing couplers, ensuring performance portability). • Set of reusable software for Earth science applications. Streamlined development for researchers. My Sea Ice GFDL Ocean GFDL Ocean NSIPP Land NSIPP Land

  4. Infrastructure Layer Scope ESMF Superstructure Support for • Physical Grids • Regridding • Decomposition/composition • Communication • Calendar and Time • I/O • Logging and Profiling User Code ESMF Infrastructure

  5. Location Within ESMF 1. ESMF provides an environment for assembling components. Application Component Gridded Components Coupler Components 2. ESMF provides a toolkit that components use to • ensure interoperability • abstract common services Component: run(), checkpoint() INFRASTRUCTURE LAYER Grid: regrid(), transpose() + Metrics Field: halo(), import(), export() + I/O Layout, PEList, Machine Model

  6. Talk Outline • What is the infrastructure layer • What is it for • What it contains • ESMF infrastructure in this release • ESMF version 1.0 function call† examples (code!!!) (†aka API or methods) • Next steps…. • Infrastructure utility example

  7. Bundle Regrid Field Grid PhysGrid DistGrid F90 Data Communications C++ DELayout Array Route MachineModel Comm Time, Alarm, Calendar, LogErr, I/O, Attributes Infrastructure Internal Organization Two tiers Class hierarchy for data and communications

  8. ESMF Infrastructure Fields and Grids

  9. Creating an ESMF Field • Fortran Array • Array Attach • Field Attach Array real, dimension(100,100) :: arr ESMF_Array esArr = ESMF_ArrayCreate(arr,…) info. ESMF_Field metadata ESMF_FieldAttachArray(esFld,esArr,…) ESMF_Grid ESMF_Array info.

  10. Creating an ESMF Grid call ESMF_DistGridCreate…(…) call ESMF_PhysGridCreate…(…) DistGrid PhysGrid ESMF_Grid

  11. Field and Grid Together : grid = ESMF_GridCreate(…,layout,…) : field_u = ESMF_FieldCreate(grid, array) : ESMF_Field metadata ESMF_Grid ESMF_Array info. • Create field distributed over a set of decomposition elements (DE’s). • Domain decomposition determined by DELayout, layout. • Each object (grid and field_u) has internal representation. • Other parts of the infrastructure layer use the internal representation e.g. • Regrid() – interpolation/extrapolation + redistribute over DE’s • Redistribution() - general data rearrangement over DE’s • Halo() – specialized redistribution

  12. Regrid • Function mapping field’s array to a different physical and distributed grid. • RegridCreate() – creates a Regrid structure to be used/re-used regrid = ESMF_RegridCreate(src_field, dst_field, method, [name], [rc]) Source, Dest field can be empty of field data (RegridCreate() uses grid metrics) • PhysGrid, DistGrid info used for setting up regrid • Resulting regrid can be used for other fields sharing same Grid • Method specifies interpolation algorithm. For example, bilinear, b-spline, etc…

  13. Regrid Interface (cont) • RegridRun() – performs actual regridding call ESMF_RegridRun(src_field, dst_field, regrid,[rc]) • Communication and interpolation handled transparently. • RegridDestroy() – frees up memory call ESMF_RegridDestroy(regrid,[rc]) src_field dst_field

  14. src_field Redistribution • No interpolation or extrapolation • Maps between distributed grids, field’s array and physical grid are the same i.e. • Example: layout() created two distributed grids one decomposed in X and one decomposed in Y. • Redistribution() function maps array data between the distributions (a transpose/corner turn) • Communication handled transparently dst_field

  15. Halo • Fields have distributed index space of • Exclusive {E}, compute {C} and local {L} region where • Halo() fills points not in {E} or {C} from remote {E} e.g call ESMF_FieldHalo(field_foo, status) {L} {L} {C} {C} {E} {E} DE4 DE3

  16. More functions in reference manual e.g

  17. Bundle and Location Stream • ESMF_Bundle • collection of fields on the same grid • ESMF_LocationStream • Like a field but….. • unstructured index space with an associated physical grid space • useful for observations e.g. radiosonde, floats • Functions for create(), regrid(), redistribute(), halo() etc…

  18. ESMF Infrastructure Utilities • Clock • Alarm • Calendar • I/O • Logging • Profiling • Attribute • Machine model and comms Ensures consistent time between components Provides field level I/O in standard forms – netCDF, binary, HDF, GRIB, Bufr Consistent monitoring and messaging Consistent parameter handling Hardware and system software hiding. Platform customizable

  19. Time • Standard type for any component • Calendar (support for range of calendars) ! initialize stop time to 13May2003, 2:00 pm call ESMF_TimeInit(inject_stop_time, & YR=int(2003,kind=ESMF_IKIND_I8), & MM=off_month, DD=off_day, H=off_hour, M=off_min, & S=int(0,kind=ESMF_IKIND_I8), & cal=gregorianCalendar, rc=rc) do while (currTime .le. inject_stop_time ) : call ESMF_ClockAdvance(localclock, rc=rc) call ESMF_ClockGetCurrTime(localclock, currtime, rc) end call ESMF_CalendarInit(gregorianCalendar, ESMF_CAL_GREGORIAN, rc)

  20. I/O • Field level binary, netCDF, HDF, GRIB, bufr • Currently I/O piped through 1 PE call ESMF_FieldAllGather(field_u, outarray, status) if (de_id .eq. 0) then write(filename, 20) "U_velocity", file_no call ESMF_ArrayWrite(outarray, filename=filename, rc=status) endif call ESMF_ArrayDestroy(outarray, status) • Current system fixed textual.

  21. Attributes • Flexible parameter specs, configuration e.g. file of parameters Code

  22. Internal Classes • Machine model • Captures system attributes, CPU, mem, connectivity graph • Useful for defining decomposition, load-balance, performance predictions. • Comms • Communication driver, allows bindings to MPI, shared memory, vendor system libraries

  23. Comms Performance Test Right mix (green) on Compaq gives x2 realized bandwidth (in large message limit)

  24. Talk Outline • What is the infrastructure layer • What is it for • What it contains • ESMF infrastructure in this release • ESMF version 1.0 function call† examples (code!!!) (†aka API or methods) • Next steps…. • Infrastructure utility example

  25. Regrid Next Steps • Support for all ESMF Grids • Support for regridding methods: Bilinear Bicubic 1st-order Conservative 2nd-order Conservative Rasterized Conservative Nearest-neighbor distance-weighted average Halo Next Steps • Support for periodicity • More general haloing • in tandem with distributed grid evolution • Adjoint forms Spectral transforms 1-d interpolations (splines) Index-space (shifts, stencils) Adjoints of many above

  26. Distributed Grid • Regular 2d already supported • Next steps • Generalized 1d decomposition • Extend support for 2d and quasi regular decomposition • Spectral grid decompositions Physical Grid Next Steps • Larger set of metrics, grids • High level routines for rapid definition of common grids.

  27. I/O Next Steps • Broaden format set, binary, netCDF, HDF, GRIB, bufr • Improve parallelization • Full support for alarms • Broader functionality Time/Logging/Profiling Next Steps

  28. Summary • ESMF Infrastructure Layer • Comprehensive class structure available in version 1.0 • Over the coming year significant extension of functionality will take place. • Feedback and comments on version 1.0 welcome http://www.esmf.ucar.edu

  29. Time Manager ESMF Infrastructure Utility detailed example Earl Schwab, ESMF Core Team, NCAR

  30. What is Time Manager? • Clock for time simulation • Time representation • Time calculator • Time comparisons • Time queries • F90 API, C++ implementation

  31. Clock for time simulation type(ESMF_Clock) :: clock call ESMF_ClockInit(clock, timeStep, startTime, stopTime, rc=rc) do while (.not.ESMF_ClockIsStopTime(clock, rc)) ! Do application work . . . call ESMF_ClockAdvance(clock, rc=rc) end do

  32. Clock (cont.) • Clock queries/commands call ESMF_ClockGetCurrTime(clock, currTime, rc) call ESMF_ClockSetCurrTime(clock, currTime, rc) call ESMF_ClockGetTimeStep(clock, timeStep, rc) call ESMF_ClockSetTimeStep(clock, timeStep, rc) call ESMF_ClockGetAdvanceCount(clock, advanceCount, rc) call ESMF_ClockGetStartTime(clock, startTime, rc) call ESMF_ClockGetStopTime(clock, stopTime, rc) call ESMF_ClockGetPrevTime(clock, prevTime, rc) call ESMF_ClockSyncToWallClock(clock, rc)

  33. Time Representation type(ESMF_Calendar) :: calendar1 call ESMF_CalendarInit(calendar1, ESMF_CAL_GREGORIAN, rc) - ESMF_CAL_GREGORIAN (3/1/-4800 to 10/29/292,277,019,914) - ESMF_CAL_JULIAN (+/- 106,751,991,167,300 days) - ESMF_CAL_NOLEAP - ESMF_CAL_360DAY

  34. Time Representation (cont.) type(ESMF_Time) :: time1 call ESMF_TimeInit(time1, YR=int( 2003 ,kind=ESMF_IKIND_I8), & MM= 5 , DD= 15 , H= 15 , cal=calendar1, rc=rc) - YR, MM, DD, H, M, S F90 optional - D, H, M, S arguments type(ESMF_TimeInterval) :: timeInterval1 call ESMF_TimeIntervalInit(timeInterval1, D=int( 90 ,kind=ESMF_IKIND_I8), rc=rc) - D, H, M, S F90 optional arguments

  35. Time Calculator • Time differencing • Time increment/decrement by a time interval • Time interval arithmetic (+, -, *, /)

  36. Time Calculator (cont.) call ESMF_TimeInit(time1, YR=int( 2003 ,kind=ESMF_IKIND_I8), & MM= 5 , DD= 15 , cal=gregorianCalendar, rc=rc) call ESMF_TimeInit(time2, YR=int( 2003 ,kind=ESMF_IKIND_I8), & MM= 3 , DD= 26 , cal=gregorianCalendar, rc=rc) call ESMF_TimeIntervalInit(timeInterval1, D=int( 90 ,kind=ESMF_IKIND_I8, rc=rc) timeInterval2 = time2 - time1 time1 = time1 + timeInterval1 ! Uses F90 overloaded timeInterval3 = timeInterval1 * 2 ! operators double precision :: ratio ratio = timeInterval1 / timeInterval2

  37. Time Comparisons >, <, >=, <=, ==, <> F90 overloaded operators between any 2 times or time intervals if (time1 < time2) then … end if if (timeInterval1 .ge. timeInterval2) then … end if

  38. Time Queries call ESMF_TimeGet(time1, YR=yr, MM=mm, DD=dd, H=h, M=m, S=s, rc=rc) call ESMF_TimeIntervalGet(timeInterval1, D=d, H=h, M=m, S=s) call ESMF_TimeGetDayOfYear(time1, dayOfYear, rc) ! double or integer call ESMF_TimeGetDayOfMonth(time1, dayOfMonth, rc) call ESMF_TimeGetDayOfWeek(time1, dayOfWeek, rc) call ESMF_TimeGetMidMonth(time1, midMonth, rc) call ESMF_TimeGetString(time1, string, rc) ! 2003-05-14T12:20:19 (ISO 8601) call ESMF_TimeIntervalGetString(timeInterval1, string, rc) ! P1DT12H0M0S (ISO) call ESMF_TimeGetRealTime(time1, rc)

  39. More information • ESMF User’s Guide • ESMF Reference Manual • ESMF Requirements Document • Time Manager F90 API & examples source code esmf_1_0_0_r/src/Infrastructure/TimeMgr/interface esmf_1_0_0_r/src/Infrastructure/TimeMgr/examples

More Related