@@ -1430,6 +1430,8 @@ function readBlockProbe(bp) result(res)
14301430 type (coords), dimension (:), allocatable :: cs
14311431 type (cell_region_t), dimension (:), allocatable :: cRs
14321432
1433+ character (len= 1 ) :: direction
1434+
14331435 cRs = this% mesh% getCellRegions(this% getIntsAt(bp, J_ELEMENTIDS))
14341436 if (size (cRs) /= 1 ) then
14351437 call WarnErrReport(" Bulk current probe must be defined by a single cell region." , .true. )
@@ -1447,6 +1449,15 @@ function readBlockProbe(bp) result(res)
14471449 res% k1 = cs(1 )% zi
14481450 res% k2 = cs(1 )% ze
14491451 res% nml = abs (cs(1 )% Or)
1452+ if (res% nml == 0 ) then ! DIR_NULL
1453+ direction = this% getStrAt(bp, J_DIR)
1454+ select case (trim (adjustl (direction)))
1455+ case (J_DIR_X); res% nml = 1 ! DIR_X
1456+ case (J_DIR_Y); res% nml = 2 ! DIR_Y
1457+ case (J_DIR_Z); res% nml = 3 ! DIR_Z
1458+ case default ; call WarnErrReport(' Null direction detected for bulk probe. Check definition' )
1459+ end select
1460+ end if
14501461
14511462 res% outputrequest = trim (adjustl (this% getStrAt(bp, J_NAME)))
14521463 call setDomain(res, this% getDomain(bp, J_PR_DOMAIN))
@@ -2722,6 +2733,7 @@ function buildNode(termination_list, label, index, id) result(res)
27222733 type (polyline_t) :: polyline
27232734 type (aux_node_t) :: res
27242735 integer :: cable_index
2736+ integer :: stat
27252737 call this% core% get_child(termination_list, index, termination)
27262738
27272739 res% node% termination% termination_type = readTerminationType(termination)
@@ -2735,17 +2747,18 @@ function buildNode(termination_list, label, index, id) result(res)
27352747 res% node% side = label
27362748 res% node% conductor_in_cable = index
27372749
2738- call elemIdToCable% get(key(id), value= cable_index)
2750+ call elemIdToCable% get(key(id), value= cable_index, stat= stat)
2751+ if (stat == 0 ) then
27392752 res% node% belongs_to_cable = > mtln_res% cables(cable_index)% ptr
27402753
27412754 polyline = this% mesh% getPolyline(id)
2742-
2743- if (label == TERMINAL_NODE_SIDE_INI) then
2744- res% cId = polyline% coordIds(1 )
2745- res % relPos = this % mesh % getCoordinate(polyline % coordIds( 1 ))
2746- else if (label == TERMINAL_NODE_SIDE_END) then
2747- res% cId = polyline% coordIds(ubound (polyline% coordIds,1 ))
2748- res % relPos = this % mesh % getCoordinate(polyline % coordIds( ubound (polyline % coordIds, 1 )))
2755+ if (label == TERMINAL_NODE_SIDE_INI) then
2756+ res % cId = polyline % coordIds( 1 )
2757+ res% relPos = this % mesh % getCoordinate( polyline% coordIds(1 ) )
2758+ else if (label == TERMINAL_NODE_SIDE_END) then
2759+ res % cId = polyline % coordIds( ubound (polyline % coordIds, 1 ))
2760+ res% relPos = this % mesh % getCoordinate( polyline% coordIds(ubound (polyline% coordIds,1 ) ))
2761+ end if
27492762 end if
27502763 end function
27512764
@@ -3176,9 +3189,10 @@ function getPointerToParentCable(cables, id) result(res)
31763189 call elemIdToCable% check_key(key(id), mStat)
31773190 if (mStat /= 0 ) then
31783191 res = > null ()
3192+ else
3193+ call elemIdToCable% get(key(id), value= index)
3194+ res = > cables(index)% ptr
31793195 end if
3180- call elemIdToCable% get(key(id), value= index)
3181- res = > cables(index)% ptr
31823196 end function
31833197
31843198 function findConnectorWithId (conn_Id ) result(res)
@@ -3480,29 +3494,54 @@ function buildSegments(j_cable, despl) result(res)
34803494 end do
34813495 end function
34823496
3497+ pure integer function clip(i, lo, hi)
3498+ integer , intent (in ) :: i, lo, hi
3499+ clip = max (lo, min (i, hi))
3500+ end function clip
3501+
34833502 function getdualBoxYZ (segment , despl ) result (res)
34843503 type (Desplazamiento), intent (in ) :: despl
34853504 type (segment_t), intent (in ) :: segment
34863505 type (box_2d_t) :: res
3487- res% min = [- 0.5 * despl% desY(segment% y-1 ),- 0.5 * despl% desZ(segment% z-1 )]
3488- res% max = [ 0.5 * despl% desY(segment% y), 0.5 * despl% desZ(segment% z)]
3506+ integer :: y0, y1, z0, z1
3507+
3508+ y0 = clip(segment% y-1 , 0 , size (despl% desY)- 1 )
3509+ y1 = clip(segment% y, 0 , size (despl% desY)- 1 )
3510+ z0 = clip(segment% z-1 , 0 , size (despl% desZ)- 1 )
3511+ z1 = clip(segment% z, 0 , size (despl% desZ)- 1 )
3512+
3513+ res% min = [- 0.5 * despl% desY(y0), - 0.5 * despl% desZ(z0)]
3514+ res% max = [ 0.5 * despl% desY(y1), 0.5 * despl% desZ(z1)]
34893515 end function
34903516
34913517 function getdualBoxXY (segment , despl ) result (res)
34923518 type (Desplazamiento), intent (in ) :: despl
34933519 type (segment_t), intent (in ) :: segment
34943520 type (box_2d_t) :: res
3495- res% min = [- 0.5 * despl% desX(segment% x-1 ),- 0.5 * despl% desY(segment% y-1 )]
3496- res% max = [ 0.5 * despl% desX(segment% x), 0.5 * despl% desY(segment% y)]
3521+ integer :: x0, x1, y0, y1
3522+
3523+ x0 = clip(segment% x-1 , 0 , size (despl% desX)- 1 )
3524+ x1 = clip(segment% x, 0 , size (despl% desX)- 1 )
3525+ y0 = clip(segment% y-1 , 0 , size (despl% desY)- 1 )
3526+ y1 = clip(segment% y, 0 , size (despl% desY)- 1 )
3527+
3528+ res% min = [- 0.5 * despl% desX(x0), - 0.5 * despl% desY(y0)]
3529+ res% max = [ 0.5 * despl% desX(x1), 0.5 * despl% desY(y1)]
34973530 end function
34983531
34993532 function getdualBoxZX (segment , despl ) result (res)
35003533 type (Desplazamiento), intent (in ) :: despl
35013534 type (segment_t), intent (in ) :: segment
35023535 type (box_2d_t) :: res
3503- res% min = [- 0.5 * despl% desZ(segment% z-1 ),- 0.5 * despl% desX(segment% x-1 )]
3504- res% max = [ 0.5 * despl% desZ(segment% z), 0.5 * despl% desX(segment% x)]
3536+ integer :: z0, z1, x0, x1
3537+
3538+ z0 = clip(segment% z-1 , 0 , size (despl% desZ)- 1 )
3539+ z1 = clip(segment% z, 0 , size (despl% desZ)- 1 )
3540+ x0 = clip(segment% x-1 , 0 , size (despl% desX)- 1 )
3541+ x1 = clip(segment% x, 0 , size (despl% desX)- 1 )
35053542
3543+ res% min = [- 0.5 * despl% desZ(z0), - 0.5 * despl% desX(x0)]
3544+ res% max = [ 0.5 * despl% desZ(z1), 0.5 * despl% desX(x1)]
35063545 end function
35073546
35083547 function buildStepSize (segments , despl ) result(res)
0 commit comments