@@ -453,15 +453,10 @@ append_component_name(name::FieldName, component::Int) = append_internal_name(
453
453
),
454
454
)
455
455
456
- # general strat is Recursive
457
- # first we start with dict and Y
458
- # 1. flatmap all key pairs into pairs plus appended stuffs
459
- # 1.1 if the eltype is not a scalar, then we recurse, and append.
460
- # 1.1 the resucrsion func should take in an entry, and a CC field and maybe a target type?
456
+
461
457
function gsk (dict:: FieldMatrix , Y:: Fields.FieldVector )
462
458
target_eltype = eltype (Y)
463
459
keys_tuple = unrolled_flatmap (keys (dict). values) do outer_key
464
- @show outer_key
465
460
unrolled_map (
466
461
gsk (
467
462
dict[outer_key],
@@ -471,16 +466,15 @@ function gsk(dict::FieldMatrix, Y::Fields.FieldVector)
471
466
),
472
467
) do inner_key
473
468
(
474
- append_internal_name (inner_key [1 ], outer_key [1 ]),
475
- append_internal_name (inner_key [2 ], outer_key [2 ]),
469
+ append_internal_name (outer_key [1 ], inner_key [1 ]),
470
+ append_internal_name (outer_key [2 ], inner_key [2 ]),
476
471
)
477
472
end
478
473
end
474
+ return FieldMatrixKeys (keys_tuple)
479
475
end
480
476
481
- # function gsk(entry, row_field, column_field, ::Type)
482
- # ((@name(), @name()),)
483
- # end
477
+
484
478
485
479
gsk (entry:: UniformScaling , row_field, column_field, :: Type ) =
486
480
((@name (), @name ()),)
494
488
:: Type{FT} ,
495
489
) where {FT} = gsk (
496
490
Fields. field_values (entry)[CartesianIndex (1 , 1 , 1 , 1 , 1 )],
497
- row_field,
498
- column_field,
491
+ Fields . field_values ( row_field)[ CartesianIndex ( 1 , 1 , 1 , 1 , 1 )] ,
492
+ Fields . field_values ( column_field)[ CartesianIndex ( 1 , 1 , 1 , 1 , 1 )] ,
499
493
FT,
500
494
)
501
495
@@ -512,59 +506,72 @@ gsk(
512
506
gsk (value:: FT , row_field, column_field, :: Type{FT} ) where {FT} =
513
507
((@name (), @name ()),)
514
508
509
+ # generic fallback case
510
+ function gsk (value:: T , row_field, column_field, :: Type ) where {T}
511
+ return unrolled_map (fieldnames (T)) do inner_name
512
+ (FieldName (inner_name), @name ())
513
+ end
514
+ end
515
+
515
516
# dvec/dscalar
516
517
function gsk (
517
- value:: Geometry.AxisVectorOrAdj{FT} ,
518
- row_field:: Fields.Field {
519
- <: DataLayouts.AbstractData{<:Geometry.AxisVectorOrAdj{FT}} ,
520
- },
521
- column_field:: Fields.Field{<:DataLayouts.AbstractData{FT}} ,
518
+ value:: Geometry.AxisVector{FT} ,
519
+ row_field:: Geometry.AxisVector{FT} ,
520
+ column_field:: FT ,
522
521
:: Type{FT} ,
523
522
) where {FT}
524
- ncomponents = length ( axes (value, 1 ))
525
- unrolled_map (propertynames ( value)) do component_name
526
- (@name (component_name ), @name ())
523
+
524
+ unrolled_map (1 : length ( axes ( value, 1 ))) do component
525
+ (FieldName (component ), @name ())
527
526
end
528
527
end
529
528
530
529
# dscalar/dvec
531
530
function gsk (
532
- value:: Geometry.AxisVectorOrAdj{FT} ,
533
- row_field:: Fields.Field{<:DataLayouts.AbstractData{FT}} ,
534
- column_field:: Fields.Field {
535
- <: DataLayouts.AbstractData{<:Geometry.AxisVectorOrAdj{FT}} ,
536
- },
531
+ value:: Geometry.AdjointAxisVector{FT} ,
532
+ row_field:: FT ,
533
+ column_field:: Geometry.AxisVector{FT} ,
537
534
:: Type{FT} ,
538
535
) where {FT}
539
- Main. @infiltrate
540
- unrolled_map (propertynames (value)) do component_name
541
- (@name (), @name (component_name))
536
+ unrolled_map (1 : length (axes (value, 1 ))) do component
537
+ (@name (), FieldName (component))
542
538
end
543
539
end
544
540
545
541
# dvec/dvec
546
542
function gsk (
547
543
value:: Geometry.Axis2Tensor{FT} ,
548
- row_field:: Fields.Field {
549
- <: DataLayouts.AbstractData{<:Geometry.AxisVectorOrAdj{FT}} ,
550
- },
551
- column_field:: Fields.Field {
552
- <: DataLayouts.AbstractData{<:Geometry.AxisVectorOrAdj{FT}} ,
553
- },
544
+ row_field:: Geometry.AxisVectorOrAdj{FT} ,
545
+ column_field:: Geometry.AxisVectorOrAdj{FT} ,
554
546
:: Type{FT} ,
555
547
) where {FT}
556
- # Main.@infiltrate
557
- ((@name (), @name ()),)
548
+ unrolled_flatmap (1 : length (axes (value, 1 ))) do row_component
549
+ unrolled_map (1 : length (axes (value, 2 ))) do col_component
550
+ (FieldName (row_component), FieldName (col_component))
551
+ end
552
+ end
558
553
end
559
554
560
555
# dtuple/dvec or dvec/dscalar
561
556
function gsk (
562
- value:: RT ,
563
- row_field:: Fields.Field{<:DataLayouts.AbstractData} ,
564
- column_field:: Fields.Field{<:DataLayouts.AbstractData} ,
557
+ value:: TT ,
558
+ row_field:: RT ,
559
+ column_field,
565
560
:: Type{FT} ,
566
- ) where {FT, RT <: Union{NamedTuple, Tuple} }
567
- ((@name (), @name ()),)
561
+ ) where {FT, TT <: Union{NamedTuple, Tuple} , RT <: Union{NamedTuple, Tuple} }
562
+ unrolled_flatmap (fieldnames (TT)) do tuple_key
563
+ unrolled_map (gsk (
564
+ getfield (value, tuple_key),
565
+ getfield (row_field, tuple_key),
566
+ column_field,
567
+ FT,
568
+ )) do inner_key
569
+ (
570
+ append_internal_name (FieldName (tuple_key), inner_key[1 ]),
571
+ inner_key[2 ],
572
+ )
573
+ end
574
+ end
568
575
end
569
576
570
577
"""
@@ -723,6 +730,7 @@ keys(A_scalar)
723
730
"""
724
731
function scalar_fieldmatrix (field_matrix:: FieldMatrix , Y:: Fields.FieldVector )
725
732
scalar_keys = get_scalar_keys (field_matrix, Y)
733
+ # scalar_keys = gsk(field_matrix, Y)
726
734
entries = unrolled_map (scalar_keys. values) do key
727
735
field_matrix[key]
728
736
end
0 commit comments