2828#include <Mesh/include/ESMCI_XGridUtil.h>
2929#include "PointList/include/ESMCI_PointList.h"
3030
31+ #include "ESMCI_TraceMacros.h" // for profiling
32+
3133#include <iostream>
3234#include <fstream>
3335#include <cmath>
@@ -2901,6 +2903,8 @@ Interp::Interp(Mesh *src, PointList *srcplist, Mesh *dest, PointList *dstplist,
29012903 bool set_dst_status , WMat & dst_status ,
29022904 MAP_TYPE mtype , int unmappedaction , bool checkFlag ,
29032905 int _num_src_pnts , ESMC_R8 _dist_exponent ):
2906+ #undef ESMC_METHOD
2907+ #define ESMC_METHOD "Interp::Interp()"
29042908
29052909sres (),
29062910grend (src , srcplist , dest , dstplist , get_dst_config (imethod ), freeze_src_ , (mtype == MAP_TYPE_GREAT_CIRCLE )),
@@ -2946,14 +2950,20 @@ interp_method(imethod)
29462950 }
29472951
29482952 if (is_parallel ) {
2949-
2953+ int localrc ;
2954+ ESMCI ::TraceEventRegionEnter ("Regrid geometry redist" , & localrc );
2955+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
2956+
29502957 // Form the parallel rendezvous meshes/specs
29512958 // if (Par::Rank() == 0)
29522959 //std::cout << "Building rendezvous..." << std::endl;
29532960 grend .Build (srcF .size (), (srcF .size ()> 0 )?(& srcF [0 ]):NULL ,
29542961 dstF .size (), (dstF .size ()> 0 )?(& dstF [0 ]):NULL ,
29552962 & zz , midmesh == 0 ? true:false);
29562963
2964+ ESMCI ::TraceEventRegionExit ("Regrid geometry redist" , & localrc );
2965+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
2966+
29572967 // Check grend status, if it's not complete
29582968 if (grend .status != GEOMREND_STATUS_COMPLETE ) {
29592969 if (grend .status == GEOMREND_STATUS_NO_DST ) {
@@ -2976,30 +2986,52 @@ interp_method(imethod)
29762986 }
29772987
29782988
2979-
2989+
29802990 if (has_nearest_dst_to_src ) {
29812991 Throw () << "unable to proceed with interpolation method dst_to_src" ;
29822992
29832993 } else if (has_nearest_src_to_dst ) {
2984- ParSearchNearestSrcToDst (grend .GetSrcPlistRend (), grend .GetDstPlistRend (), unmappedaction , sres , set_dst_status , dst_status );
2994+ int localrc ;
2995+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
2996+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
29852997
2998+ // Do search
2999+ ParSearchNearestSrcToDst (grend .GetSrcPlistRend (), grend .GetDstPlistRend (), unmappedaction , sres , set_dst_status , dst_status );
3000+
3001+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3002+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3003+
29863004 // Redistribute regrid status
29873005 if (set_dst_status ) {
29883006 dst_status .Migrate (* dstplist );
29893007 }
29903008 } else if (has_nearest_idavg ) {
3009+ int localrc ;
3010+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3011+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3012+
29913013 ParSearchNearestSrcToDstNPnts (grend .GetSrcPlistRend (), grend .GetDstPlistRend (), num_src_pnts , unmappedaction , sres , set_dst_status , dst_status );
29923014
3015+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3016+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3017+
29933018 // Redistribute regrid status
29943019 if (set_dst_status ) {
29953020 dst_status .Migrate (* dstplist );
29963021 }
29973022 } else {
29983023 if (search_obj_type == MeshObj ::NODE ) {
2999-
3024+ int localrc ;
3025+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3026+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3027+
30003028 // Search
30013029 OctSearch (grend .GetSrcRend (), grend .GetDstPlistRend (), mtype , search_obj_type ,
30023030 unmappedaction , sres , set_dst_status , dst_status , 1e-8 );
3031+
3032+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3033+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3034+
30033035 // Redistribute regrid status
30043036 if (set_dst_status ) {
30053037 dst_status .Migrate (* dstplist );
@@ -3015,20 +3047,36 @@ interp_method(imethod)
30153047 // Search
30163048 // OctSearchElems(grend.GetDstRend(), unmappedaction, grend.GetSrcRend(), ESMCI_UNMAPPEDACTION_IGNORE, 1e-8, sres);
30173049 if (freeze_src_ ) {
3050+ int localrc ;
3051+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3052+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3053+
30183054 OctSearchElems (* src , ESMCI_UNMAPPEDACTION_IGNORE , grend .GetDstRend (), unmappedaction , 1e-8 , sres );
3055+
3056+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3057+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3058+
30193059 } else {
3060+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3061+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3062+
30203063 // If 2nd order see if it's an XGrid and then use that
30213064 if (interp_method == Interp ::INTERP_CONSERVE_2ND ) {
30223065
30233066 // If an XGrid isn't involved, then do a search using regular method
30243067 if (detect_xgrid_regrid_info_type (grend .GetSrcRend (), grend .GetDstRend ()) == XGRID_USE_NONE ) {
3068+ int localrc ;
30253069 OctSearchElems (grend .GetSrcRend (), ESMCI_UNMAPPEDACTION_IGNORE , grend .GetDstRend (), unmappedaction , 1e-8 , sres );
30263070 } else { // ...otherwise use XGrid information
30273071 XGridGatherOverlappingElems (grend .GetSrcRend (), grend .GetDstRend (), sres );
30283072 }
30293073 } else { // ...otherwise just use the regular search
30303074 OctSearchElems (grend .GetSrcRend (), ESMCI_UNMAPPEDACTION_IGNORE , grend .GetDstRend (), unmappedaction , 1e-8 , sres );
30313075 }
3076+
3077+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3078+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3079+
30323080 }
30333081 }
30343082 }
@@ -3043,25 +3091,53 @@ interp_method(imethod)
30433091 } else {
30443092 // Serial track. Meshes already in geometric rendezvous. (Perhaps get
30453093 // the subset of the mesh for interpolating??)
3094+ int localrc ;
30463095
30473096 if (has_nearest_dst_to_src ) {
30483097 Throw () << "unable to proceed with interpolation method dst_to_src" ;
30493098 } else if (has_nearest_src_to_dst ) {
3099+
3100+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3101+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3102+
30503103 SearchNearestSrcToDst (* srcpointlist , * dstpointlist , unmappedaction , sres , set_dst_status , dst_status );
3104+
3105+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3106+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3107+
3108+
30513109 } else if (has_nearest_idavg ) {
3110+
3111+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3112+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3113+
30523114 SearchNearestSrcToDstNPnts (* srcpointlist , * dstpointlist , num_src_pnts , unmappedaction , sres , set_dst_status , dst_status );
3115+
3116+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3117+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3118+
30533119 } else {
30543120
30553121 if (search_obj_type == MeshObj ::NODE ) {
3122+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3123+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3124+
30563125 OctSearch (* src , * dstpointlist , mtype , search_obj_type ,
30573126 unmappedaction , sres , set_dst_status , dst_status , 1e-8 );
3127+
3128+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3129+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
30583130 //OctSearch(src, dest, mtype, search_obj_type, unmappedaction, sres, 1e-8);
30593131 } else if (search_obj_type == MeshObj ::ELEMENT ) {
30603132 // Check grids
30613133 if (checkFlag ) {
30623134 _check_mesh (* src , "source" );
30633135 _check_mesh (* dest , "destination" );
30643136 }
3137+
3138+ ESMCI ::TraceEventRegionEnter ("Search" , & localrc );
3139+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3140+
30653141
30663142 // If 2nd order see if it's an XGrid and then use that
30673143 if (interp_method == Interp ::INTERP_CONSERVE_2ND ) {
@@ -3074,7 +3150,10 @@ interp_method(imethod)
30743150 }
30753151 } else { // ...otherwise just use the regular search
30763152 OctSearchElems (* src , ESMCI_UNMAPPEDACTION_IGNORE , * dest , unmappedaction , 1e-8 , sres );
3077- }
3153+ }
3154+
3155+ ESMCI ::TraceEventRegionExit ("Search" , & localrc );
3156+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
30783157 }
30793158 }
30803159
@@ -3128,6 +3207,9 @@ static void _set_mesh_masked_elem_status(Mesh &mesh, WMat &status) {
31283207 * There is an ASSUMPTION here that the field is nodal, both sides
31293208 */
31303209void Interp ::operator ()(int fpair_num , IWeights & iw , bool set_dst_status , WMat & dst_status ) {
3210+ #undef ESMC_METHOD
3211+ #define ESMC_METHOD "Interp::operator()"
3212+
31313213 Trace __trace ("Interp::operator()(int fpair_num, IWeights &iw)" );
31323214
31333215 IWeights src_frac ,dst_frac ; // Use IW to get out source and dst frac and to migrate it to the correct procs
@@ -3193,9 +3275,17 @@ void Interp::operator()(int fpair_num, IWeights &iw, bool set_dst_status, WMat &
31933275 }
31943276
31953277 // Calculate weights
3278+ // Trace around weight generation
3279+ int localrc ;
3280+ ESMCI ::TraceEventRegionEnter ("Weight calculation" , & localrc );
3281+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3282+
31963283 if (is_parallel ) mat_transfer_parallel (fpair_num , iw , src_frac , dst_frac , set_dst_status , dst_status );
31973284 else mat_transfer_serial (fpair_num , iw , src_frac , dst_frac , set_dst_status , dst_status );
31983285
3286+ ESMCI ::TraceEventRegionExit ("Weight calculation" , & localrc );
3287+ if (ESMC_LogDefault .MsgFoundError (localrc ,ESMCI_ERR_PASSTHRU ,ESMC_CONTEXT ,NULL )) throw localrc ;
3288+
31993289#if 0
32003290 {
32013291 WMat ::WeightMap ::iterator wi = iw .begin_row (), we = iw .end_row ();
0 commit comments