@@ -2722,6 +2722,7 @@ function buildNode(termination_list, label, index, id) result(res)
27222722 type (polyline_t) :: polyline
27232723 type (aux_node_t) :: res
27242724 integer :: cable_index
2725+ integer :: stat
27252726 call this% core% get_child(termination_list, index, termination)
27262727
27272728 res% node% termination% termination_type = readTerminationType(termination)
@@ -2735,17 +2736,18 @@ function buildNode(termination_list, label, index, id) result(res)
27352736 res% node% side = label
27362737 res% node% conductor_in_cable = index
27372738
2738- call elemIdToCable% get(key(id), value= cable_index)
2739+ call elemIdToCable% get(key(id), value= cable_index, stat= stat)
2740+ if (stat == 0 ) then
27392741 res% node% belongs_to_cable = > mtln_res% cables(cable_index)% ptr
27402742
27412743 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 )))
2744+ if (label == TERMINAL_NODE_SIDE_INI) then
2745+ res % cId = polyline % coordIds( 1 )
2746+ res% relPos = this % mesh % getCoordinate( polyline% coordIds(1 ) )
2747+ else if (label == TERMINAL_NODE_SIDE_END) then
2748+ res % cId = polyline % coordIds( ubound (polyline % coordIds, 1 ))
2749+ res% relPos = this % mesh % getCoordinate( polyline% coordIds(ubound (polyline% coordIds,1 ) ))
2750+ end if
27492751 end if
27502752 end function
27512753
@@ -3176,9 +3178,10 @@ function getPointerToParentCable(cables, id) result(res)
31763178 call elemIdToCable% check_key(key(id), mStat)
31773179 if (mStat /= 0 ) then
31783180 res = > null ()
3181+ else
3182+ call elemIdToCable% get(key(id), value= index)
3183+ res = > cables(index)% ptr
31793184 end if
3180- call elemIdToCable% get(key(id), value= index)
3181- res = > cables(index)% ptr
31823185 end function
31833186
31843187 function findConnectorWithId (conn_Id ) result(res)
@@ -3480,29 +3483,54 @@ function buildSegments(j_cable, despl) result(res)
34803483 end do
34813484 end function
34823485
3486+ pure integer function clip(i, lo, hi)
3487+ integer , intent (in ) :: i, lo, hi
3488+ clip = max (lo, min (i, hi))
3489+ end function clip
3490+
34833491 function getdualBoxYZ (segment , despl ) result (res)
34843492 type (Desplazamiento), intent (in ) :: despl
34853493 type (segment_t), intent (in ) :: segment
34863494 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)]
3495+ integer :: y0, y1, z0, z1
3496+
3497+ y0 = clip(segment% y-1 , 0 , size (despl% desY)- 1 )
3498+ y1 = clip(segment% y, 0 , size (despl% desY)- 1 )
3499+ z0 = clip(segment% z-1 , 0 , size (despl% desZ)- 1 )
3500+ z1 = clip(segment% z, 0 , size (despl% desZ)- 1 )
3501+
3502+ res% min = [- 0.5 * despl% desY(y0), - 0.5 * despl% desZ(z0)]
3503+ res% max = [ 0.5 * despl% desY(y1), 0.5 * despl% desZ(z1)]
34893504 end function
34903505
34913506 function getdualBoxXY (segment , despl ) result (res)
34923507 type (Desplazamiento), intent (in ) :: despl
34933508 type (segment_t), intent (in ) :: segment
34943509 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)]
3510+ integer :: x0, x1, y0, y1
3511+
3512+ x0 = clip(segment% x-1 , 0 , size (despl% desX)- 1 )
3513+ x1 = clip(segment% x, 0 , size (despl% desX)- 1 )
3514+ y0 = clip(segment% y-1 , 0 , size (despl% desY)- 1 )
3515+ y1 = clip(segment% y, 0 , size (despl% desY)- 1 )
3516+
3517+ res% min = [- 0.5 * despl% desX(x0), - 0.5 * despl% desY(y0)]
3518+ res% max = [ 0.5 * despl% desX(x1), 0.5 * despl% desY(y1)]
34973519 end function
34983520
34993521 function getdualBoxZX (segment , despl ) result (res)
35003522 type (Desplazamiento), intent (in ) :: despl
35013523 type (segment_t), intent (in ) :: segment
35023524 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)]
3525+ integer :: z0, z1, x0, x1
3526+
3527+ z0 = clip(segment% z-1 , 0 , size (despl% desZ)- 1 )
3528+ z1 = clip(segment% z, 0 , size (despl% desZ)- 1 )
3529+ x0 = clip(segment% x-1 , 0 , size (despl% desX)- 1 )
3530+ x1 = clip(segment% x, 0 , size (despl% desX)- 1 )
35053531
3532+ res% min = [- 0.5 * despl% desZ(z0), - 0.5 * despl% desX(x0)]
3533+ res% max = [ 0.5 * despl% desZ(z1), 0.5 * despl% desX(x1)]
35063534 end function
35073535
35083536 function buildStepSize (segments , despl ) result(res)
0 commit comments