@@ -43,10 +43,10 @@ julia> blow_up(w, ["x", "y", "x1"]; coordinate_name = "e1")
43
43
Partially resolved Weierstrass model over a concrete base -- U(1) Weierstrass model based on arXiv paper 1208.2695 Eq. (B.19)
44
44
```
45
45
"""
46
- function blow_up (m:: AbstractFTheoryModel , ideal_gens:: Vector{String} ; coordinate_name:: String = " e" )
46
+ function blow_up (m:: AbstractFTheoryModel , ideal_gens:: Vector{String} ; coordinate_name:: String = " e" , nr_of_current_blow_up :: Int = 1 , nr_blowups_in_sequence :: Int = 1 )
47
47
R = cox_ring (ambient_space (m))
48
48
I = ideal ([eval_poly (k, R) for k in ideal_gens])
49
- return blow_up (m, I; coordinate_name = coordinate_name)
49
+ return blow_up (m, I; coordinate_name = coordinate_name, nr_of_current_blow_up = nr_of_current_blow_up, nr_blowups_in_sequence = nr_blowups_in_sequence )
50
50
end
51
51
52
52
@@ -82,8 +82,8 @@ julia> blow_up(t, ideal([x, y, x1]); coordinate_name = "e1")
82
82
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
83
83
```
84
84
"""
85
- function blow_up (m:: AbstractFTheoryModel , I:: MPolyIdeal ; coordinate_name:: String = " e" )
86
- return blow_up (m, ideal_sheaf (ambient_space (m), I); coordinate_name = coordinate_name)
85
+ function blow_up (m:: AbstractFTheoryModel , I:: MPolyIdeal ; coordinate_name:: String = " e" , nr_of_current_blow_up :: Int = 1 , nr_blowups_in_sequence :: Int = 1 )
86
+ return blow_up (m, ideal_sheaf (ambient_space (m), I); coordinate_name = coordinate_name, nr_of_current_blow_up = nr_of_current_blow_up, nr_blowups_in_sequence = nr_blowups_in_sequence )
87
87
end
88
88
89
89
function _ideal_sheaf_to_minimal_supercone_coordinates (X:: AbsCoveredScheme , I:: AbsIdealSheaf ; coordinate_name:: String = " e" )
@@ -156,7 +156,7 @@ julia> blow_up(t, blowup_center; coordinate_name = "e1")
156
156
Partially resolved global Tate model over a concrete base -- SU(5)xU(1) restricted Tate model based on arXiv paper 1109.3454 Eq. (3.1)
157
157
```
158
158
"""
159
- function blow_up (m:: AbstractFTheoryModel , I:: AbsIdealSheaf ; coordinate_name:: String = " e" )
159
+ function blow_up (m:: AbstractFTheoryModel , I:: AbsIdealSheaf ; coordinate_name:: String = " e" , nr_of_current_blow_up :: Int = 1 , nr_blowups_in_sequence :: Int = 1 )
160
160
161
161
# Cannot (yet) blowup if this is not a Tate or Weierstrass model
162
162
entry_test = (m isa GlobalTateModel) || (m isa WeierstrassModel)
@@ -216,9 +216,34 @@ function blow_up(m::AbstractFTheoryModel, I::AbsIdealSheaf; coordinate_name::Str
216
216
for (key, value) in model_attributes
217
217
set_attribute! (model, key, value)
218
218
end
219
+
219
220
set_attribute! (model, :partially_resolved , true )
220
221
set_attribute! (model, :blow_down_morphism , bd)
221
222
223
+ if ambient_space (model) isa NormalToricVariety
224
+ index = index_of_exceptional_ray (bd)
225
+ @req index == ngens (cox_ring (ambient_space (model))) " Inconsistency encountered. Contact the authors"
226
+ indices = exceptional_divisor_indices (model)
227
+ push! (indices, index)
228
+ set_attribute! (model, :exceptional_divisor_indices , indices)
229
+
230
+ # Update slow attributes only at the end of a blow up sequence, if possible
231
+ if nr_of_current_blow_up == nr_blowups_in_sequence
232
+ # Update exceptional classes and their indices
233
+ divs = torusinvariant_prime_divisors (ambient_space (model))
234
+
235
+ indets = [lift (g) for g in gens (cohomology_ring (ambient_space (model), check = false ))]
236
+ coeff_ring = coefficient_ring (ambient_space (model))
237
+ new_e_classes = Vector {CohomologyClass} ()
238
+ for i in indices
239
+ poly = sum (coeff_ring (coefficients (divs[i])[k]) * indets[k] for k in 1 : length (indets))
240
+ push! (new_e_classes, CohomologyClass (ambient_space (model), cohomology_ring (ambient_space (model), check = false )(poly)))
241
+ end
242
+
243
+ set_attribute! (model, :exceptional_classes , new_e_classes)
244
+ end
245
+ end
246
+
222
247
# Return the model
223
248
return model
224
249
end
@@ -677,15 +702,30 @@ function set_zero_section(m::AbstractFTheoryModel, desired_value::Vector{String}
677
702
end
678
703
679
704
function set_zero_section_class (m:: AbstractFTheoryModel , desired_value:: String )
705
+ desired_value = Symbol (desired_value)
680
706
divs = torusinvariant_prime_divisors (ambient_space (m))
681
707
cohomology_ring (ambient_space (m); check= false )
682
- cox_gens = string .( gens ( cox_ring (ambient_space (m) )))
708
+ cox_gens = symbols ( cox_ring (ambient_space (m)))
683
709
@req desired_value in cox_gens " Specified zero section is invalid"
684
710
index = findfirst (== (desired_value), cox_gens)
685
711
set_attribute! (m, :zero_section_index => index:: Int )
686
712
set_attribute! (m, :zero_section_class => cohomology_class (divs[index]))
687
713
end
688
714
715
+ function set_exceptional_classes (m:: AbstractFTheoryModel , desired_value:: Vector{String} )
716
+ divs = torusinvariant_prime_divisors (ambient_space (m))
717
+ cohomology_ring (ambient_space (m); check= false )
718
+ cox_gens = symbols (cox_ring (ambient_space (m)))
719
+ @req issubset (Symbol .(desired_value), cox_gens) " Specified exceptional classes are invalid"
720
+ exceptional_divisor_indices = Vector {Int} ()
721
+ for class in desired_value
722
+ index = findfirst (== (Symbol (class)), cox_gens)
723
+ push! (exceptional_divisor_indices, index)
724
+ end
725
+ set_attribute! (m, :exceptional_divisor_indices => exceptional_divisor_indices:: Vector{Int} )
726
+ set_attribute! (m, :exceptional_classes => [cohomology_class (divs[index]) for index in exceptional_divisor_indices])
727
+ end
728
+
689
729
function set_gauge_algebra (m:: AbstractFTheoryModel , algebras:: Vector{String} )
690
730
C = algebraic_closure (QQ)
691
731
function _construct (g:: String )
@@ -849,7 +889,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
849
889
# Gather information for resolution
850
890
centers, exceptionals = resolutions (m)[resolution_index]
851
891
nr_blowups = length (centers)
852
-
892
+
853
893
# Resolve the model
854
894
resolved_model = m
855
895
blow_up_chain = []
@@ -868,9 +908,8 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
868
908
# Conduct the blowup
869
909
if ambient_space (resolved_model) isa NormalToricVariety
870
910
# Toric case is easy...
871
- resolved_model = blow_up (resolved_model, blow_up_center; coordinate_name = exceptionals[k])
911
+ resolved_model = blow_up (resolved_model, blow_up_center; coordinate_name = exceptionals[k], nr_of_current_blow_up = k, nr_blowups_in_sequence = nr_blowups )
872
912
else
873
-
874
913
# Compute proper transform of center generated by anything but exceptional divisors
875
914
filtered_center = [c for c in blow_up_center if ! (c in exceptionals)]
876
915
initial_ambient_space = ambient_space (m)
@@ -929,7 +968,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
929
968
# z^2 -> z^2 * m1
930
969
# y * z -> y * z * m1
931
970
as = ambient_space (resolved_model);
932
- bl = domain (blow_up (as, [0 ,0 ,0 ,1 ,0 ], coordinate_name = " m1" ));
971
+ bl = domain (blow_up (as, [0 ,0 ,0 ,1 ,0 ], coordinate_name = " m1" , 1 , 3 ));
933
972
f = hypersurface_equation (resolved_model);
934
973
my_mons = collect (monomials (f));
935
974
pos_1 = findfirst (k -> k == " y" , [string (a) for a in gens (cox_ring (as))])
@@ -959,7 +998,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
959
998
# x^3 -> x^3 * m2^2
960
999
# z^3 -> z^3 * m2
961
1000
as = ambient_space (model_bl);
962
- bl = domain (blow_up (as, [0 ,0 ,0 ,- 2 ,1 ], coordinate_name = " m2" ));
1001
+ bl = domain (blow_up (as, [0 ,0 ,0 ,- 2 ,1 ], coordinate_name = " m2" , 2 , 3 ));
963
1002
f = hypersurface_equation (model_bl);
964
1003
my_mons = collect (monomials (f));
965
1004
pos_1 = findfirst (k -> k == " x" , [string (a) for a in gens (cox_ring (as))])
@@ -990,7 +1029,7 @@ function resolve(m::AbstractFTheoryModel, resolution_index::Int)
990
1029
# m2^2 -> m2^2 * m3
991
1030
# z^2 -> z^2 * m3
992
1031
as = ambient_space (model_bl2);
993
- bl = domain (blow_up (as, [0 ,0 ,0 ,- 1 ,1 ], coordinate_name = " m3" ));
1032
+ bl = domain (blow_up (as, [0 ,0 ,0 ,- 1 ,1 ], coordinate_name = " m3" , 3 , 3 ));
994
1033
f = hypersurface_equation (model_bl2);
995
1034
my_mons = collect (monomials (f));
996
1035
pos_1 = findfirst (k -> k == " m2" , [string (a) for a in gens (cox_ring (as))])
0 commit comments