Skip to content

Commit 242e9ec

Browse files
committed
Merge branch 'regrid_profile' into develop
2 parents 0879ebf + 7b13159 commit 242e9ec

File tree

10 files changed

+427
-22
lines changed

10 files changed

+427
-22
lines changed

src/Infrastructure/Field/src/ESMF_FieldRegrid.F90

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,74 @@ subroutine ESMF_FieldRegridRelease(routehandle, keywordEnforcer, &
347347
end subroutine ESMF_FieldRegridRelease
348348
!------------------------------------------------------------------------------
349349

350+
#undef ESMF_METHOD
351+
#define ESMF_METHOD "fillProfileStr"
352+
subroutine fillProfileStr(srcField, dstField, regridmethod, profileStr, rc)
353+
type(ESMF_Field), intent(in) :: srcField
354+
type(ESMF_Field), intent(inout) :: dstField
355+
type(ESMF_RegridMethod_Flag), intent(in),optional :: regridmethod
356+
character (len=*), intent(out) :: profileStr
357+
integer, intent(out), optional :: rc
350358

359+
integer :: localrc
360+
character (len=ESMF_MAXSTR) :: tmpStr
351361

362+
363+
! Set string
364+
profileStr="ESMF_FieldRegridStore("
352365

353-
#ifndef FRS_OLDWAY
366+
! Get srcField name
367+
call ESMF_FieldGet(srcField, name=tmpStr, rc=localrc)
368+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
369+
ESMF_CONTEXT, rcToReturn=rc)) return
354370

371+
! Add to profileStr
372+
profileStr=trim(profileStr)//"src="//trim(tmpStr)
373+
374+
375+
! Get dstField name
376+
call ESMF_FieldGet(dstField, name=tmpStr, rc=localrc)
377+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
378+
ESMF_CONTEXT, rcToReturn=rc)) return
379+
380+
! Add to profileStr
381+
profileStr=trim(profileStr)//" dst="//trim(tmpStr)
382+
383+
! Get method name
384+
if (present(regridmethod)) then
385+
if (regridMethod == ESMF_REGRIDMETHOD_BILINEAR) then
386+
tmpStr="bilinear"
387+
else if (regridMethod == ESMF_REGRIDMETHOD_CONSERVE) then
388+
tmpStr="conserve"
389+
else if (regridMethod == ESMF_REGRIDMETHOD_CONSERVE_2ND) then
390+
tmpStr="conserve2nd"
391+
else if (regridMethod == ESMF_REGRIDMETHOD_PATCH) then
392+
tmpStr="patch"
393+
else if (regridMethod == ESMF_REGRIDMETHOD_NEAREST_STOD) then
394+
tmpStr="neareststod"
395+
else if (regridMethod == ESMF_REGRIDMETHOD_NEAREST_DTOS) then
396+
tmpStr="nearestdtos"
397+
else
398+
tmpStr="unknown"
399+
endif
400+
else
401+
tmpStr="bilinear" ! Default to bilinear if not present
402+
endif
403+
404+
! Add to profileStr
405+
profileStr=trim(profileStr)//" method="//trim(tmpStr)
406+
407+
! end it
408+
profileStr=trim(profileStr)//")"
409+
410+
! Return success !
411+
if(present(rc)) rc = ESMF_SUCCESS
412+
413+
end subroutine fillProfileStr
414+
415+
416+
417+
#ifndef FRS_OLDWAY
355418

356419
!------------------------------------------------------------------------------
357420
#undef ESMF_METHOD
@@ -739,17 +802,31 @@ subroutine ESMF_FieldRegridStoreNX(srcField, dstField, keywordEnforcer, &
739802
real(ESMF_KIND_R8), pointer :: tmp_weights(:)
740803
real(ESMF_KIND_R8) :: beg_time, end_time
741804
logical :: addOrigCoordsToPointList
742-
805+
character (len=ESMF_MAXSTR) :: profileStr="<Not Set>"
806+
743807
! Debug Timing stuff
744808
! call ESMF_VMWtime(beg_time)
745809
! ESMF_METHOD_ENTER(localrc)
746810

747-
748811
! Initialize return code; assume failure until success is certain
749812
localrc = ESMF_SUCCESS
750813
if (present(rc)) rc = ESMF_RC_NOT_IMPL
751814

752815

816+
! Profiling
817+
if (ESMF_TraceGetProfileTypeInfo(ESMF_PROFILETYPE_REGRID) > 0) then
818+
! Fill profile string
819+
call fillProfileStr(srcField, dstField, regridMethod, profileStr, localrc)
820+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
821+
ESMF_CONTEXT, rcToReturn=rc)) return
822+
823+
! Start profile region
824+
call ESMF_TraceRegionEnter(profileStr, localrc)
825+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
826+
ESMF_CONTEXT, rcToReturn=rc)) return
827+
endif
828+
829+
753830

