@@ -27,6 +27,7 @@ module evolution
2727 use solver, only: linbcg
2828 use globe_data, only: Temp_p, Temp_pp, inverse_time, heat, lin_rhoc
2929 use globe_data, only: acsr, ja, ia
30+ use globe_data, only: heated_volume
3031 use heating, only: heater
3132 use boundary_vector, only: boundary
3233 use cattaneo, only: S_catS
@@ -117,6 +118,67 @@ subroutine simulate(itime)
117118 !- --------------------------------------------
118119 ! Construct S vector
119120 !- --------------------------------------------
121+
122+ ! COMPREHENSIVE DEBUG: Dump all quantities for radial cross-section at iy=16
123+ if (itime .le. 2 ) then
124+ block
125+ integer (int12) :: dbg_ix, dbg_idx, dbg_k
126+ real (real12) :: dbg_Ax, dbg_rowsum
127+ write (* ,* ) ' '
128+ write (* ,* ) ' =========================================================='
129+ write (* ,' (A,I6)' ) ' DEBUG TIMESTEP ' , itime
130+ write (* ,* ) ' =========================================================='
131+ write (* ,* ) ' inverse_time =' , inverse_time
132+ write (* ,* ) ' heated_volume =' , heated_volume
133+ write (* ,* ) ' sum(Q) =' , sum (Q), ' sum(Qdens) =' , sum (Qdens)
134+ write (* ,* ) ' count(Qdens/=0) =' , count (Qdens .ne. 0.0_real12 )
135+ write (* ,* ) ' '
136+ write (* ,* ) ' --- Radial cross-section at iy=16, iz=1 ---'
137+ write (* ,' (A6,A12,A12,A14,A14,A14,A14,A14)' ) &
138+ ' ix' , ' mat_id' , ' kappa' , ' rhoCp' , ' Temp_p' , ' B(I)' , ' Qdens(I)' , ' S(I)'
139+ do dbg_ix = 1 , nx
140+ dbg_idx = dbg_ix + (16-1 )* nx ! 1D index for (ix, iy=16, iz=1)
141+ write (* ,' (I6,I12,ES12.4,ES14.6,ES14.6,ES14.6,ES14.6,ES14.6)' ) &
142+ dbg_ix, grid(dbg_ix,16 ,1 )% imaterial_type, &
143+ grid(dbg_ix,16 ,1 )% kappa, &
144+ lin_rhoc(dbg_idx), &
145+ Temp_p(dbg_idx), &
146+ B(dbg_idx), Qdens(dbg_idx), S(dbg_idx)
147+ end do
148+ write (* ,* ) ' '
149+ write (* ,* ) ' --- H-matrix rows for iy=16 (radial): row_sum and entries ---'
150+ do dbg_ix = 1 , nx
151+ dbg_idx = dbg_ix + (16-1 )* nx
152+ dbg_rowsum = 0.0_real12
153+ do dbg_k = ia(dbg_idx), ia(dbg_idx+1 )- 1
154+ dbg_rowsum = dbg_rowsum + acsr(dbg_k)
155+ end do
156+ ! Compute A*Temp_p for this row (matrix-vector product)
157+ dbg_Ax = 0.0_real12
158+ do dbg_k = ia(dbg_idx), ia(dbg_idx+1 )- 1
159+ dbg_Ax = dbg_Ax + acsr(dbg_k) * Temp_p(ja(dbg_k))
160+ end do
161+ write (* ,' (A,I3,A,ES14.6,A,ES14.6,A,ES14.6)' ) &
162+ ' ix=' , dbg_ix, &
163+ ' row_sum=' , dbg_rowsum, &
164+ ' H*Tp=' , dbg_Ax, &
165+ ' S=' , S(dbg_idx)
166+ end do
167+ write (* ,* ) ' '
168+ write (* ,* ) ' --- Heater region at iy=32, iz=1 ---'
169+ write (* ,' (A6,A12,A14,A14,A14,A14)' ) &
170+ ' ix' , ' iheater' , ' Temp_p' , ' B(I)' , ' Qdens(I)' , ' S(I)'
171+ do dbg_ix = 1 , min (10 , nx)
172+ dbg_idx = dbg_ix + (32-1 )* nx
173+ write (* ,' (I6,I12,ES14.6,ES14.6,ES14.6,ES14.6)' ) &
174+ dbg_ix, grid(dbg_ix,32 ,1 )% iheater, &
175+ Temp_p(dbg_idx), B(dbg_idx), Qdens(dbg_idx), S(dbg_idx)
176+ end do
177+ write (* ,* ) ' =========================================================='
178+ write (* ,* ) ' '
179+ end block
180+ end if
181+
120182 if ( iSteady .eq. 0 ) then
121183 S = - inverse_time * Temp_p * lin_rhoc - Qdens - B
122184 if (IVERB .gt. 3 ) then
@@ -192,12 +254,38 @@ subroutine simulate(itime)
192254
193255 call solve_petsc_csr(NA32, ia32, ja32, acsr, S, x, tol, itmax)
194256
195- ! Debug: Print solution statistics and verify solution
196- if (IVERB .gt. 3 ) then
197- write (* ,* ) " Solution x after PETSc: min=" , minval (x), " max=" , maxval (x), " avg=" , sum (x)/ size (x)
198- write (* ,* ) " Temperature change: avg(x-Temp_p)=" , sum (x- Temp_p)/ size (x)
199- write (* ,* ) " Max temperature change: " , maxval (abs (x- Temp_p))
200- write (* ,* ) " =============================================="
257+ ! POST-SOLVE DEBUG: Show solution and residual for radial cross-section
258+ if (itime .le. 2 ) then
259+ block
260+ integer (int12) :: dbg_ix, dbg_idx, dbg_k
261+ real (real12) :: dbg_Ax, dbg_resid
262+ write (* ,* ) ' '
263+ write (* ,* ) ' --- POST-SOLVE: Solution at iy=16, iz=1 ---'
264+ write (* ,' (A6,A14,A14,A14,A14)' ) &
265+ ' ix' , ' Temp_p(old)' , ' x(new)' , ' deltaT' , ' residual'
266+ do dbg_ix = 1 , nx
267+ dbg_idx = dbg_ix + (16-1 )* nx
268+ ! Compute H*x for this row (should equal S)
269+ dbg_Ax = 0.0_real12
270+ do dbg_k = ia(dbg_idx), ia(dbg_idx+1 )- 1
271+ dbg_Ax = dbg_Ax + acsr(dbg_k) * x(ja(dbg_k))
272+ end do
273+ dbg_resid = dbg_Ax - S(dbg_idx)
274+ write (* ,' (I6,ES14.6,ES14.6,ES14.6,ES14.6)' ) &
275+ dbg_ix, Temp_p(dbg_idx), x(dbg_idx), &
276+ x(dbg_idx) - Temp_p(dbg_idx), dbg_resid
277+ end do
278+ write (* ,* ) ' '
279+ write (* ,* ) ' --- POST-SOLVE: Heater region iy=32 ---'
280+ write (* ,' (A6,A14,A14,A14)' ) ' ix' , ' Temp_p(old)' , ' x(new)' , ' deltaT'
281+ do dbg_ix = 1 , min (10 , nx)
282+ dbg_idx = dbg_ix + (32-1 )* nx
283+ write (* ,' (I6,ES14.6,ES14.6,ES14.6)' ) &
284+ dbg_ix, Temp_p(dbg_idx), x(dbg_idx), &
285+ x(dbg_idx) - Temp_p(dbg_idx)
286+ end do
287+ write (* ,* ) ' =========================================================='
288+ end block
201289 end if
202290
203291 ! Note: Don't deallocate ia32, ja32 - keep them for next time step
@@ -227,6 +315,22 @@ subroutine simulate(itime)
227315 Temp_pp = Temp_p
228316 Temp_p = x
229317
318+ ! DEBUG: Verify Temp_p after assignment
319+ if (itime .le. 2 ) then
320+ block
321+ integer (int12) :: dbg_ix2, dbg_idx2
322+ write (* ,* ) ' '
323+ write (* ,' (A,I6)' ) ' === VERIFY Temp_p AFTER ASSIGNMENT, itime=' , itime
324+ write (* ,' (A6,A14,A14)' ) ' ix' , ' Temp_p(1D)' , ' x(1D)'
325+ do dbg_ix2 = 1 , nx
326+ dbg_idx2 = dbg_ix2 + (16-1 )* nx
327+ write (* ,' (I6,ES14.6,ES14.6)' ) &
328+ dbg_ix2, Temp_p(dbg_idx2), x(dbg_idx2)
329+ end do
330+ write (* ,* ) ' === END VERIFY ==='
331+ end block
332+ end if
333+
230334 ! if (TempDepProp .eq. 1) then
231335 ! CALL ChangeProp()
232336 ! end if
0 commit comments