Commit 370e024
Refactor DFT+U, step 5 (deepmodeling#7867)
* refactor(dftu): remove redundant cal_force/cal_stress members from Plus_U
These flags were constant copies of PARAM.inp.cal_force/cal_stress stored
at init time. The sole consumer DFTU_LCAO::force_stress now receives them
as explicit parameters from its caller, consistent with the operator
cal_force_stress interfaces.
* refactor(dftu): pass pv and gamma_only_local as function parameters
- Replace implicit Plus_U member access with an explicit
`const Parallel_Orbitals* pv` argument for all module_dftu functions
(pot_onsite_*, cal_occ_mat_*, cal_eff_pot_mat_R_*, pot_uterm_*,
cal_nlm_all, cal_occ/cal_HR_IJR/cal_force_IJR/cal_stress_IJR, folding)
- Thread the removed gamma_only_local member through explicit arguments:
esolver_ks_lcao -> finish_dftu_lcao -> DFTU_LCAO::cal_occ_mat ->
Plus_U::cal_occ_mat_k -> folding_matrix_k_new
- Update call sites: spar_u.cpp, force_stress_lcao.cpp, lcao_set.cpp,
setup_dftu_lcao.{h,cpp}, esolver_ks_lcao.cpp, dftu_lcao_op_legacy.cpp
* refactor(dftu): pass nspin as function parameter to cal_occ_mat_k/gamma
To prepare for extracting cal_occ_mat_k and cal_occ_mat_gamma into
free functions in dftu_occup.h/cpp, remove their dependency on the
Plus_U_Base::nspin member variable.
Changes:
- Add const int nspin parameter to Plus_U::cal_occ_mat_k and
Plus_U::cal_occ_mat_gamma declarations and definitions.
- Replace all this->nspin reads inside both functions with the nspin
parameter (8 occurrences).
- Add nspin to DFTU_LCAO::cal_occ_mat template and its two
specializations, passing it through to cal_occ_mat_k/gamma.
- finish_dftu_lcao already receives nspin; pass it to cal_occ_mat.
Plus_U_Base::nspin member is kept intact since it is still used by
PW-side code (dftu_base.cpp, dftu_cal_occ_pw.cpp) and LCAO
force/stress/operators (dftu_fs.cpp, dftu_lcao_op.cpp, dftu_yukawa.cpp).
Governance rules: rule 2 (reduce hidden state dependency in the
target functions), rule 5 (no default args added; call sites updated).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* refactor(dftu): pass npol/nlocal/ks_solver as parameters to cal_occ_mat_k/gamma
Continue decoupling cal_occ_mat_k and cal_occ_mat_gamma from Plus_U
member variables, following the same pattern as nspin.
Changes:
- Add const int npol, const int nlocal to both cal_occ_mat_k and
cal_occ_mat_gamma; add const std::string& ks_solver to cal_occ_mat_k.
- Replace all this->npol, this->nlocal, this->ks_solver reads inside
both functions with the new parameters.
- DFTU_LCAO::cal_occ_mat template signature unchanged; specializations
pass dftu.get_npol(), dftu.get_nlocal(), dftu.get_ks_solver().
- setup_dftu_lcao.cpp unchanged because the wrapper still receives
Plus_U& dftu and reads the accessors.
Governance rules: rule 2 (reduce hidden state dependency), rule 5
(no default args added).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* refactor(dftu): pass iatlnmipol2iwt as parameter to cal_occ_mat_k/gamma
Step 2 of decoupling cal_occ_mat_k/gamma from Plus_U member variables.
Changes:
- Add const reference parameter iatlnmipol2iwt to both function
declarations and definitions.
- Replace all this->iatlnmipol2iwt reads (4 occurrences) with the
parameter.
- cal_occ_mat specializations pass dftu.get_iatlnmipol2iwt().
Governance rules: rule 2 (reduce hidden state dependency), rule 5
(no default args added).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* refactor(dftu): pass orbital_corr as parameter to cal_occ_mat_k/gamma
Step 3 of decoupling cal_occ_mat_k/gamma from Plus_U member variables.
Changes:
- Add const std::vector<int>& orbital_corr parameter to both function
declarations and definitions.
- Replace get_orbital_corr(it) with orbital_corr[it].
- Replace has_correlated_orbital(it) with orbital_corr[it] != -1.
- cal_occ_mat specializations pass dftu.get_orbital_corr_vec().
Governance rules: rule 2 (reduce hidden state dependency), rule 5
(no default args added).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* refactor(dftu): pass occ_mat data as parameters to cal_occ_mat_k/gamma
Step 4 of decoupling cal_occ_mat_k/gamma from Plus_U member variables.
Changes:
- Add occ_mat, occ_mat_save, occ_mat_initialized as reference
parameters to both function declarations and definitions.
- Inline copy_occ_mat and zero_occ_mat logic (LCAO version, without
PW-side uom_save handling) into both functions.
- Inline mix_occ_mat logic (LCAO version, without uom_save) into
both functions.
- Replace is_mixing_enabled() && is_occ_mat_initialized() with
is_mixing_enabled() && occ_mat_initialized (occ_mat_initialized is
now a parameter).
- Keep mark_occ_mat_initialized() as member call since it writes to
the Plus_U_Base member; the value is only read on subsequent calls.
- Add get_occ_mat_data(), get_occ_mat_save_data(),
get_occ_mat_initialized() accessors to Plus_U_Base.
- cal_occ_mat specializations pass the new parameters via accessors.
Governance rules: rule 2 (reduce hidden state dependency), rule 5
(no default args added).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* refactor(dftu): convert cal_occ_mat_k/gamma to DFTU_LCAO free functions
Move cal_occ_mat_k and cal_occ_mat_gamma from Plus_U member functions
to DFTU_LCAO namespace free functions in dftu_occup.cpp.
Changes:
- Remove Plus_U::cal_occ_mat_k and Plus_U::cal_occ_mat_gamma member
declarations from dftu_lcao.h.
- Add DFTU_LCAO::cal_occ_mat_k and DFTU_LCAO::cal_occ_mat_gamma free
function declarations at the end of dftu_lcao.h.
- Change definitions in dftu_occup.cpp from Plus_U:: to DFTU_LCAO::.
- Change occ_mat_initialized parameter from const bool& to bool&.
- Replace is_mixing_enabled() with PARAM.inp.mixing_dftu (direct read
of input parameter, same semantics).
- Replace mark_occ_mat_initialized() with occ_mat_initialized = true
(write through reference parameter).
- Add Plus_U_Base::set_occ_mat_initialized(bool) setter.
- cal_occ_mat specializations call DFTU_LCAO:: free functions, copy
occ_mat_initialized in/out via local variable.
Governance rules: rule 1 (dependencies passed explicitly), rule 2
(eliminate hidden workflow state from member functions), rule 5
(no default args added).
Verification: make -j 30 in build_max_para_test succeeded, target
abacus_max_para linked.
* docs(agents): add member-to-free-function refactoring pattern
Capture the incremental refactoring workflow validated in the DFTU
occupancy-matrix refactor: inventory this-> reads, pass them as
explicit parameters (const for config, reference for mutable state),
move the function only when the body is this-free, keep a thin
wrapper at the old entry point, and compile each step.
* fix compiler bug
* refactor(dftu): move cal_occ_mat_k/gamma declarations into dftu_lcao_occ.h
Rename dftu_occup.h/.cpp to dftu_lcao_occ.h/.cpp so the occupation-matrix
declarations (template cal_occ_mat<T> dispatcher plus the two concrete
free functions) live in one header, and drop the now-unneeded hamilt
forward declaration from dftu_lcao.h. Build files updated accordingly.
Verified: make -j 30 in build_max_para_test (exit 0, abacus_max_para
v3.11.0-beta8); agent_governance_check.py --staged passed with warnings
only (header includes required by moved declarations).
* fix bug
* update format
* refactor(dftu): move cal_occ_mat<T> specializations into dftu_lcao_occ.cpp
Co-locate the template specializations with the cal_occ_mat_k/gamma
implementations they dispatch to, so dftu_lcao.cpp only keeps Plus_U
class methods. Drop the dftu_lcao_occ.h and matrix.h includes that were
only needed by the moved code, and include dftu_lcao.h in
dftu_lcao_occ.cpp for the Plus_U accessors.
Verified: make -j 30 (exit 0) and scf_u_spin2_old FINAL_ETOT unchanged
(-6304.2287463338761881 eV).
* refactor(dftu): extract cal_energy_correction and onsite potential to DFTU_LCAO free functions
Move the DFT+U energy correction and onsite potential routines out of
Plus_U member functions into DFTU_LCAO namespace free functions, following
the member-to-free-function refactoring pattern:
- dftu_lcao_pots.{h,cpp} (renamed from dftu_tools.cpp via git mv):
DFTU_LCAO::get_onsite_pot (renamed from get_onebody_eff_pot) and
pot_onsite_complex/real free functions. Plus_U::pot_onsite_complex/real
kept as thin wrappers since the OperatorDFTU call sites lack a ucell.
- dftu_lcao_energy.{h,cpp}: DFTU_LCAO::cal_energy_correction; drop the
unused istep parameter; read nspin from PARAM.inp.nspin instead of the
Plus_U::nspin member (member indirection being removed); accumulate
energy_u in a local then write back via set_energy.
- setup_dftu_lcao.cpp: call site switched to
DFTU_LCAO::cal_energy_correction(*dftu_ptr, ucell).
- dftu_base.h: add get_cal_type() and a const get_occ_mat_save() accessor
so the free functions can read private Plus_U_Base state.
- Update TITLE/timer class-name labels from "Plus_U" to "DFTU_LCAO" in
all DFTU_LCAO free functions (occ/pots/energy) for consistency;
Plus_U::pot_onsite_* member wrappers keep "Plus_U".
Verified: cmake --build build -j4 (exit 0);
scf_u_spin2_old FINAL_ETOT bit-for-bit unchanged vs pre-refactor
baseline (-10991.9324016761565872 eV; E_plusU 53.9747137694 eV);
agent_governance_check: 1 ERROR (PARAM.inp.nspin, intentional, removes
the Plus_U::nspin member indirection) + 3 non-blocking WARNINGs.
* refactor(dftu): extract Yukawa potential functions to free functions
Move all Yukawa-potential-related member functions of Plus_U to free
functions in the DFTU_LCAO namespace, declared in the new header
dftu_yukawa.h and defined in dftu_yukawa.cpp:
- spherical_Bessel / spherical_Hankel (pure math helpers)
- cal_yukawa_lambda (lambda from rho, nspin read from PARAM.inp.nspin)
- cal_slater_Fk (Slater integrals Fk)
- cal_slater_UJ (driver: lambda + Fk -> U/J/u_current writeback)
To keep the free functions compiling without exposing protected state
to the world, add focused accessors on the base/derived classes:
- Plus_U_Base: set_U_Yukawa / set_J_Yukawa / get_lambda / set_lambda /
get_Fk_data (reference) / set_u_current
- Plus_U: get_yukawa_lambda / get_ptr_orb
Drop the now-redundant member declarations from dftu_lcao.h and switch
the sole external caller in setup_dftu_lcao.cpp to the free function.
Verification:
- dftu + hamilt_lcao + full build all pass (ENABLE_LCAO=ON, ENABLE_MPI=ON)
- agent_governance_check.py: no findings
- Bit-exact equivalence vs pre-refactor on scf_u_spin2 (non-Yukawa path,
dft_plus_u=1 + hubbard_u): E_KohnSham = -11033.1345305277 eV identical
pre/post; only timestamp/timing lines differ.
- Bit-exact equivalence vs pre-refactor on a Yukawa-enabled case
(yukawa_potential=true): iter-1 ETOT/DRHO and the pre-existing NaN in
U/J (separate latent bug in the rho->lambda path, not introduced here)
are identical pre/post; both binaries crash at iter 2 for the same
ScaLAPACK reason.
* fix(dftu): clamp negative rho in Yukawa lambda + add scf_u_yukawa test
cal_yukawa_lambda forms a Thomas-Fermi-like estimate
lambda_ir = 2 * pow(3*rho_ir/PI, 1/6)
and integrates sum_rho_lambda / sum_rho. Negative grid-point values of
rho appear whenever atomic densities are superposed onto the FFT grid
(oscillation near atom boundaries); pow(negative, 1/6) returns NaN in
C++, which silently poisons sum_rho_lambda, lambda, U/J, u_current and
finally the Hamiltonian (ScaLAPACK info=8 at iter 2).
Fix: clamp rho to 0 before the pow (negative rho has no physical
meaning here and these near-boundary points contribute negligibly to
the integral). Keep a sanity check that fails loud via WARNING_QUIT if
sum_rho is still 0 / non-finite (rho not populated, or grid mismatch),
reporting sum_rho / sum_rho_lambda / min_rho for diagnosis.
Add tests/02_NAO_Gamma/scf_u_yukawa (Fe2O2, gamma-only, nspin=2,
dft_plus_u=1 + yukawa_potential=1) and register it in CASES_CPU.txt.
Before the fix this case crashed at SCF iter 2 with U/J=-nan; after the
fix it converges (#SCF IS CONVERGED#) with finite U/J
(Fe U=6.47 eV J=1.03 eV, O U=4.54 eV J=0.93 eV).
Verification:
- cmake --build build --target dftu hamilt_lcao abacus_basic_para -j4: pass
- mpirun -np 4 from tests/02_NAO_Gamma/scf_u_yukawa: SCF converged,
FINAL_ETOT=-11032.8053805705148989 eV; result.ref generated by
catch_properties.sh from this run.
- agent_governance_check.py --staged: 1 warning (docs sync,
exception-allowed; yukawa_potential already in parameters.yaml).
- Non-Yukawa path unaffected: cal_slater_UJ early-returns when
!use_yukawa(), so the clamp is never reached for dft_plus_u runs
without yukawa_potential.
* refactor(dftu): pass Parallel_Orbitals explicitly to cal_occ_mat instead of storing on Plus_U
Remove the Plus_U::paraV member and its get_paraV() accessor; the pointer
was set once in init() and read only from DFTU_LCAO::cal_occ_mat, so it
behaves as hidden mutable state. Pass pv as an explicit first parameter of
the cal_occ_mat template (and its two specializations) instead. At the call
site in setup_dftu_lcao.cpp the pointer is sourced from
hamilt_lcao_ptr->getHR()->get_paraV(), which is the same Parallel_Orbitals
instance used to build the Hamiltonian and density matrix. The init()
signature keeps its pv parameter since it is still used for the global
row/column dimension checks. Adds a doxygen @PARAM pv note on the
cal_occ_mat declaration.
Governance warnings (exception allowed): no test path changes (pure
refactor, no behavior change; dftu_lcao_test.cpp does not reference
Plus_U::get_paraV or cal_occ_mat) and no docs change (no INPUT parameter
behavior change).
Verified: make -C source/source_lcao/module_dftu -j4 (exit 0),
make -C source/source_lcao -j4 (exit 0), make -j4 (exit 0, abacus linked).
* refactor(dftu): drop Plus_U::pot_onsite_* wrappers, call DFTU_LCAO free functions directly
The free functions DFTU_LCAO::pot_onsite_complex and
DFTU_LCAO::pot_onsite_real already live in dftu_lcao_pots.h/.cpp with the
full implementation; the two Plus_U member functions of the same name were
only thin forwards (*this, *this->ucell, ...). Remove the member wrappers
and their declarations, and update the six call sites in dftu_hamilt.cpp
(four) and dftu_force.cpp (two) to invoke the DFTU_LCAO free functions
directly.
Sites that already have ucell in scope (Plus_U::cal_eff_pot_mat_R_* use
*this->ucell; force_stress takes ucell as a parameter) pass it through
directly. The two DFTU_LCAO::pot_uterm_* free functions only held a
Plus_U& reference, so add a Plus_U::get_ucell() const accessor (mirroring
the existing get_ptr_orb/get_orb_cutoff read-only accessors) to source the
unit cell without cascading a new parameter through pot_uterm_* and its
OperatorDFTU callers. Also drop the now-orphaned "In dftu_lcao_pots.cpp"
section header that used to label the removed member declarations.
Governance warnings (exception allowed): no test path changes (pure
refactor, no behavior change; the free functions are unchanged and were
already the implementations being called) and no docs change (no INPUT
parameter behavior change).
Verified: make -C source/source_lcao/module_dftu -j4 (exit 0),
make -j4 (exit 0, abacus linked).
* refactor(module_dftu): thread ucell explicitly, drop Plus_U::ucell member
Remove the Plus_U private member `const UnitCell* ucell` and its
`get_ucell()` accessor. The 4 read sites now receive ucell as an
explicit parameter:
- DFTU_LCAO::pot_uterm_{complex,real}: add `const UnitCell& ucell` param,
passed through the legacy OperatorDFTU operator which now holds its own
`ucell` pointer set once in the constructor.
- Plus_U::cal_eff_pot_mat_R_{double,complex_double}: add `const UnitCell&`
param; their only callers (sparse_format::cal_HR_dftu{,_soc}) are
updated to thread ucell through.
Construction sites updated to pass ucell:
- hamilt_lcao.cpp (HamiltLCAO ctor, 2 sites)
- write_vxc.hpp (vdftu_op_ao local, 1 site)
Also fix a stale doxygen on pot_uterm_* (the Plus_U::pot_onsite_*
wrappers were removed in the previous commit; the comment now reads
"Calls DFTU_LCAO::pot_onsite_*").
Pure refactor, no behavior change. No INPUT parameter affected.
Verification:
- make -j4 (full build): 100%, linked abacus_basic_para
- python3 tools/03_code_analysis/agent_governance_check.py --staged: no findings
- grep: no residual Plus_U::ucell / get_ucell() references
Signed-off-by: Abacus Agent <abacus@example.com>
* refactor(module_dftu): drop Plus_U npol/nlocal/ks_solver members
Remove the Plus_U private members `npol`, `nlocal`, `ks_solver` and their
read-only accessors `get_npol()`, `get_nlocal()`, `get_ks_solver()`.
All read sites now take these values from sources already in scope:
- nlocal: Parallel_Orbitals::get_global_row_size() (matches the GEMM
global matrix dimension the member was initialized from in init())
- npol: UnitCell::get_npol(), or the existing npol parameter of
DFTU_LCAO::force_stress (which previously shadowed it with dftu)
- ks_solver: PARAM.inp.ks_solver (dftu_force.cpp now includes
source_io/module_parameter/parameter.h)
No function signature changes; the PW path is untouched
(Plus_U_Base::init_base uses its local parameter, not these members).
Pure refactor, no behavior change. No INPUT parameter affected.
Verification:
- make -j4 (full build): 100%, linked abacus_basic_para
- python3 tools/03_code_analysis/agent_governance_check.py --staged: no findings
- grep: no residual Plus_U npol/nlocal/ks_solver member or accessor uses
Signed-off-by: Abacus Agent <abacus@example.com>
* update test
* reduce number of PARAM
---------
Signed-off-by: Abacus Agent <abacus@example.com>
Co-authored-by: abacus_fixer <mohanchen@pku.eud.cn>1 parent 196d199 commit 370e024
43 files changed
Lines changed: 1781 additions & 1212 deletions
File tree
- source
- source_esolver
- source_io/module_hs
- source_lcao
- module_dftu
- source_pw
- module_ofdft
- module_pwdft
- tests/02_NAO_Gamma
- scf_u_yukawa
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
94 | 94 | | |
95 | 95 | | |
96 | 96 | | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
97 | 103 | | |
98 | 104 | | |
99 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
818 | 818 | | |
819 | 819 | | |
820 | 820 | | |
821 | | - | |
| 821 | + | |
822 | 822 | | |
823 | 823 | | |
824 | 824 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
506 | 506 | | |
507 | 507 | | |
508 | 508 | | |
509 | | - | |
| 509 | + | |
510 | 510 | | |
511 | 511 | | |
512 | 512 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
209 | 209 | | |
210 | 210 | | |
211 | 211 | | |
212 | | - | |
| 212 | + | |
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
457 | 457 | | |
458 | 458 | | |
459 | 459 | | |
460 | | - | |
| 460 | + | |
461 | 461 | | |
462 | 462 | | |
463 | 463 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
226 | 226 | | |
227 | 227 | | |
228 | 228 | | |
229 | | - | |
230 | | - | |
231 | | - | |
232 | | - | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
233 | 234 | | |
234 | 235 | | |
235 | 236 | | |
| |||
383 | 384 | | |
384 | 385 | | |
385 | 386 | | |
386 | | - | |
387 | | - | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
388 | 390 | | |
389 | 391 | | |
390 | 392 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
89 | 89 | | |
90 | 90 | | |
91 | 91 | | |
92 | | - | |
93 | 92 | | |
94 | | - | |
95 | | - | |
96 | 93 | | |
97 | 94 | | |
98 | 95 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
7 | | - | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| 9 | + | |
8 | 10 | | |
9 | 11 | | |
10 | 12 | | |
| |||
14 | 16 | | |
15 | 17 | | |
16 | 18 | | |
| 19 | + | |
| 20 | + | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
| |||
23 | 27 | | |
24 | 28 | | |
25 | 29 | | |
26 | | - | |
| 30 | + | |
| 31 | + | |
27 | 32 | | |
28 | 33 | | |
29 | 34 | | |
| |||
35 | 40 | | |
36 | 41 | | |
37 | 42 | | |
38 | | - | |
| 43 | + | |
39 | 44 | | |
40 | | - | |
| 45 | + | |
41 | 46 | | |
42 | 47 | | |
43 | 48 | | |
44 | 49 | | |
45 | 50 | | |
46 | 51 | | |
47 | | - | |
| 52 | + | |
48 | 53 | | |
49 | 54 | | |
50 | 55 | | |
| |||
56 | 61 | | |
57 | 62 | | |
58 | 63 | | |
59 | | - | |
| 64 | + | |
60 | 65 | | |
61 | 66 | | |
62 | 67 | | |
63 | 68 | | |
64 | 69 | | |
65 | 70 | | |
66 | | - | |
| 71 | + | |
67 | 72 | | |
68 | 73 | | |
69 | 74 | | |
| |||
79 | 84 | | |
80 | 85 | | |
81 | 86 | | |
82 | | - | |
83 | | - | |
| 87 | + | |
| 88 | + | |
84 | 89 | | |
85 | 90 | | |
86 | 91 | | |
87 | 92 | | |
88 | 93 | | |
89 | 94 | | |
90 | | - | |
| 95 | + | |
91 | 96 | | |
92 | | - | |
| 97 | + | |
93 | 98 | | |
94 | 99 | | |
95 | 100 | | |
96 | | - | |
| 101 | + | |
97 | 102 | | |
98 | 103 | | |
99 | 104 | | |
100 | 105 | | |
101 | | - | |
| 106 | + | |
102 | 107 | | |
103 | 108 | | |
104 | 109 | | |
| |||
115 | 120 | | |
116 | 121 | | |
117 | 122 | | |
118 | | - | |
| 123 | + | |
119 | 124 | | |
120 | 125 | | |
121 | 126 | | |
| |||
127 | 132 | | |
128 | 133 | | |
129 | 134 | | |
130 | | - | |
| 135 | + | |
131 | 136 | | |
132 | | - | |
| 137 | + | |
133 | 138 | | |
134 | 139 | | |
135 | 140 | | |
136 | 141 | | |
137 | 142 | | |
138 | | - | |
| 143 | + | |
139 | 144 | | |
140 | | - | |
141 | | - | |
| 145 | + | |
| 146 | + | |
142 | 147 | | |
143 | 148 | | |
144 | 149 | | |
| |||
161 | 166 | | |
162 | 167 | | |
163 | 168 | | |
164 | | - | |
| 169 | + | |
165 | 170 | | |
166 | 171 | | |
167 | 172 | | |
| |||
173 | 178 | | |
174 | 179 | | |
175 | 180 | | |
176 | | - | |
| 181 | + | |
177 | 182 | | |
178 | | - | |
179 | | - | |
| 183 | + | |
| 184 | + | |
180 | 185 | | |
181 | 186 | | |
182 | 187 | | |
183 | | - | |
| 188 | + | |
184 | 189 | | |
185 | | - | |
186 | | - | |
| 190 | + | |
| 191 | + | |
187 | 192 | | |
188 | 193 | | |
189 | 194 | | |
190 | 195 | | |
191 | 196 | | |
192 | | - | |
| 197 | + | |
193 | 198 | | |
194 | 199 | | |
195 | 200 | | |
196 | 201 | | |
197 | | - | |
| 202 | + | |
198 | 203 | | |
199 | 204 | | |
200 | 205 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
33 | 35 | | |
34 | 36 | | |
35 | 37 | | |
| |||
39 | 41 | | |
40 | 42 | | |
41 | 43 | | |
42 | | - | |
| 44 | + | |
| 45 | + | |
43 | 46 | | |
44 | 47 | | |
45 | 48 | | |
| |||
0 commit comments