754831
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
755832
!!!! Warnings for deprecated arguments !!!!
@@ -1344,6 +1421,14 @@ subroutine ESMF_FieldRegridStoreNX(srcField, dstField, keywordEnforcer, &
13441421
ESMF_CONTEXT, rcToReturn=rc)) return
13451422
endif
13461423

1424+
1425+
! Profiling
1426+
if (ESMF_TraceGetProfileTypeInfo(ESMF_PROFILETYPE_REGRID) > 0) then
1427+
call ESMF_TraceRegionExit(profileStr, localrc)
1428+
if (ESMF_LogFoundError(localrc, ESMF_ERR_PASSTHRU, &
1429+
ESMF_CONTEXT, rcToReturn=rc)) return
1430+
endif
1431+
13471432

13481433
!!!!!!!!!!!!!!!!!!
13491434
! Return success !

src/Infrastructure/Mesh/src/ESMCI_Mesh_Regrid_Glue.C

Lines changed: 44 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "ESMCI_Array.h"
2727

2828
#include "ESMCI_TraceMacros.h" // for profiling
29+
#include "ESMCI_TraceRegion.h" // for profiling
2930

3031
#include "Mesh/include/ESMCI_Mesh.h"
3132
#include "Mesh/include/Legacy/ESMCI_MeshRead.h"
@@ -82,8 +83,6 @@ void CpMeshDataToArray(Grid &grid, int staggerLoc, ESMCI::Mesh &mesh, ESMCI::Arr
8283
void CpMeshElemDataToArray(Grid &grid, int staggerloc, ESMCI::Mesh &mesh, ESMCI::Array &array, MEField<> *dataToArray);
8384
void PutElemAreaIntoArray(Grid &grid, int staggerLoc, ESMCI::Mesh &mesh, ESMCI::Array &array);
8485

85-
86-
8786
void ESMCI_regrid_create(
8887
Mesh **meshsrcpp, ESMCI::Array **arraysrcpp, ESMCI::PointList **plsrcpp,
8988
Mesh **meshdstpp, ESMCI::Array **arraydstpp, ESMCI::PointList **pldstpp,
@@ -110,7 +109,11 @@ void ESMCI_regrid_create(
110109
#define ESMC_METHOD "ESMCI_regrid_create()"
111110
Trace __trace(" FTN_X(regrid_test)(ESMCI::Grid **gridsrcpp, ESMCI::Grid **griddstcpp, int*rc");
112111

112+
// Declare local return code
113+
int localrc;
113114

115+
116+
// Dereference input variables
114117
ESMCI::Array &srcarray = **arraysrcpp;
115118
ESMCI::Array &dstarray = **arraydstpp;
116119

@@ -123,6 +126,7 @@ void ESMCI_regrid_create(
123126
int has_statusArray=*_has_statusArray;
124127
ESMCI::Array *statusArray=*_statusArray;
125128

129+
126130
#define PROGRESSLOG_off
127131
#define MEMLOG_off
128132

@@ -136,9 +140,6 @@ void ESMCI_regrid_create(
136140

137141
try {
138142

139-
// Declare local return code
140-
int localrc;
141-
142143
// Initialize the parallel environment for mesh
143144
ESMCI::Par::Init("MESHLOG", false, VM::getCurrent(&localrc)->getMpi_c());
144145
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc; // bail out with exception
@@ -317,10 +318,11 @@ void ESMCI_regrid_create(
317318
}
318319

319320

320-
321-
322-
323-
321+
// Enter profile around weight generation
322+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
323+
ESMCI::TraceEventRegionEnter("Weight generation", &localrc);
324+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
325+
}
324326

325327
#ifdef PROGRESSLOG_on
326328
ESMC_LogDefault.Write("c_esmc_regrid_create(): Entering weight generation.", ESMC_LOGMSG_INFO);
@@ -384,6 +386,12 @@ void ESMCI_regrid_create(
384386
}
385387
}
386388

389+
// Exit profile around weight generation
390+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
391+
ESMCI::TraceEventRegionExit("Weight generation", &localrc);
392+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
393+
}
394+
387395
ESMCI_REGRID_TRACE_EXIT("NativeMesh Weight Generation");
388396

389397
#ifdef PROGRESSLOG_on
@@ -625,7 +633,13 @@ void ESMCI_regrid_create(
625633

626634
// Build the RouteHandle using ArraySMMStore()
627635
if (*has_rh) {
628-
636+
637+
// Enter profile around routehandle creation
638+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
639+
ESMCI::TraceEventRegionEnter("RouteHandle creation", &localrc);
640+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
641+
}
642+
629643
// Set some flags
630644
enum ESMC_TypeKind_Flag tk = ESMC_TYPEKIND_R8;
631645
ESMC_Logical ignoreUnmatched = ESMF_FALSE;
@@ -641,6 +655,13 @@ void ESMCI_regrid_create(
641655
pipelineDepth, &localrc);
642656
if (ESMC_LogDefault.MsgFoundError(localrc, ESMCI_ERR_PASSTHRU,
643657
ESMC_CONTEXT, NULL)) throw localrc; // bail out with exception
658+
659+
660+
// Exit profile around routehandle creation
661+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
662+
ESMCI::TraceEventRegionExit("RouteHandle creation", &localrc);
663+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
664+
}
644665
}
645666

646667
ESMCI_REGRID_TRACE_EXIT("NativeMesh ArraySMMStore");
@@ -663,6 +684,12 @@ void ESMCI_regrid_create(
663684

664685
ESMCI_REGRID_TRACE_ENTER("NativeMesh Transpose ArraySMMStore");
665686

687+
// Enter profile around routehandle creation
688+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
689+
ESMCI::TraceEventRegionEnter("Transpose RouteHandle creation", &localrc);
690+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
691+
}
692+
666693
// Allocate transpose matrix
667694
int *transpose_iientries = new int[iientries_entry_size*num_entries];
668695

@@ -722,6 +749,12 @@ void ESMCI_regrid_create(
722749
// Get rid of transposed factor index list
723750
delete [] transpose_iientries;
724751

752+
// Exit profile around routehandle creation
753+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 1) {
754+
ESMCI::TraceEventRegionExit("Transpose RouteHandle creation", &localrc);
755+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
756+
}
757+
725758
ESMCI_REGRID_TRACE_EXIT("NativeMesh Transpose ArraySMMStore");
726759

727760
#ifdef PROGRESSLOG_on
@@ -815,11 +848,11 @@ void ESMCI_regrid_create(
815848
ESMC_LogDefault.Write("c_esmc_regrid_create(): Final return.", ESMC_LOGMSG_INFO);
816849
#endif
817850

851+
818852
// Set return code
819853
if (rc!=NULL) *rc = ESMF_SUCCESS;
820854
}
821855

822-
823856
void ESMCI_regrid_getiwts(Grid **gridpp,
824857
Mesh **meshpp, ESMCI::Array **arraypp, int *staggerLoc,
825858
int *rc) {

src/Infrastructure/Mesh/src/Regridding/ESMCI_Extrap.C

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
#include <Mesh/include/Legacy/ESMCI_MeshRead.h>
1515
#include <Mesh/include/Regridding/ESMCI_Interp.h>
1616
#include <Mesh/include/Regridding/ESMCI_CreepFill.h>
17+
#include "ESMCI_TraceRegion.h"
18+
1719

1820
//-----------------------------------------------------------------------------
1921
// leave the following line as-is; it will insert the cvs ident string
@@ -1021,9 +1023,20 @@ template void _merge_dst_to_dst_wts_into_src_to_dst_wts(PointList &dst, WMat &dt
10211023
int extrapNumLevels,
10221024
int extrapNumInputLevels,
10231025
bool set_dst_status, WMat &dst_status) {
1024-
1026+
#undef ESMC_METHOD
1027+
#define ESMC_METHOD "extrap()"
1028+
10251029
// printf("BOB: in extrap() extrapMethod=%d\n",extrapMethod);
10261030

1031+
// Declare local return code
1032+
int localrc;
1033+
1034+
// Enter profile for extrap
1035+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 2) {
1036+
ESMCI::TraceEventRegionEnter("Extrapolation", &localrc);
1037+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
1038+
}
1039+
10271040
// Branch to each type of extrapolation
10281041
if (extrapMethod == ESMC_EXTRAPMETHOD_NONE) {
10291042

@@ -1082,6 +1095,12 @@ template void _merge_dst_to_dst_wts_into_src_to_dst_wts(PointList &dst, WMat &dt
10821095
Throw() << " Unrecognized extrapolation method.";
10831096
}
10841097

1098+
// Exit profile for extrap
1099+
if (TraceGetProfileTypeInfo(ESMC_PROFILETYPE_REGRID) > 2) {
1100+
ESMCI::TraceEventRegionExit("Extrapolation", &localrc);
1101+
if (ESMC_LogDefault.MsgFoundError(localrc,ESMCI_ERR_PASSTHRU,ESMC_CONTEXT,NULL)) throw localrc;
1102+
}
1103+
10851104
}
10861105

10871106

0 commit comments

Comments
 (0)